·194 words·1 min
前回の記事では git commit をトリガーに Ansible でローカルの Hugo を自動更新する仕組みを構築した。今回はその続きで、git push のタイミングで本番サーバへの同期も自動化した話を紹介する。
やりたいこと # これまでは本番反映を手動で実行していたが、git push に統合し、push するだけで本番まで反映されるようにしたかった。
git に post-push フックはない # git には post-commit のように「push 後」に処理を実行する post-push フックが存在しない。
代わりに pre-push フックを使う。これは push が実行される直前に呼ばれるフックで、処理が失敗(exit 1)すると push 自体を中止できる。
本番同期に失敗したまま GitHub へ push されるのを防げるため、むしろ都合がいい。
実装 # .githooks/pre-push に本番同期の処理を記述し、実行権限を付与してコミットする。
·304 words·2 mins
このブログは Hugo で構築している。記事作成時は Ansible でローカルの Hugo を更新してプレビューし、確認後に本番へアップロードするフローで運用している。
これまではコミット後に ansible-playbook コマンドを手動で実行していたが、コミットしたら自動で Hugo が更新されプレビューに集中できる環境を作りたかった。
この記事では、git の post-commit hook と Ansible を組み合わせた自動デプロイの仕組みを紹介する。
構成の概要 # このブログは以下の構成で運用している。
役割 内容 記事管理 git リポジトリの files/*.md ローカルデプロイ Ansible Playbook (ansible_connection=local) プレビュー ローカルの Hugo サーバ 自動化の対象は「コミット → Ansible 実行」の部分だ。
なぜ git hook を選んだか # git hook にした理由は以下の通りだ。
·223 words·2 mins
このブログの記事作成フローは、以前の記事で紹介したように git commit・git push をトリガーにプレビューや本番反映が自動で流れる仕組みになっている。
ただ、毎回 Claude Code を開いて「プレビューして」「本番に反映して」と伝えるのは手間だ。記事を書くことだけに集中したい。 そこで Claude Code のカスタムスラッシュコマンドを使って、これらの操作をワンコマンド化した。
カスタムスラッシュコマンドとは # Claude Code には、独自のスラッシュコマンドを作れる仕組みがある。所定の場所に Markdown ファイルを置くだけで、そのファイル名がそのままコマンド名になる。
ファイル名 = コマンド名 というシンプルなルールだ。
たとえば preview.md というファイルを置けば /preview というコマンドが使えるようになり、そのファイルの中身がプロンプトとして Claude に渡される。コマンドを入力するだけで、ファイルに書いた指示を Claude が実行してくれる。
配置場所とスコープ # コマンドファイルの置き場所によって有効範囲が変わる。
配置場所 スコープ <プロジェクトルート>/.claude/commands/ そのプロジェクトのみ ~/.claude/commands/ 全プロジェクトで有効 プロジェクト固有の操作はプロジェクト側に置く。こうすると他のプロジェクトで Claude を使っても同名のコマンドが干渉しない。git で管理できるので、チームで共有するときもそのまま使える。