「デプロイするの忘れた」が二度とないように、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(フック)**という仕組みがある。「特定のことが起きたときに、自動でコマンドを実行する」設定だ。
フックという言葉は「引っかける」という意味で、「この出来事に処理を引っかける」というイメージ。
設定できるタイミングの例:
| タイミング | 何が起きたとき |
|---|---|
PreToolUse | Claude Codeがファイルを読み書きする直前 |
PostToolUse | Claude Codeがファイルを読み書きした直後 |
Stop | Claude 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したっけ」を考えなくなった分、「次は何を作るか」を考える時間が増えた。
些細な自動化だけど、集中の妨げを一つ消せた感覚がある。