Pre-commitとPost-merge Hooks
Lintに使うPre-commit Hookや通知に使うPost-merge Hookの実践例を実装します。
「Pre-commitとPost-merge Hooks」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。
実践的なGitフック入門
前のレッスンでは、Gitフックとその種類について学びました。ここからは実践です。
強力な2つのフック、pre-commitとpost-mergeの実装に取り組みます。これらを使うと、コミット前のチェックやマージ後の処理を自動化できます。
Pre-commit: 品質ゲート
pre-commitフックは、コミット操作の前に実行されます。ただし、git addで変更をステージングした後です。
- コードの品質やスタイルを適用するのに最適です。
- リンター、スタイルチェッカー、基本的な単体テストなどを実行できます。
- スクリプトがゼロ以外のステータスで終了すると、コミットは自動的に中止されます。
これにより、品質基準を満たしたコードだけがリポジトリに登録されます。
Pre-commitフックの設定
pre-commitフックを作成するには、プロジェクトの.git/hooks/ディレクトリ内に、pre-commitという名前の実行可能ファイルを作成します。
Gitは.sample拡張子付きのサンプルフックを用意しています。この拡張子を削除して、独自のスクリプトを追加します。
次のコマンドでファイルを実行可能にすることを忘れないでください。chmod +x .git/hooks/pre-commit
例: 「TODO」を含むコミットを防止する
「TODO」という単語が残っているファイルのコミットを防止する、シンプルなpre-commitフックを作成しましょう。これは、未完了の作業がコードベースに入り込まないようにする一般的な方法です。
スクリプトは、ステージングされたすべてのファイルでこのキーワードを確認します。見つかった場合は、コミットを停止します。
Pre-commitフック: TODOを禁止する
これは.git/hooks/pre-commitファイル用のシンプルなシェルスクリプトです。ステージングされた.txtファイルに「TODO」という単語がないか確認します。
手順:
.git/hooks/pre-commitを作成する- このコードを貼り付ける
chmod +x .git/hooks/pre-commitを実行する
#!/bin/sh
# Check staged .txt files for "TODO"
for file in $(git diff --cached --name-only --diff-filter=ACM | grep '\.txt$'); do
if grep -q "TODO" "$file"; then
echo "ERROR: Found 'TODO' in staged file: $file"
echo "Please remove TODOs before committing."
exit 1
fi
done
exit 0Pre-commitフックをテストする
このフックをテストするには、まずファイル(例: test.txt)を作成し、「TODO: Finish this」と追加します。次に、コミットを試します。
git add test.txtgit commit -m "Add test file"
コミットは中止され、フックからのエラーメッセージが表示されます。test.txtから「TODO」を削除すれば、コミットは成功します。
Post-merge: マージ後の処理を自動化する
post-mergeフックは、git mergeコマンドが正常に完了した後に自動的に実行されます。
- コードを統合した後に行うべき処理に役立ちます。
- チームメンバーへの通知、プロジェクトの依存関係の更新(例:
npm install)、ビルドスクリプトの実行などが例です。 - pre-commitとは異なり、このフックはマージの結果に影響しません。
マージ後の処理を自動化する優れた方法です。
Post-mergeフックの設定
pre-commitと同様に、.git/hooks/ディレクトリ内にpost-mergeという名前のファイルを作成します。
今回も、実行可能ファイルになっていることを確認してください。
chmod +x .git/hooks/post-merge
これで、リポジトリでマージが完了するたびに、このスクリプトが実行されます。
例: マージ完了アラート
マージが完了したことを示すメッセージをコンソールに表示する、シンプルなpost-mergeフックを作成しましょう。実際の開発では、CI/CDパイプラインを起動したり、チャットアプリケーションに通知を送信したりできます。
Post-mergeフック: 通知
これは.git/hooks/post-mergeファイル用のシンプルなシェルスクリプトです。確認メッセージを表示します。
手順:
.git/hooks/post-mergeを作成する- このコードを貼り付ける
chmod +x .git/hooks/post-mergeを実行する
#!/bin/sh
# This hook runs after a merge operation.
echo "--- Post-merge hook triggered ---"
echo "A merge has just completed in your repository."
echo "You might want to run 'npm install' or 'bundle install' now."
echo "---------------------------------"
exit 0フックチェック: Pre-commitとPost-merge
次のタスクのうち、通常pre-commitフックで処理するものはどれでしょうか。
まとめ: フックを実際に使う
よくできました。このレッスンでは、実践的なGitフックの実装方法を学びました。
- Pre-commitフックは品質ゲートとして機能し、コミット前にリンティングやテストなどのチェックを実行します。
- Post-mergeフックは、通知や依存関係の更新など、マージ後の処理を自動化します。
これらのフックは、リポジトリの基準を適用し、Gitのワークフローを自動化する強力なツールです。ほかの種類のフックも学び、Gitの操作をさらにカスタマイズしてみましょう。
よくある質問
「Pre-commitとPost-merge Hooks」レッスンは無料ですか?
はい。「Pre-commitとPost-merge Hooks」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。
「Pre-commitとPost-merge Hooks」で何を学びますか?
Lintに使うPre-commit Hookや通知に使うPost-merge Hookの実践例を実装します。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
DevOps Bootcampを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「Pre-commitとPost-merge Hooks」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDevOps Bootcampレッスンでコードを書いて実行できますか?
はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Git Hooksを理解する
- Pre-commitとPost-merge Hooks
- Git設定のカスタマイズ
- Husky でフックを共有する