Claude Code本番運用の実践Tips:Hooksアーキテクチャ・権限管理・ファイル規約
Claude Codeで複数エージェントが動く環境をつくる
テスト環境では1つのエージェントで完結していたのに、本番環境では複数のエージェントが連携する場面が増えます。営業支援ボットが生成したデータを自動分析ボットが処理し、その結果を顧客報告システムが配信する、というような連鎖です。
こうした環境で活躍するのが「Hooksアーキテクチャ」です。これは25個のエージェントが本番で動く環境で検証された設計パターンで、複数のエージェントが互いに連携するときの繋ぎ目を標準化する考え方です。
Hooksアーキテクチャの基本的な考え方
Hooksアーキテクチャでは、各エージェント間のやり取りを「フック」と呼ばれる仕組みで管理します。ある処理が終わったら自動的に次の処理が始まる、その仕組みです。従来の方法では、エージェントAが終わったか確認する→確認できたら手動でエージェントBを起動する、という手作業が入ります。Hooksを使うと、この手作業がなくなり、自動で流れます。
25個のエージェントが本番で同時に動く場面では、この自動連携がないと管理できなくなります。エージェントごとに異なるタイミングで完了するため、手作業追従は現実的ではありません。
実装時の注意点
Hooksを設定するときは、各エージェントの完了条件を明確にすることが必須です。「処理が終わった状態」の定義があいまいだと、フックが適切に発火(動作)しません。例えば「ファイル出力が完了したら次に進む」と「APIレスポンスが戻ってきたら次に進む」では、タイミングが異なります。
また、エージェント間でのデータ形式統一も重要です。エージェントAが吐き出すデータの形が、エージェントBが期待する形と異なると、自動連携は失敗します。
権限管理の実践:readonly ラッパーで権限プロンプトを撃退
Claude Codeは外部ツールと連携する際、実行権限を確認するプロンプトを出します。特に GitHub コマンド(gh コマンド)を使うときに多くの権限確認が発生し、対話が煩雑になります。
本番環境では、人間が毎回「実行して良いですか」に答えるわけにはいきません。この問題を解決する方法が「readonly ラッパー」です。
readonly ラッパーの仕組み
このアプローチでは、実際のコマンド(例えば gh api)の前に、安全な読み込み専用のバージョンをかませます。Claude Code が実行するのは、権限が限定されたバージョンのコマンドになるため、システムは「これは読み込みだけなので安全」と判定し、権限確認プロンプトを出さなくなります。
具体的には、gh コマンドの実行を事前に検証するスクリプトを間に挟みます。スクリプトが「読み込み操作だ」と判定したら実行許可を出し、「書き込み操作だ」と判定したら実行を阻止する、という流れです。
権限プロンプトが出ないメリット
- 本番ボットの対話フローがスムーズになる
- エージェントが自律的に判断・実行でき、人間の確認待ちがなくなる
- セキュリティと利便性のバランスが取れる
実装時の注意点
readonly ラッパーを実装するときは、スクリプトが正しく「読み込み」と「書き込み」を区別できているか、入念にテストする必要があります。誤分類があると、本来は阻止すべき危険な操作が許可されてしまいます。
スキル連携の秘訣:ファイル規約を決めて独立性を保つ
6つの異なるスキル(Claude Code の専門機能セット)が存在する環境で、スキル間のやり取りがうまくいかないことがあります。例えば「スキルAが出力したファイルをスキルBが読み込もうとしたら、形式が違う」という問題です。
根本原因は、スキルごとに異なるファイル規約を使っているからです。スキルAが JSON で出力し、スキルBは CSV を期待していると、自動連携は失敗します。
ファイル規約の統一方法
チーム全体で「このプロジェクトではこの規約を使う」と決めることが重要です。例えば:
- データ出力は常に JSON フォーマット
- 設定ファイルは YAML 形式に統一
- ログファイルの命名規則を
app_YYYYMMDD.logで統一 - スキルの出力ファイルは特定のディレクトリに格納
このルールを決めると、スキルAがファイルを出力した時点で、スキルBは「どこにあって、どの形式か」を事前に知っているため、自動で読み込みできるようになります。
ファイル規約設計のポイント
ファイル規約を決めるときは、「拡張性」を意識します。後から新しいスキルが加わったときも、同じルールを適用できるような設計にします。
また、スキル間で必要なデータの粒度も合わせておきます。スキルAが「顧客名」「住所」「電話番号」の3項目を出力するのに対し、スキルBが「顧客ID」「年齢」「購買履歴」を期待していると、データが噛み合いません。
実装前に、「スキルAは何を出力するか」「スキルBは何を入力として受け取るか」を書面で決めておくと、後の統合が格段に楽になります。
スキル独立性を保つ理由
スキル間にファイル規約という「共通言語」を用意すると、スキル同士が強く結び付かなくなります。スキルBが、スキルAの内部ロジックを全く知らなくても、出力ファイルの形さえ分かっていれば動作します。これを「独立性」と呼びます。
独立性が高いと、1つのスキルに問題が生じても、他のスキルは影響を受けないため、本番環境の堅牢性が高まります。
実装の落とし穴
Hooksアーキテクチャの過信
便利なので、すべてのエージェント連携にHooksを使いたくなります。しかし、Hooksは非同期処理(順序を気にしない並列処理)には向きません。「AとBの両方が完了してからCを実行する」というような複雑な条件判定が必要な場合は、Hooksだけでは不十分で、別の仕組みが必要になります。
権限ラッパーの検証漏れ
readonly ラッパーを導入したら、全ての危険なコマンドが本当に阻止されるか、テスト環境で十分にテストしましょう。「テストでは阻止されたから本番でも大丈夫」と思っていても、本番データの形が異なれば、ラッパーの判定ロジックがうまく動かないかもしれません。
ファイル規約の甘さ
「ファイルは JSON で」と決めたのに、実装段階で「この場面だけ CSV が便利だ」と例外を作ると、すぐに規約が瓦解します。最初の設計時に「例外パターンはどう扱うか」まで想定しておくことが大切です。
応用アイデア
マルチクラウド対応
Hooksアーキテクチャを応用すると、AWS 上で動くエージェントと Google Cloud 上で動くエージェントを同じ仕組みで連携させることが可能です。クラウドの違いを吸収するフックを用意すれば、上層のロジックは変わりません。
スキルの再利用性向上
ファイル規約をしっかり定義すれば、あるプロジェクト用に作ったスキルを、まったく異なるプロジェクトにも転用できるようになります。スキルが「プロジェクト固有」から「汎用」に進化します。
セキュリティ監査の自動化
readonly ラッパーの判定ロジックを拡張すれば、「この操作は監査ログに記録するべき」という判定も組み込めます。セキュリティ監査の一部を自動化できます。
出典
参考にした公開記事は以下の通りです。これらの記事では、実装例や詳細な設計思想が書かれています。