kazu22002の技術覚書

PHPer, Golang, AWS エンジニアの日々

svnからgitに移行するまでのプロセス

以前はsvnを中心に開発をしていましたが、2年ぐらい前からgitに移行し、なんとか運用まで回せている状態だと思っています。

ただやっぱりなんでも新しいことに変えることは難しいんだとかなり思い知り、少し書いてみようかと思います。

メリットはあるのか?

まず新しいことを導入しようとした際に、なにがいいのか。またそれによりどう良くなるのか。が重要になってくると思います。

別にメリットがないのであれば、そのまま使い続けてもいいと思います。

gitに関しては、やはりブランチの切り替えの速さだけをとっても十分に切り替えを実施するメリットになると思っていました。

svnでブランチを切り替える際には時間がものすごくかかった印象があり、ブランチを活用するという部分が弱く、同じブランチでみんなコンフリクトしながらマージを行なっていたと思います。

これだけでも十分に変更するメリットはあると思っていましたが、あまり響くところではなかったみたいです。

メリットを伝えるというのは、相手がなにに重きを置いているのか、さらに予想以上に問題が解決する可能性があるのかを提示する必要があると思います。

svnからgitに変更するメリットとして、私自身が今感じている内容をあげてみます。

  • ブランチの切り替えが早い
  • ローカルのリポジトリにコミットしても全体に影響がないため、試したいコードを気軽に試せる
  • サーバーがダメになっても、それぞれのローカルリポジトリから復旧可能
  • pull request
  • デファクトになっているため、他の会社でも通じる
  • OSSにも参加しやすい
  • ファイル名を変更しても、変更したことを理解してログを残してくれる
  • リリースもpushイベントをフックすることで動作できるようになる

色々とメリットがありますね。

実は会社がVSSを中心に使っていたこともあり、gitへの移行については本気で早めにやりたかったことであり、現状gitへの移行が問題なく実現したことはかなりありがたかったです。

※VSSは変更をするためにファイルの所有者を設定する必要があり、現在変更している人以外はファイルに変更を加えることができないため、しばしば「ファイルを離してもらっていいですか(チェックアウト)」という会話が発生していた。日頃の会話で無駄だと思うところから改善は考えられるものです。

gitに移行したことで、リリースについてもかなり楽にしてもらったと思います。

移行までの準備

実際に移行する際には、ほとんどの人がgitを使用できない状態でした。

そのため、まずは自分が使いこなせるようになり、広める役になる必要があると思い、自身が関わるプロジェクトを犠牲にいくつかチャレンジしてみましたね。

git自体のサーバーを立てることは問題ないのですが、使うならGUIで簡単にできることはしたいのと、お金をできるだけ発生させないようにしたかったため、社内でgitbucketを立てて試しました。

概ね問題なさそうというラインまでいけましたが、どうも移行のきっかけができず放置していた時期があります。

実際にサービス自体の開発は常に行なっていたため、重複期間があるか一気に切り替えにするかの選択もあり、踏み切れなかったと思います。

きっかけは中途社員

そんな時に、新しい中途社員が入り、gitがいい。とのことで、準備していた内容で一気に押せ押せムードになり、社内でgit使おうか。という意識にもなり、一気にやってしまえ。と対応できました。

やっぱりいつものメンバーより新しい人や外部の人の言葉で進むケースも世の中にはあることを実感し、時期的にもラッキーだと痛感しています。

その後、実際に使うようになり詰まることが多くあるかと思いきや、できるところから対応する。という構えで、自分が納得できるよう進めていたこともあり、あまり色々聞かずに理解していけたと思っています。

最初は理解できる部分からやる

最初はなぜリモートリポジトリが必要なのか、理解できずローカルにコミットするたびにpushするようにして、SVNのイメージと同じように使用していました。そのうち、他の人と作業するようになり、リモートリポジトリの有用性を理解でき、自身のローカルで作業する際にも、いろいろと施策のブランチを作るようになりました。

また用語でわからないのも多く、「rebase」「fork」などよくわからないのは、最初のうちは触らないようにして、まずは運用にのせることを意識して色々とやらないように心がけました。

ただ運用しているうちにやっぱり色々としる必要が出てくるので、そのたびに理解を深めていき、gitflowのような運用パターンなど知るようになりました。

いまではリリースもgitのpushをフックして動作するところまでやっています。便利ですね。(いままでは変更ソースをフォルダにまとめて、サーバーにSCPであげていました)

まだわからないことも多数

コミット内容の修正とか消したりとか、使えると便利な機能があることは理解してますが、正直わからないことが多いのが事実です。

git自体は重点的に学習してみようかと思っているので、学習したら記録を残したいと思います。

最後にデメリット

メリットばかりでデメリットはないのか?と思うのは普通でしょう。

デメリットをあげるなら、学習コストぐらいだと思います。ただ理解している人が、近くにいれば学習コストはかなり低くなるため、自社にできる人がいないということであれば、gitができる人をひとりいれるだけで運用まで持っていけると思います。

最近の若い世代なら、学校でgitとかも勉強していそうなので、新しい風をいれるのがいいと思います。

老害にはなりたくないです。

GitHub実践入門 ~Pull Requestによる開発の変革 (WEB+DB PRESS plus)

GitHub実践入門 ~Pull Requestによる開発の変革 (WEB+DB PRESS plus)