LESSON 30分

コミット前のチェックポイント

ストーリー

「コード書き終わりました!コミットします!」

「ちょっと待って。コミット前に確認することがあるよ」

「え?もう動くのに?」

「『動く』と『コミットして良い』は別だよ。コミットする前の確認を習慣にしよう」


コミット前チェックが必要な理由

コミットはチームに対する「この変更を見てください」という意思表示です。

不完全な状態でコミットすると:

問題影響
テストが失敗する状態でコミットチーム全体のCIが壊れる
機密情報が含まれたままコミットセキュリティインシデント
デバッグコードが残ったままコミットレビュアーの時間を無駄にする
不要なファイルが含まれたままコミットリポジトリが汚れる

テストの実行

コミット前に必ずテストを実行する

bash
# JavaScriptの場合
npm test

# Pythonの場合
pytest

# テスト結果を確認
# ALL PASSED → OK
# FAILED → コミットしてはいけない
チェック項目確認ポイント
テストが全てパスするか1つでも失敗していたらコミットしない
新しい機能にテストがあるかテストなしの機能を追加していないか
既存のテストが壊れていないか自分の変更で他のテストが失敗していないか

テストがないプロジェクトでも、手動で動作確認してからコミットしましょう。


不要ファイルの確認

git statusで差分を確認する

bash
git status

出力をよく確認しましょう:

Changes to be committed:
  modified:   src/main.js       ← 意図した変更?
  new file:   src/utils.js      ← 意図した新規ファイル?

Untracked files:
  node_modules/                  ← コミットしてはいけない!
  .DS_Store                      ← コミットしてはいけない!
  debug.log                      ← コミットしてはいけない!
チェック項目確認ポイント
意図しないファイルがないかgit status で確認
.gitignoreが適切かnode_modules、.env等が除外されているか
一時ファイルが含まれていないかログファイル、キャッシュ等

.gitignoreに含めるべきファイル

# .gitignore の例
node_modules/
.env
.DS_Store
*.log
dist/
coverage/

機密情報のチェック

絶対にコミットしてはいけないもの

種類
パスワードpassword = "abc123"
APIキーAPI_KEY = "sk-xxxxx"
アクセストークンtoken = "ghp_xxxxx"
データベース接続文字列DB_URL = "postgres://user:pass@..."
秘密鍵ファイル*.pem, *.key

確認方法

bash
# コミット対象の差分を確認
git diff --cached

# 以下のようなキーワードがないか目視確認
# password, secret, key, token, credential

一度でもコミットした機密情報は、履歴に残ります。 git push した後では取り返しがつかないため、コミット前の確認が重要です。


デバッグコードの確認

残してはいけないもの

javascript
// × コミット前に削除すべき
console.log("debug: ここに来た");
console.log("data:", JSON.stringify(data));
debugger;
// TODO: あとで消す
alert("テスト");

確認方法

bash
# 変更差分を確認
git diff --cached

# console.logを検索
git diff --cached | grep "console.log"

# debuggerを検索
git diff --cached | grep "debugger"

コミットメッセージの品質

良いコミットメッセージの書き方

bash
# × 悪い例
git commit -m "修正"
git commit -m "いろいろ変更"
git commit -m "fix"

# ○ 良い例
git commit -m "ログイン時のバリデーションエラーを修正"
git commit -m "ユーザー検索APIのレスポンス形式を変更"
git commit -m "新規登録画面にメールアドレス確認フィールドを追加"
チェック項目確認ポイント
何を変更したか伝わるか「修正」ではなく具体的な内容
1つのコミット = 1つの変更か複数の変更を混ぜていないか
チームのルールに従っているかプレフィックスなどの規約

コミット前チェックリスト(完全版)

markdown
## コミット前チェックリスト

### 必須(1つでも×なら絶対にコミットしない)
- [ ] テストが全てパスしている
- [ ] 機密情報(パスワード、APIキー等)が含まれていない
- [ ] .envファイルがコミット対象に含まれていない

### 重要
- [ ] git statusで意図しないファイルがないか確認した
- [ ] 不要なデバッグコード(console.log等)を削除した
- [ ] コミットメッセージが変更内容を適切に表している
- [ ] 1つのコミットに1つの変更だけが含まれている

### 推奨
- [ ] git diffで変更内容を自分で確認した
- [ ] コーディング規約に準拠している
- [ ] コミットメッセージがチームのルールに従っている

まとめ

カテゴリ重要ポイント
テスト全てパスしてからコミット
不要ファイルgit statusで確認、.gitignoreを活用
機密情報パスワード、APIキーは絶対にコミットしない
デバッグコードconsole.log、debuggerを削除
コミットメッセージ具体的に、1コミット1変更

チェックリスト

  • コミット前チェックの重要性を理解した
  • git statusとgit diffで確認する習慣がイメージできた
  • 機密情報をコミットする危険性を理解した

次のステップへ

コミット前のチェックポイントが理解できましたか?

次のセクションでは、実際にチェックリストを作成する演習に挑戦します。 ここまで学んだ知識を使って、自分だけのチェックリストを作りましょう。


推定読了時間: 30分