いずみこんな悩みを解決できる記事を書きました!
僕は現役フリーランスエンジニア(歴10年)で、資格は13個保有しています。
「Claude Code Hooksで開発作業を自動化したい」とお考えではありませんか?
Claude Codeがツールを実行する前後に、自分で決めた処理を差し込みたい方へ。
Claude Code Hooksを使えば、危険なコマンドのブロックや保存後の自動フォーマットをAIの動作に合わせて自動化できます。



サクッと解説します。
ということで、本記事ではClaude Code Hooksで開発作業を自動化する方法を解説します。



すぐ読み終わるので、ぜひ最後まで読んでくださいませ。
| 【当サイト】おすすめフリーランスエージェント3選 | |||
|---|---|---|---|
| エージェント | 評価 | ポイント | 公式サイト |
レバテックフリーランス | 5.0 | 業界最大級のエージェント。 高単価案件が豊富。 | 公式 |
Midworks | 4.8 | 満足度調査で 3年連続3冠を達成。 | 公式 |
ITプロパートナーズ | 4.6 | 週2〜3向けの案件が豊富。 | 公式 |
【AI】Claude Code Hooksで開発作業を自動化する方法
早速ですが、Claude Code Hooksで開発作業を自動化する方法を解説します。
Claude Code Hooksとは
Claude Code Hooksは、Claude Codeのライフサイクルの特定のタイミングでシェルコマンドを自動実行する仕組みです。
たとえばツールを実行する前のPreToolUse、実行した後のPostToolUse、セッション開始時のSessionStartといったイベントがあります。
ほかにもStopやUserPromptSubmit、PreCompactなど多くのイベントが用意されています。
Gitのフックが人間の操作に反応するのに対し、Claude Code HooksはAIの動作に反応する点が違います。



AIの挙動に「決まりごと」を持ち込めるイメージです。
Hooksを設定する場所
Hooksはsettings.jsonに記述します。
読み込まれる場所は次の4つで、優先度の高い順に並びます。
~/.claude/settings.json(ユーザー全体の設定).claude/settings.json(プロジェクトで共有する設定).claude/settings.local.json(プロジェクト個人用でGit管理外)- 組織で配布される管理ポリシー
設定は「イベント名 → matcher(対象ツール) → hooks(実行内容)」の3階層で書きます。
matcherにはBashやEdit|Writeのようにツール名を指定し、空文字やアスタリスクで全ツールを対象にできます。
PreToolUseで危険なコマンドをブロックする
PreToolUseを使うと、Claude Codeがツールを実行する直前に処理を挟めます。
rm -rfのような危険なコマンドを止める例を作ってみます。
プロジェクト直下の.claude/settings.jsonに、PreToolUseのフックを追加します。
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "$CLAUDE_PROJECT_DIR/.claude/hooks/block-rm.sh"
}
]
}
]
}
}matcherをBashにすることで、Bashツールの実行時だけスクリプトが動きます。
.claude/hooks/block-rm.shを作成し、実行権限を付けます。
#!/bin/bash
input=$(cat)
command=$(echo "$input" | jq -r '.tool_input.command')
if echo "$command" | grep -qE 'rm +-rf'; then
echo "rm -rf の実行は禁止されています" >&2
exit 2
fi
exit 0スクリプトは標準入力でJSONを受け取り、jqでtool_input.commandを取り出します。
rm -rfにマッチしたら、終了コード2で実行をブロックします。



終了コード2のときは、標準エラー出力の内容がClaudeに渡されて理由として表示されます。
Claude Codeを再起動し、rm -rfを含むコマンドを試します。
フックがブロックし、指定したメッセージがClaudeに返れば成功です。



/hooksコマンドで、登録済みのフック一覧を確認できます。
PostToolUseで編集後に自動フォーマットする
PostToolUseは、ツールの実行が終わった後に動きます。
EditやWriteでファイルを書き換えた直後に、フォーマッタを走らせる例です。
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "$CLAUDE_PROJECT_DIR/.claude/hooks/format.sh"
}
]
}
]
}
}#!/bin/bash
input=$(cat)
file=$(echo "$input" | jq -r '.tool_input.file_path')
if [ -n "$file" ]; then
npx prettier --write "$file"
fiformat.shは標準入力のJSONからtool_input.file_pathを取り出し、変更されたファイルだけにprettierをかけます。



全ファイルを整形すると時間がかかるので、変更されたファイルに絞るのがコツです。
SessionStartで作業開始時に情報を渡す
SessionStartは、セッションが始まったときに一度だけ動きます。
直近のコミット履歴をClaudeに渡しておく例です。
{
"hooks": {
"SessionStart": [
{
"hooks": [
{
"type": "command",
"command": "git log --oneline -5"
}
]
}
]
}
}終了コード0で標準出力に文字列を返すと、標準出力の内容がセッションの参考情報としてClaudeに追加されます。



