DevOps は、開発および導入プロセスの簡素化を目指す企業にとって、ソフトウェア開発の世界において不可欠なコンポーネントとなっています。利用可能な DevOps テクノロジーがいくつかありますが、その中には無視されることもありますが、非常に効果的なテクノロジーがあります。
その重要なテクノロジーこそが「 Git Hooks」です。 」
Git Hook は、タスクの自動化、コーディング標準の適用、継続的なデプロイの実行、テストの実行を行うための優れたツールです。
Git フックを使用して DevOps プラクティスに革命を起こす方法を見てみましょう。
まずは公式の定義を見てみましょう -
フックは、Git 実行の特定の時点でアクションをトリガーするためにフック ディレクトリに配置できるプログラムです。
幸いなことに、これは非常に単純な定義です。
この定義に関して読者が抱くかもしれないいくつかの質問に答えてみましょう。
Q) フックディレクトリとは何ですか?それはどこにありますか?
フック ディレクトリは、Git が実行する実行可能プログラムまたはフックを含む Git リポジトリ内のディレクトリです。デフォルトでは、フック ディレクトリは$GIT_DIR/hooks
です。ユーザーはcore.hooksPath
構成変数を使用して構成することもできます。
Q) Git の実行ポイントは何ですか?
Git 実行ポイントは、フックを実行できる Git ワークフローのステップです。 Git 実行ポイントの例としては、コミット前、コミット後、プッシュ前、受信後、リベース前、マージ後などがあります。
このセクションを要約すると、Git フックを次のように定義できます。
Git は、コードのコミット、プッシュ、マージなどの特定の操作の前後に、「フック」と呼ばれるスクリプトを実行します。これらにより、開発プロセス中にタスクを自動化し、ポリシーを適用し、コードベースと対話することができます。 Git フックは、 Git リポジトリの
.git/hooks
ディレクトリに保存されます。
コミット メッセージに「TASK*」正規表現を強制する簡単な Git フックを構築してみましょう。
新しいディレクトリgit_hooks_tut
を作成し、その中に新しい git リポジトリを初期化します。
~/projects$ mkdir git_hooks_tut ~/projects$ cd git_hooks_tut ~/projects/git_hooks_tut$ git init Initialized empty Git repository
フックディレクトリに移動して、その内容を調べてみましょう。
~/projects/git_hooks_tut$ cd .git/hooks ~/projects/git_hooks_tut/.git/hooks$ ls applypatch-msg.sample pre-applypatch.sample pre-push.sample commit-msg.sample pre-commit.sample pre-rebase.sample fsmonitor-watchman.sample pre-merge-commit.sample pre-receive.sample post-update.sample prepare-commit-msg.sample update.sample
フック ディレクトリには、いくつかのサンプル スクリプトが付属しています。 .sample
拡張子により、デフォルトで実行が停止されます。フックを「インストール」するために必要なのは、 .sample
拡張子を削除することだけです。
または、新しいスクリプトを最初から作成する場合は、上記のファイル名のいずれかに一致する、 .sample
拡張子のない名前を持つ新しいファイルを追加することもできます。
このユースケースでは、commit-msg フックが必要になります。 commit-msg
という名前の新しいスクリプトを作成してください。
~/projects/git_hooks_tut/.git/hooks$ touch commit-msg
commit メッセージ パターンをcommit-msg
スクリプトに確実にするロジックを追加しましょう。
#!/bin/sh commit_msg_file=$1 commit_msg=$(cat "$commit_msg_file") # Check if the commit message starts with "TASK" if ! echo "$commit_msg" | grep -q "^TASK"; then echo "Commit message must start with 'TASK'" exit 1 fi
最後に、 commit-msg
スクリプトを実行可能にします。実行不可能なスクリプトは、フック ディレクトリに存在する場合でも、git によってスキップされます。
~/projects/git_hooks_tut/.git/hooks$ chmod +x commit-msg
この設定でフックは完成です。今すぐテストしてみましょう。
ここで、新しいファイルを作成し、それをコミットしてみます。最初に無効なメッセージ形式を使用し、次に有効なメッセージ形式を使用します。
~/projects/git_hooks_tut/.git/hooks$ cd ../.. ~/projects/git_hooks_tut$ touch README ~/projects/git_hooks_tut$ ls README ~/projects/git_hooks_tut$ git add README ~/projects/git_hooks_tut$ git commit -m "Added Readme File" Commit message must start with 'TASK' ~/projects/git_hooks_tut$ git commit -m "TASK-0000: Added Readme File" [master (root-commit) 7f3648a] TASK-000: Added Readme File
物事は理想的に機能しています!
Git を使用すると、多数の実行ポイントのフックを作成できます。その一部は次のとおりです -
Pre-Commit Hook:このフックはコミットが作成される前に実行されます。これにより、コミットされている変更を検証できます。
Pre-Receive フック: pre-receive フックは、参照が変更される前にリモート リポジトリで実行され、カスタム ルールやポリシーを適用できるようになります。
Post-Receive フック:このフックは、参照の更新後にリモート リポジトリでも実行されます。通知の送信や追加のタスクの実行に使用できます。
Pre-Push Hook:このフックは、プッシュが行われる前に実行されます。これを使用して、特定のタイプのコミットのプッシュを妨げる特定のポリシーを強制することができます。
Prepare-Commit-Msg フック: prepare-commit-msg フックは、コミット メッセージの作成後に実行され、コミット メッセージを変更または拡張できるようになります。
Git をより適切にカスタマイズするために他にもさまざまなフックが存在しており、それらはGit docsで見つけることができます。
Git フックは、適切に使用すれば、大きな可能性を秘めたツールです。私たち開発者は、多くの複雑なタスクを解決できるツールの強みを損なうことがよくあります。
Git Hook を採用すると、あらゆるレベルで DevOps が強化され、開発サイクルに DevOps を統合しようとしている組織にとっては優れた方法となる可能性があります。
ここまで到達できておめでとうございます!今日は何か新しいことを学べたことを願っています。