Subversion to Git

勤務先は未だに Subversion を使っているのですが、いい加減 git を使いましょうということで先日勉強会を開催したのでそのときに使用した資料を Speaker Deck にアップロードしてみました。一部社外に公開出来ないところは削除したり改変したりしているため少々おかしいところがありますが、殆ど社内勉強会で使用した資料と同じものです。良ければご参照ください。勤務先では基本的に Windows + Eclipse 環境で開発している人が多いので、Eclipse や GitHub for Windows によるデモを交えた勉強会にしました。そのため、資料中でも EGitGitHub for Windows に関する記述が出てきます。ちなみに EGit は今回初めて評価してみたのですが、思った以上に良く出来ていて業務での利用には全く問題ないと判断しました。勿論 git の様々な操作を全て使用出来るようにはなっていませんが、一般的なコマンドについてはカバーしていますし、難しい操作については GitHub for Windows に付属する Shell を使えば問題ありません。

Subversion の嫌なところ

Subversion を使っていて日常的に困るのは以下のようなケースです。

  1. 「とりあえずコミット」が横行するのできちんとしたコードレビューが難しい(レビュー対象が散乱する)
  2. 手元の作業記録を簡単に記録出来ないので気楽にリファクタリングすることが出来ない(大規模なリファクタリング中にあれこれ試すのが難しい)
  3. (同じ理由により)並行作業がしづらい(手元でコードを書いているときに別作業を頼まれたら苦労する)

git にはローカルリポジトリがあるのでこのような問題点が解決出来ます。

  1. コミットを整理してから push 出来る
  2. 手元で色々なブランチを作って作業出来る
  3. 作業途中で stash 出来る

素敵ですよね。

git が生み出すもの

勉強会では git を採用することのメリットについてあれこれ話しました。「git を導入したらどれぐらい生産性が上がるの?」というのは、PC やモニタを買うのと一緒でなかなか数値化することが難しいものではありますが、少なくとも参加した皆さんにはある程度良い感触を持ってもらえた思えてもらえたんじゃないかな……?と思います。 個人的には

  1. バリバリ開発している人(コア開発者)ほど生産性が上がる
  2. (コア開発者は大抵コードレビューも行うので)コードレビューの時間が取れるようになる
  3. コードレビューの時間が取れる + git 効果でレビューしやすくなるのでレビューの質が上がる
  4. 細かなコードレビューでジュニアなメンバーのスキルアップにもつながる
  5. ますますコア開発者の生産性が上がる

という良いサイクルを生み出すことが出来るんじゃないかと思っています。また、GitHub や Stash を導入することでエンジニア同士の交流が活性化して、会社の雰囲気や文化が少しでも変わっていく端緒となれば良いなと期待しています。

気付いたこと

今まで勉強会など参加したことも殆ど無かったですし、ましてや自分が主催したり発表したりすることも勿論無かったので、今回が初めての経験でした。いざ自分でやってみると、勉強会に参加する態度によって学習効果が大きく違うんだなということを再確認しました。

  • 受動的に参加する(相手が言っていることを鵜呑みにするだけ)
  • 能動的に参加する(相手が言っていることを理解しようと努める・疑問を持つ・質問する)
  • 自分でプレゼンする

下にいくほど学習効果が高いわけです。良く言われていることですが、今回改めてそのことを実感しました。勉強会でプレゼンしようと思うと事前にしっかり準備しないといけません。資料をつくったり、理解が曖昧なところを深堀しないといけません。

何かを学ぶとき、(相当頭の良い人は別だけど)ふつうの人は受動的に情報を仕入れているだけでは想像力が働きません。けれど人に説明するためにしっかり理解しようとすると、その過程で様々な疑問が出てくる。「調べてみるとこんなことが言われているけど、いったいどういうことなんだろう?」「これはもしかしてこういうことなんじゃないか?」などと自分の想像力を働かせる機会が増え、曖昧だった知識が体系化され、自分の中の血肉として育っていく。だから勉強会をするのは(例え自分が理解している「つもり」の物事をテーマにしたとしても)意味のある行為だな、今後はもっと自分で勉強会を主催しよう、などと思ったのでした。

Comments