Git Logを使ってワークレポートを作成する方法
稀にクライアントから先週の活動報告のレポート提出を求められることがあります。ディベロッパーにとってこれほど退屈な作業はない。なので、レポート作成を楽にするために、ワークレポートをGit Logの情報を使って生成することにしました。
git log --author=Marco # Change with your name
アウトプットを取得するのにはこのような感じで:
commit ad5140bca518c676cd4a6e9b268f66d3ff89f992
Author: Marco Vito Moscaritolo <marco@agavee.com>
Date: Fri Aug 23 12:50:41 2013 +0200
refs #101: Lorem Ipsum commit message
commit 5d3d687cbdea09e334267312451065a4416ea5b1
Merge: 76c97d3 b7850f9
Author: Marco Vito Moscaritolo <marco@agavee.com>
Date: Fri Aug 23 12:39:35 2013 +0200
Merge branch 'master' of git.agavee.com:your-project/your-branch
commit 7e6e36eb78f3b07bcb12c0fa3c1e240e6634eccf
Author: Marco Vito Moscaritolo <marco@agavee.com>
Date: Fri Aug 23 10:35:41 2013 +0200
Lorem Ipsum commit message
commit f86221395bee652e08ab8d25c18445c27bb5b723
Author: Marco Vito Moscaritolo <marco@agavee.com>
Date: Fri Aug 23 10:35:23 2013 +0200
refs #101: Lorem Ipsum commit message
commit 31dc49c6a8da7eda699aff7814baa0af555618d8
Author: Marco Vito Moscaritolo <marco@agavee.com>
Date: Thu Aug 22 09:26:40 2013 +0200
refs #100: Lorem Ipsum commit message
次に過去1週間のみのログを出します。(又は先月など)Since と Untilオプションを使うことができます:
git log --author=Marco --since='1 sunday ago' --until='now'
アウトプットの形は似ていますが、日曜日などのみ指定することもできます。タイムフレームを下記のように設定します:
git log --author=Marco --since='2 sunday ago' --until='1 sunday ago'
また、好みに応じてタイムフレームは変更できます。
しかし、この形式の場合非常に読みにくいため、コンパクトで見やすいレポートにするためにFormatOptionを使います。これは、ログに情報を表示するためのフォーマットを定義する文字列を使用します。サンプルフォーマットとして:
%Cred%h%Creset %s %Cgreen(%ci) %Cblue<%an>%Creset
Comit hash (%h) は赤字の(%cred), Commit Message (%s)は普通の色の(%Creser), Commit Timeは(%Cgree)で緑いろにし(%Cgreen)、Author Name(%an)は青(%blue)で(%Cblue)にします。他のエレメント設定はこちらを参考にしてください。
この設定後:
ad5140b refs #101: Lorem Ipsum commit message (2013-08-23 12:50:41 2013 +0200) <Marco Vito Moscaritolo>
5d3d687 Merge branch 'master' of git.agavee.com:your-project/your-branch (2013-08-23 12:39:35 2013 +0200) <Marco Vito Moscaritolo>
7e6e36e Lorem Ipsum commit message (2013-08-23 10:35:41 2013 +0200) <Marco Vito Moscaritolo>
f862213 refs #101: Lorem Ipsum commit message (2013-08-23 10:35:23 2013 +0200) <Marco Vito Moscaritolo>
31dc49c refs #100: Lorem Ipsum commit message (2013-08-22 09:26:40 2013 +0200) <Marco Vito Moscaritolo>
また、更新日とコミットメッセージのみ表示させる場合は:
%Cgreen%ci%Creset %s%Creset
この設定での表示はこのようになります:
git log --author=Marco --since='2 sunday ago' --until='1 sunday ago' --format='%Cgreen%ci%Creset %s%Creset'
2013-08-23 12:50:41 2013 +0200 refs #101: Lorem Ipsum commit message
2003-08-23 12:39:35 2013 +0200 Merge branch 'master' of git.agavee.com:your-project/your-branch
2013-08-23 10:35:41 2013 +0200 Lorem Ipsum commit message
2013-08-23 10:35:23 2013 +0200 refs #101: Lorem Ipsum commit message
2013-08-22 09:26:40 2013 +0200 refs #100: Lorem Ipsum commit message
この段階で基礎的なレポートフォーマットはできました。クライアントがなにをマージしたのか知りたい場合は、Messagesを削除し、no-mergesフラグを利用します。
git log --author=Marco --since='2 sunday ago' --until='1 sunday ago' --format='%Cgreen%ci%Creset %s%Creset' --no-merges
2013-08-23 12:50:41 2013 +0200 refs #101: Lorem Ipsum commit message
2013-08-23 10:35:41 2013 +0200 Lorem Ipsum commit message
2013-08-23 10:35:23 2013 +0200 refs #101: Lorem Ipsum commit message
2013-08-22 09:26:40 2013 +0200 refs #100: Lorem Ipsum commit message
これで、アクティビティに関するレポートは完成です。
最後に、この設定をGit Commandに保存する方法です。レポート生成のために、同じようなプロセスを繰り返す必要がなくなります。この設定をするには、.git/config fileの設定に下記ラインを追加します:
[alias]
report = "log --author=Marco --since='2 sunday ago' --until='1 sunday ago' --format='%Cgreen%ci%Creset %s%Creset' --no-merges"
そして、下記コマンドでレポートを生成できるようになります:
git report
さらに、異なるドキュメントのレポートを生成することもできます。
report-csv = "log --author=Marco --since='2 sunday ago' --until='1 sunday ago' --format='\"%ci\",\"%s\"' --no-merges"
(注意: escape " in format using \ )
これでCSVのレポートを書きコマンドから生成できます:
git report-csv > report.csv
これでアクティビティレポートを作成する手間が大幅に削減できます。
もちろんメール等で補足文章も書く必要があるかと思いますが、これらは日常の中で常にしていることだと思うので、この点は自力で頑張ってください!