Commit By Intent
意味単位でコミットを分割し、履歴の可読性と安全性を両立する。
Preflight Gate
- •
npm run typecheckを実行する。 - •
npm run lintを実行する。 - •どちらかが失敗したらコミットを中止する。失敗内容を要約して報告する。
- •
lintスクリプト未定義など実行不能な場合も失敗扱いとして中止する。
Workflow (After Preflight Passes)
- •差分全体を把握する。
git status --shortとgit diff --statを確認する。 - •直近履歴を読む。
git log --oneline -n 20で prefix と文体を抽出する。 - •変更を意図単位で分類する。例: 機能追加、バグ修正、リファクタリング、ドキュメント。
- •1コミット1意図を守る。混在ファイルは
git add -pで hunk 分割する。 - •ステージ後に
git diff --cached --name-onlyとgit diff --cachedで境界を検証する。 - •履歴スタイルに合わせたメッセージでコミットする。履歴の規則が曖昧なときのみ
references/conventional-commit-guide.mdを使う。 - •コミット直後に
git show --name-status --stat --oneline -1を確認し、意図境界が崩れていないか再検証する。 - •未コミット差分が残る場合は 3-7 を繰り返す。
Mandatory Rules
- •無関係な変更を同じコミットに混ぜない。
- •「見た目変更」と「振る舞い変更」は原則分離する。
- •「リネーム」と「ロジック変更」は原則分離する。
- •自動整形が大規模に入る場合は、整形専用コミットを分離する。
- •コミットメッセージに曖昧語(
update,misc,tweak)を使わない。 - •メッセージの prefix と文体は既存履歴を優先する。
Output Contract
コミット作業時は次を返す:
- •事前チェック結果(
typecheck、lintの順) - •予定コミット一覧(順序、意図、対象ファイル)
- •実行したステージング方針(ファイル単位 or hunk単位)
- •各コミットメッセージと、履歴スタイルへの整合根拠
- •最終
git status --shortの要約
Decision Heuristics
- •先に「依存される基盤変更」をコミットし、その上に機能変更を積む。
- •リスクが高い変更(ロジック・状態管理・I/O)を小さいコミットにする。
- •レビュー時に「このコミットだけを読む価値があるか」を基準に分割する。
詳細な分割基準と手順は references/commit-splitting-checklist.md を参照する。