この記事は ギフティ Advent Calendar 2019 - Qiita 2日目の記事です。
背景
つい夢中になって開発していたら、変更箇所が多岐にわたってしまい、レビュワーを面食らわせた・・・こんな経験、誰もが一度はあるのではないでしょうか?プルリクの粒度については色々な意見があるかと思いますが、「巨大すぎるプルリクはレビューの精度を下げるのでよくない」という認識はそれなりに一般的なものだと思います。
とはいえ、「プルリクが大きくなりすぎないように常に 気をつけましょう 」という改善ほど意味のないものはありません。改善は常に具体的なアクションであるべきです。どうすれば同じ失敗を繰り返さずに済むでしょうか?
改善案 : 変更量を継続的に知ろう
先に結論を書くと、ローカルで git commit
するたびに、作業ブランチとマージ先ブランチの差分量を表示するようにしてみました。
===================================================================
develop ブランチとの差分 :
lib/foo/bar.rb | 15 +++++++++++++++
lib/foo/baz.rb | 11 +++++++++++
lib/foo/corge.rb | 28 ++++++++++++++++++++++++++++
lib/foo/foo.rb | 6 ++++++
lib/foo/fred.rb | 11 +++++++++++
lib/foo/garply.rb | 1 +
lib/foo/grault.rb | 4 ++++
lib/foo/plugh.rb | 10 ++++++++++
lib/foo/quux.rb | 2 ++
lib/foo/qux.rb | 7 +++++++
lib/foo/thud.rb | 11 +++++++++++
lib/foo/waldo.rb | 6 ++++++
lib/foo/xyzzy.rb | 4 ++++
13 files changed, 116 insertions(+)
ファイル変更数が 10 を超えました。そろそろプルリク出しませんか?
===================================================================
このアクションを思いついたときに考えていたのは、今の作業ブランチの変更量を知る機会が少なすぎないか?ということです。例えば、今の作業による Files changed
の数を、プルリク作成前に見る機会はどれくらいあるでしょうか? CLI だと、コミットしたときに「そのコミット単体の変更量」は表示されますが、「そのブランチ全体の変更量」は表示されません。これがもし git commit
のたびに表示されれば、スコープの肥大化にいち早く気づき、キリのいいところで作業を止めて、適切な粒度でプルリクを出せそうです。
実装方法は簡単で、手元のリポジトリの .git/hooks/ 配下に、 post-commit というファイル名で、以下のスクリプトを保存するだけです(手元の Mac で確認しました)。
#!/bin/sh
TARGET="develop"
GITDIFF=`git diff --color --stat-width=800 $TARGET HEAD`
THRESHOLD=10
echo "==================================================================="
echo "$TARGET ブランチとの差分 :"
echo ""
echo "$GITDIFF"
if [ $(echo "$GITDIFF" | grep -v "changed" | wc -l) -gt $THRESHOLD ]; then
echo ""
echo "ファイル変更数が ${THRESHOLD} を超えました。そろそろプルリク出しませんか?"
fi
echo "==================================================================="
echo ""
もちろん、ファイル変更数が規模の全てではないとは思いますが、目安としては今のところ十分活用できています。導入も廃止も簡単なので、よければぜひ活用してみてください。
ちなみに
GUI の Git アプリだと毎回表示されてたりするんでしょうか・・・。