Last Updated: August 16, 2018
·
384
· STK

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

これでアクティビティレポートを作成する手間が大幅に削減できます。

もちろんメール等で補足文章も書く必要があるかと思いますが、これらは日常の中で常にしていることだと思うので、この点は自力で頑張ってください!