これは何
- 「新人プログラマ応援 - みんなで新人を育てよう!」のイベント記事です
- 私が個人で開発する際や、チームのルールを決める場合の進め方をまとめました
- コミットの単位やコミットメッセージの書き方ひとつで、チームの生産性は大きく変わります
- これが正解、なんてものではありませんが、どなたかのお役に立てれば幸いと思って投稿しました
コミットの仕方
- 実現したものの単位でコミットする
- コミットログは作業ログではなく、成果物がどの粒度で完成したかのログであるべき
良いコミット(コミットメッセージ)
- Aの処理を実装
- Bの処理をファイルCからファイルDに移動
- Eのコンポーネントのスタイルを変更
- Fのページを新規作成
イマイチなコミット(コミットメッセージ)
- 関数の修正
- 新しいページを追加
- Gの処理を追加したのとついでにHの処理を少しリファクタリング
- WIP
- レビュー内容対応
- 微修正
良い例とイマイチな例の違い
良いコミット | イマイチなコミット | |
---|---|---|
1つのコミットの中で | 実現されたものが分かりやすい | 何が実現されたのか分からない |
レビューが | しやすい | しづらい (リネームしつつコードを変えて……とかだと、全部が差分として出てしまう、など) |
要らないコミット | ない |
WIP やレビュー内容対応 や微修正 はsquashまたはfixupすべき |
コミットメッセージ
- Issue番号を記載しておく
- GitHubやGitLab上で、コミットからIssueへ飛べる
- 可能なら英語で書く
- OSSなどでは必然的に英語でコミットメッセージを書くので
- ただし今回は「新人プログラマ応援」のイベントの記事として投稿しているので、以降の例は日本語で書く
- フォーマットを意識して書く
- 世間のコミットメッセージを見るにだいたいこういう書式になると思う
- (Issue番号の記載の仕方はお好みで)
基本のフォーマット
#(Issue番号) (実装したもの)を(対象のファイルや処理の名前)に(追加・編集・削除)
ケーススタディ:プルリクを出す際
最初のコミット
* 15e6766 #42 ログアウト処理をマイページに追加
* 9642c75 #42 ユーザーマイページを新規作成
* 915ee74 Merge pull request #XXX from some-branch
途中からの追加
- 新規作成したユーザーマイページに、未使用の変数宣言が残っているのに気付いた
- それだけ消したい
- その後、アカウント設定ページへの動線を追加した
良いコミットログ
* ca21a8c #42 アカウント設定ページへの動線をマイページに追加
* bd39f49 fixup! #42 ユーザーマイページを新規作成
* 15e6766 #42 ログアウト処理をマイページに追加
* 9642c75 #42 ユーザーマイページを新規作成
* 915ee74 Merge pull request #XXX from some-branch
↓適当なタイミングでgit rebase --autosquash
* 51b85aa #42 アカウント設定ページへの動線をマイページに追加
* 97a4ecf #42 ログアウト処理をマイページに追加
* 345e386 #42 ユーザーマイページを新規作成
* 5373e98 Merge pull request #XXX from some-branch
イマイチなコミットログ
* ca21a8c #42 アカウント設定ページへの動線をマイページに追加
* bd39f49 #42 不要なコードの削除
* 15e6766 #42 ログアウト処理をマイページに追加
* 9642c75 #42 ユーザーマイページを新規作成
* 915ee74 Merge pull request #XXX from some-branch
良い例とイマイチな例の違い
- イマイチなコミットログには
不要なコードの削除
が1つのコミットとして存在している- そしてこのコミットはどこの何が不要だったのかも分からない
- 良いコミットログの最終的なアウトプットでは、「成果の実現」に関係ないコミットは存在しない
autosquashの参考資料:
ケーススタディ:プルリク修正をコミットする際
レビューをもらった内容
- ログアウト処理の実装の中にタイポがある
- 仕様に書いてある「プロフィール変更ページへの動線」が追加されていない
良い修正のコミットログとコミュニケーション
* 054ff9a #42 プロフィール変更ページへの動線をマイページに追加
* 7690c08 fixup! #42 ログアウト処理をマイページに追加
* 51b85aa #42 アカウント設定ページへの動線をマイページに追加
* 97a4ecf #42 ログアウト処理をマイページに追加
* 345e386 #42 ユーザーマイページを新規作成
* 5373e98 Merge pull request #XXX from some-branch
7690c08
でタイポの修正、054ff9a
でプロフィール変更ページの追加を実装しました
↓
Approveをもらったらautosquash
イマイチな修正のコミットログとコミュニケーション
* 7690c08 #42 レビュー対応
* 51b85aa #42 アカウント設定ページへの動線をマイページに追加
* 97a4ecf #42 ログアウト処理をマイページに追加
* 345e386 #42 ユーザーマイページを新規作成
* 5373e98 Merge pull request #XXX from some-branch
修正しました
良い例とイマイチな例の違い
- 良い例
- タイポ修正と新規追加がちゃんとコミットが分かれている
- どのコミットでどの修正がされているか、ちゃんとレビュワーに伝えている
- イマイチな例
- 一緒くたに対応しているので、おそらく変更差分が多く、レビュワーが大変
-
レビュー対応
コミット自体は何か成果物を生んでいるわけではない