私のいちばん好きなGitコミット(2019)
(dhwthompson.com)私のいちばん好きなGitコミット
- Gitのコミットメッセージの重要性を強調し、コードベースを文書化するうえで最も強力なツールの1つだと考えている。
- 開発者 Dan Carley が書いた "Convert template to US-ASCII to fix error" というコミットを例に、その理由を説明している。
- GDS(Government Digital Service)での経験を踏まえ、公開でコーディングすることの利点の1つは、こうした例を組織の外にも共有できる点だとしている。
このコミットが優れている理由
- コミットメッセージとコード変更量の比率は面白いが、それが共有する価値がある理由ではない。
- ほかの組織や開発者であれば、このコミットメッセージは単に
change whitespaceやfix bugと要約されていたかもしれない。 - その代わりに、Dan は周囲の人たちにとって本当に役立つコミットメッセージを作るために時間をかけた。
変更理由を説明している
- 最高のコミットメッセージは、変更した 何を だけでなく、なぜ 変更したのかも説明する。
- このコミットでは、
/etc/nginx/router_routes.confの内容と一致させるために導入されたテストが、bundle exec rakeで実行されたときにArgumentError: invalid byte sequence in US-ASCIIエラーで失敗した理由を詳しく説明している。 - こうした情報は文書化する価値が非常に高く、人々が元の文脈を忘れたり、別のチームに移ったり、組織を離れたりする中で簡単に失われてしまう。
検索しやすい
- コミットメッセージの冒頭には変更を引き起こしたエラーメッセージがあり、誰でもコードベースで
git log --grep "invalid byte sequence"を実行したり、GitHub のコミット検索を使ったりしてこのエラーを検索できる。 - 実際に複数の人がこの問題を検索し、以前に誰がこの問題を見つけ、どう対処したのかを突き止めることができた。
物語を伝える
- コミットメッセージには、問題がどのように見えていたか、調査の過程がどうだったか、解決までの流れがどうだったかという詳細が含まれている。
- コミットメッセージは、特定のファイルや関数、コード行を文書化するのではなく、コードベースがたどった道のりに関する追加情報を文書化するのに非常に向いている。
みんなを少し賢くする
- Dan が各段階で実行したコマンドを文書化したことは、チーム内の知識を共有する軽量な方法になりうる。
- このコミットメッセージを読むことで、誰かが Unix ツールセットに関する有用なヒントをいくつか学べるかもしれない。
- この変更をレビューする人も、後からこのコミットを見つける人も、そうしたことを学べる。
思いやりと信頼を築く
- 最後の段落は人間的な文脈を加えている。
- これを読むと、Dan が巧妙なバグを追跡するのに1時間を費やしたことへの苛立ちと、それを解決した満足感の両方を感じ取れる。
- こうしたコミットメッセージは、あらゆる変更の背後に最善の判断を下した人間がいることを思い出させてくれる。
良いコミットの重要性
- この例は極端なケースであり、すべてのコミットにこれほどの詳細さを期待しているわけではない。
- しかし、変更の背後にある文脈を説明し、他の人が学べるように助け、コードベースに対するチームの集合的なメンタルモデルに貢献する優れた例である。
- 良いコミットメッセージの利点や、それをより簡単に構造化するのに役立つツールについてさらに知りたいなら、Joel Chippindale の "Telling stories through your commits" と Tekin Süleyman の "A branch in time" を勧める。
GN⁺の見解
- この記事は Git コミットメッセージの重要性を強調し、コードベースの歴史を文書化して知識を共有するうえで、コミットメッセージがいかに強力なツールになりうるかを示している。
- Dan Carley のコミットメッセージは、変更理由、検索性、物語性、知識共有、思いやりと信頼の構築など、さまざまな面で模範的な事例を示している。
- 良いコミットメッセージを書く重要性を理解して実践することで、開発者はより良い協業とコード保守を経験でき、これはチーム全体の生産性と効率の向上にもつながる。
1件のコメント
Hacker Newsの意見
GitHub共同創業者の意見:
git blameを使って関連するコミットメッセージを探すのも難しい。特定の問題に対するコミットメッセージの重要性:
コミットメッセージに対する個人的な感情:
コミットメッセージの最初の1行を書く戦略:
git logを使うときは最初の1行が最も重要である。コミットメッセージ修正の難しさ:
.mdファイルやWiki、Confluenceなどの文書は修正が容易である。小さなコミットに対する詳細な説明の重要性:
コミットメッセージの限界とツールの問題点:
コミットメッセージよりコミット衛生の重要性:
自動スクワッシュとリベースへの批判: