良いコミットメッセージ - ntuf/Tips GitHub Wiki
すでにわかっていること◯
◯ いつ(When):タイムスタンプでわかる
◯ どこで(Where):ファイル名とディレクトリ、diffで修正箇所がわかる
◯ 誰が(Who):author(作者)でわかる
× 何を(What):コミットのタイトル(Subject)と本文(Body)に必要
× なぜ(Why):コミットの本文(Body)に必要
◯ どうやって(How):コードやdiffでわかる
何を(What)、なぜ(Why)だけをコミットメッセージに書く。
仕様が分かるように書いた方がいいかも
コードの変更 | 仕様の変更 | |
---|---|---|
いつ | ○ | - |
どこで | ○ | - |
誰が | ○ | - |
何を | ○ | - |
なぜ | ✖️ | |
どうやって | ○ |
英語 | 用途 |
---|---|
Fix: | バグ修正 |
Improve: | リファクタリング、パフォーマンス改善 |
Update: | 仕様変更 |
この3種だけでいいのでは? |
|
日本語の使用は、解釈のブレを生む。(修正、更新、改善、改修) |
|
「追加」「削除」「改名」「移動」「交換」は差分見れば分かる |
-
変更前
-
変更後
- どういう動きをどうなるよう変更したのか
-
理由
- なぜそうしたのか(修正の背景)
- 仕様変更の起因(○○が面倒、○○がよいという顧客要望)
- バグ:障害が発生したのか、自分で見つけたのかなど
- リファクタリング(保守性向上の為)
- パフォーマンス改善
- セキュリティ向上
- なぜそうしたのか(修正の背景)
上のコミットメッセージは1案件1コミットを想定している。
一つの改修案件を数日かけてやって、
その日のできたところまでコミットするから、
1コミット1案件とは限らない場合がある。
cf.障害票
- 発覚した日時
- 事象
- 原因
- 対応方法
- 暫定
- 恒久
- 復旧予定日時
- 暫定
- 恒久
(以下、削除)
Add: | 追加: | 機能の追加 |
Fix: | 修正: | 機能の修正、バグを正す |
Improve: | 改善: | リファクタリング(clean?)、パフォーマンスチューニング |
Update: | 更新: | 仕様変更に伴う機能の改修 |
Remove: | 削除: | 機能の削除 |
Rename: | 改名: | ファイルの改名 |
Move: | 移動: | ファイルの移動 |
Change: | 交換: |
主語は「機能」。
ソースコード行、ファイル、分岐条件、パラメタ等が主語ではない。
改善だけはプログラムの改善(リファクタリング)と機能の改善()
■不確定
-
「修正」と「改善」と「更新」の使い分けは?
修正:間違いを正す
改善:間違ってないけど、さらに良くする
更新:仕様の変更によって更新する -
プログラムを「追加」すると機能の「改善」にもなるならどっちを使う?
- 主語が機能。機能の追加、改善なので意味の重複はない。
-
リファクタリングは「プログラム」の改善でパフォーマンス改善は「機能」の改善ではないか?
- その通り。改善だけは例外。
-
「交換」の使いどころは?
- 今はまだない。削除予定。
-
無駄なソースファイル削除や、意味のないコードを削除するのは「削除」ではなくて「改善」
-
機能の「追加」「修正」「改善」が「更新(アップグレード)」にもなるのでは?
- 「更新」は仕様変更に伴う改修だけを指す。
- アップグレードは「更新」の意味に含まれない。
- アップグレードはプロジェクト全体が主語になるから。
-
仕様変更に伴って、機能を「更新」したが機能が名前にそぐわなくなり「改名」するが、これは「更新」か「改名」か
- 機能名の場合「更新」
- ファイル名の場合は「改名」
- 中身が一緒なのに一方はファイルが削除され、一方はファイルが出現し、バージョン管理システム上追えなくなるから。