ソースコードを読んでいると、このコードはどういう背景で書かれたんだろう?と思うことってよくありませんか?そんな時にそのコードを誰がどのような理由で書いたか(あるいは修正したか)をさっとコミットログで確認できると便利ですよね。
そんな時、私がRubyMineでコミットログを見ている方法をご紹介します。
前提
この機能はバージョンコントロール管理下にあるファイルのみに有効です。
RubyMineでは Subversion (SVN), Git, CVS, Perforce に対応しています。
実はAnnotateをONにするだけ
RubyMine内のエディターでcommand + shift + a で "annotate" と入力します。
すると下の画像のように機能が絞り込まれるハズなので ( "ann"だけでも十分絞り込まれます)、Enterキーを押してAnnotate機能をONにします。(下の画像はRubyMine7のもので、ちょっと見た目が変わっていますが、RubyMine6でも利用可能です)
Annotateを OFFにするにはもう一度同じアクションを実行してください。
"command + shift + a"についてはこちらを参照。RubyMineで覚えておきたい、たったひとつのショートカットキー
簡易ログの表示
AnnotateをONにすると、このようにエディターの左側に行ごとの簡易ログが表示されます。
どの行がどのコミットで変更されたか、gitの簡易ログ(ハッシュ、日付、author)が表示されていますね。さらにカーソルを当てるとコミットログも見ることができるので、コミットログにしっかりとそのように修正した理由が書かれていると、調べ物がはかどります。(なので、コミットログにはできるだけ何をしたかよりは、なぜそのようなコミットをしたかがわかる手がかりを残しておきたい...自戒)
コミットファイルの表示
さらにその Annotate部分をクリックすると同じコミットで他のファイルにどのような変更が加えられたのかが分かります。
(下の例は先程とは別のコミットですが、この場合 index.htmlの他に複数のファイルが変更されている事が分かります。ちなみにファイル名が緑色のものは追加、青色は変更、灰色は削除)
ファイルdiffの表示
もちろんファイル名をダブルクリックすると diffを見ることができます。
この機能はRubyMineでしか使えないの?
いいえ。じつはこれは VCS(バージョン管理システム)の機能を使っているだけなんです。代表的な例としてGitコマンドを紹介します(SVNも同じサブコマンド名です)。
Gitの場合
$ git annotate <ファイル名>
もしくは
git blame -c <ファイル名>
で同様の出力が得られます(もちろんCUIベースの表示になりますが...)。
※ちなみに "git annotate"は git blameとほぼ同じ下位互換機能で他のSCMのコマンド名に似せるために用意されているようです。
Tig の場合
もちろん tig でも表示可能です。
tigの場合はカーソル移動してEnterするとコミットの詳細情報(git show)も表示してくれます。
tig blame <ファイル名>
GitHubの場合
ちなみにGitHubでもこの機能は提供されていて、こんな表示になっています。
ファイル表示している状態で Blameボタンを押すと...
git blameした状態を見ることができます。
さいごに
あくまでもそのコード、コミットの背景を調べるために簡単にコミットログを見る方法としてご紹介しました。
「誰だよこのコード書いたのは...」的な犯人探し用途での使用はオススメしません。
そのコードが書かれた背景がより素早くわかると嬉しいですね。