Tips 2026.05.05

Claude Code本番運用の実践Tips:Hooksアーキテクチャ・権限管理・ファイル規約

タグ:Claude Code / 本番運用 / 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 ラッパーの判定ロジックを拡張すれば、「この操作は監査ログに記録するべき」という判定も組み込めます。セキュリティ監査の一部を自動化できます。

出典

参考にした公開記事は以下の通りです。これらの記事では、実装例や詳細な設計思想が書かれています。

参考ソース