プロジェクト固有の注意点を毎回リマインドさせる用途にも便利です。
終了コードとJSON出力の使い分け
フックの結果は、終了コードと標準出力のJSONでClaude Codeに伝わります。
終了コード0は成功で、標準出力が波括弧で始まり波括弧で終わるとJSONとして解釈されます。
終了コード2はブロックエラーで、PreToolUseならツール実行の中止、UserPromptSubmitならプロンプトの却下といった動作になります。
終了コード2のときは標準出力のJSONは無視され、標準エラー出力がClaudeへのメッセージになります。
終了コード0と2以外は、基本的に非ブロックとして扱われ、処理はそのまま進みます。
より細かく制御したい場合は、終了コード0のままJSONを返します。
{
"hookSpecificOutput": {
"hookEventName": "PreToolUse",
"permissionDecision": "deny",
"permissionDecisionReason": "本番用の認証情報に触れるコマンドは禁止です"
}
}permissionDecisionにdenyを指定すると実行を拒否でき、permissionDecisionReasonに理由を書けます。
allowを指定すれば許可、askを指定すれば確認プロンプトを出せます。



単純なブロックは終了コード2、条件分岐や理由付きの制御はJSON出力、と覚えておくと迷いません。
| 【当サイト】おすすめフリーランスエージェント3選 | |||
|---|---|---|---|
| エージェント | 評価 | ポイント | 公式サイト |
レバテックフリーランス | 5.0 | 業界最大級のエージェント。 高単価案件が豊富。 | 公式 |
Midworks | 4.8 | 満足度調査で 3年連続3冠を達成。 | 公式 |
ITプロパートナーズ | 4.6 | 週2〜3向けの案件が豊富。 | 公式 |
【厳選】フリーランスエンジニアにおすすめなエージェント3選


フリーランスエンジニアになるにはエージェントから案件をもらう必要があります。
僕が実際に利用しているおすすめエージェントを紹介しますね。



エージェントは必ず複数登録してください。
担当者によっては「全然案件紹介してくれない…」みたいなこともあるので…
僕は実際に5つのエージェントを使い回していますよ。
フリーランスを始めるなら「レバテックフリーランス


」
- 業界最大級の案件数。
- 業界トップクラスの高単価報酬、低マージン(平均年収862万円)。
- 案件参画中のフォローの充実。
※詳細は「【業界最大手】レバテックフリーランスとは?メリットや利用手順を解説!」を参照。
レバテックフリーランス
![]()
![]()
とにかく案件数が多いので、とりあえず登録しておけば間違いないエージェントです!



僕もはじめてフリーランスの案件を貰ったのはレバテックフリーランス
![]()
![]()
保有している案件数が多いので、業務経験がなくても何かしらの案件は紹介してもらえますよ(僕はJavaの経験3年でも案件を貰えました)。
手厚い保障を重視したいなら「Midworks


」
- 手厚い保障で正社員並みの安心感。
- 還元率60%超え&単価公開でクリアな契約。
- 給与保障制度(審査あり)。
Midworks
![]()
![]()
フリーランスを目指しているけど不安な方や保障を重視したい方におすすめです。



僕も何度か案件を紹介してもらいました。
自分のスキルに合った案件を紹介してもらえましたし、電話のやり取りも非常に丁寧でした。
週2〜3日の案件探しなら「ITプロパートナーズ


」
- IT案件に特化したフリーランスエージェント。
- 週2〜3日の案件が豊富。
- リモート案件が多く、直エンドなので単価も高い。
※詳細は「【週2・3案件】ITプロパートナーズとは?メリットや利用手順を解説!」を参照。
ITプロパートナーズ
![]()
![]()
週2〜3日から参画できる案件が豊富なので、起業したい人にもおすすめです。



週2〜3日の案件はある程度スキルがないと紹介してもらえない印象です。
とはいえ、週5の案件ももちろんありますし、僕が利用した時は迅速・丁寧に対応していただきました!
よくある質問
Hooksの設定を変えたらすぐ反映されますか?
安全のため、セッション開始時のフック設定がそのセッション中は使われます。
settings.jsonを直接編集した場合は、/hooksメニューで内容を確認してから反映するか、Claude Codeを再起動します。
フックの実行が終わらないときは?
hookごとにtimeoutを秒単位で指定できます。
指定しない場合は既定のタイムアウトが適用され、超過したフックは打ち切られます。
カスタムスラッシュコマンドとの違いは?
スラッシュコマンドは手動で呼び出すのに対し、Claude Code Hooksはライフサイクルのイベントで自動的に動きます。
必ず実行させたいチェックや整形は、Claude Code Hooksのほうが向いています。
まとめ
今回は、Claude Code Hooksで開発作業を自動化する方法について解説しました。
以下が本記事のまとめになります。



最後までお読みいただき、ありがとうございました!
| 【当サイト】おすすめフリーランスエージェント3選 | |||
|---|---|---|---|
| エージェント | 評価 | ポイント | 公式サイト |
レバテックフリーランス | 5.0 | 業界最大級のエージェント。 高単価案件が豊富。 | 公式 |
Midworks | 4.8 | 満足度調査で 3年連続3冠を達成。 | 公式 |
ITプロパートナーズ | 4.6 | 週2〜3向けの案件が豊富。 | 公式 |
- クソおすすめ本



海外のエンジニアがどういった思考で働いているかが理解できます。
海外に行く気はないけど海外エンジニアの動向が気になる雑魚エンジニアにおすすめです(本当におすすめな本しか紹介しないのでご安心を)。








