2026-03-20エンジニアリング

「デプロイするの忘れた」が二度とないように、Claude CodeのHooksで自動化した

コードを変更するたびに手動でgit pushしていたのを、Claude CodeのHooksで全自動にした。仕組みと設定方法を、用語の説明つきで書く。

コードの変更が本番に反映されるまで、何ステップかかるか数えたことがある。

git add して、git commit して、git push して、サイトが更新されているか確認して——この手順を、Claude Codeが何か変えるたびに繰り返していた。

面倒というより、忘れる。「さっきの変更、pushしたっけ?」が頻発し始めた。

だから自動化した。


まず、このサイトの構成を説明する

少しだけ前提の話をする。このサイトがどうやって動いているかを知らないと、「何を自動化したか」がピンとこないと思うので。

このサイトは Vercel(バーセル)というサービスで動いている。Vercelはウェブサイトを公開するためのホスティングサービスで、無料プランでも普通に使える。

コードは GitHub(ギットハブ)というサービスで管理している。GitHubはコードの保存場所みたいなもので、「いつ・誰が・何を変えたか」を記録しながらコードを管理できる。

この2つは連携していて、GitHubにコードを送る(pushする)と、Vercelが自動的に検知してサイトを更新してくれる。

図にするとこうなる:

自分のPC(Claude Codeで編集)
        ↓ push(送る)
    GitHub(コード保存場所)
        ↓ 自動検知
    Vercel(サイト公開場所)
        ↓
  start-solopreneur.vercel.app が更新される

つまり、「GitHubにpushする」という1ステップさえ踏めば、あとは自動でサイトが更新される。

問題は、その「pushする」という作業を毎回手動でやっていたこと。


Hooksとは

Claude Codeには**Hooks(フック)**という仕組みがある。「特定のことが起きたときに、自動でコマンドを実行する」設定だ。

フックという言葉は「引っかける」という意味で、「この出来事に処理を引っかける」というイメージ。

設定できるタイミングの例:

タイミング何が起きたとき
PreToolUseClaude Codeがファイルを読み書きする直前
PostToolUseClaude Codeがファイルを読み書きした直後
StopClaude Codeが返答を終えたとき

今回使ったのは Stop。Claude Codeが返答し終えるたびに自動で何かを実行できる。


仕組みの全体像

これで「Stopフックにpushを引っかける」と、こういう流れになる:

Claude Codeがコードを変更
        ↓
Claude Codeが返答を終える
        ↓
Stopフックが自動で起動
        ↓
変更があるか確認
        ↓(あれば)
GitHubに自動でpush
        ↓
Vercelが検知 → サイトが更新される

返答が来てから2〜3分後には、本番のサイトに反映されている。


設定ファイルの書き方

.claude/settings.local.json というファイルに以下を書く。このファイルはClaude Codeの設定ファイルで、プロジェクトフォルダの中にある。

{
  "hooks": {
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "cd \"/path/to/project\" && [ -n \"$(git status --porcelain)\" ] && git add -A && git commit -m \"auto: claude code $(date '+%Y-%m-%d %H:%M')\" && git push origin main || true",
            "timeout": 60
          }
        ]
      }
    ]
  }
}

/path/to/project の部分には、自分のプロジェクトのフォルダのパスを入れる。

細かい部分を補足すると:

git status --porcelain — 「変更があるか確認する」コマンド。変更がないのにpushしようとすると無駄なので、変更があるときだけ処理する。

git add -A — 変更したファイルを「送る準備」にまとめる。

git commit — 「この変更をひとまとまりとして記録する」操作。日時つきのメモが自動でつく。

git push origin main — GitHubに送る。

|| true — ネットワークが切れているなどでpushが失敗しても、Claude Codeの動作を止めないようにするおまじない。


なぜ settings.local.json に書くか

Claude Codeの設定ファイルは3種類ある:

ファイル範囲GitHubで共有するか
~/.claude/settings.json全プロジェクト共通しない
.claude/settings.jsonこのプロジェクトのみする
.claude/settings.local.jsonこのプロジェクトのみしない

自動pushのコマンドには自分のPCのフォルダパスが含まれる。これは自分の環境に固有の情報なので、GitHubには含めない。だから settings.local.json を選ぶ。


ひとつだけ注意

Hooksの設定はClaude Codeを起動したときに読み込まれる。

起動したあとに設定を変更しても、次に起動したときから有効になる。「設定したのに動かない」はほぼこのパターンなので、設定したら一度Claude Codeを再起動する。


この仕組みができてから、開発の感覚が変わった。

変更して確認して、次の指示を出す——それだけに集中できる。「pushしたっけ」を考えなくなった分、「次は何を作るか」を考える時間が増えた。

些細な自動化だけど、集中の妨げを一つ消せた感覚がある。