LoginSignup
9
10

More than 3 years have passed since last update.

Gitのコミットの単位、メッセージの書き方、レビュー依頼の仕方

Last updated at Posted at 2021-04-02

これは何

  • 「新人プログラマ応援 - みんなで新人を育てよう!」のイベント記事です
  • 私が個人で開発する際や、チームのルールを決める場合の進め方をまとめました
    • コミットの単位やコミットメッセージの書き方ひとつで、チームの生産性は大きく変わります
    • これが正解、なんてものではありませんが、どなたかのお役に立てれば幸いと思って投稿しました

コミットの仕方

  • 実現したものの単位でコミットする
  • コミットログは作業ログではなく、成果物がどの粒度で完成したかのログであるべき

良いコミット(コミットメッセージ)

  • 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

修正しました

良い例とイマイチな例の違い

  • 良い例
    • タイポ修正と新規追加がちゃんとコミットが分かれている
    • どのコミットでどの修正がされているか、ちゃんとレビュワーに伝えている
  • イマイチな例
    • 一緒くたに対応しているので、おそらく変更差分が多く、レビュワーが大変
    • レビュー対応コミット自体は何か成果物を生んでいるわけではない
9
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
10