なぜハーネスが必要か — LLMは確率論で動く
単発のタスクでうまくいっても、LLM(大規模言語モデル)は確率論で動くため、実務で使い続けると次のような問題が起きます。
- 入力が少し違うだけで出力が変わる
- 会話が長くなると要領を得なくなる
- 参照資料が増えると参照しなくなる
- 失敗時の再試行をしたりしなかったりする
- 権限や禁止事項を守らなくなる
そこで必要になるのが、コンテキストを適切に組み立て、流し込み、監視し、必要なら修正する枠組み=ハーネスです。AIエージェントを馬にたとえるなら、ハーネスは馬の性能を最大限に引き出す「馬具」です。コンテキストエンジニアリングが「AIに何をどう渡すかの設計」だとすると、ハーネスは「その設計を毎回安定して実行し、安全に運用する基盤」であり、両者は不可分の関係にあります。
Claude Codeにおける4つのハーネス
| ハーネス | 一言 | 役割 | 実行タイミング |
|---|---|---|---|
| CLAUDE.md | 憲法 | 全体の基本方針・ルール・前提を伝える | セッション開始時に読み込み |
| Skills | 業務マニュアル | 特定作業の手順を再利用可能な形にまとめる | 必要と判断された時/明示的な呼び出し時 |
| サブエージェント | 専門の同僚 | 役割ごとに別のコンテキストへ作業を委任する | 別スコープの作業が必要な時 |
| hooks | 強制発動の自動処理 | 特定タイミングで必ず処理を実行する | 特定イベントの発生時 |
① CLAUDE.md — 毎回説明し直す内容を書き留める「憲法」
CLAUDE.mdは、セッション開始時にClaude Codeが必ず読む永続的な指示ファイルです。プロジェクトの目的、フォルダ構成と参照ルール、判断基準、禁止事項——毎回口頭で説明していた前提を書いておくことで、どのセッションでも同じ土台からスタートできます。
全プロジェクト共通のグローバル設定(`~/.claude/CLAUDE.md`)と、プロジェクト単位の設定(`./CLAUDE.md`)を使い分けます。書き方の詳細はCLAUDE.mdの書き方で解説しています。
② Skills — 繰り返し作業を定型化する「業務マニュアル」
Skillsは、特定タスクの手順書・チェックリスト・テンプレートをパッケージ化し、必要なときだけClaudeに読み込ませる仕組みです。「請求書作成」「レポート作成」「LP診断」のような繰り返し作業をスキル化しておくと、`/skill-name` と呼び出すだけで、毎回同じ品質で作業が実行されます。
CLAUDE.mdとの違いは読み込みタイミングです。CLAUDE.mdは毎回読む「憲法」、Skillsは必要時だけ読む「マニュアル」。この分担により、AIが一度に処理する情報量(コンテキストウィンドウ)を節約できます。作り方はClaude Code Skillsの作り方をご覧ください。
③ サブエージェント — コンテキストを分離する「専門の同僚」
サブエージェントは、特定の役割を持つ専門エージェントをメインのClaude Codeとは別の文脈で動かし、調査・レビュー・分析などを代行させて結果だけを受け取る仕組みです。目的は「関心の分離」。メインの会話を汚さずに専門作業を任せられます。
| 分離した方がいいケース | 例 |
|---|---|
| 専門性が違う | 競合リサーチはresearch-agent、文章改善はcopywriter-agentに分担 |
| 客観性が必要 | 作った本人と別のreviewer-agentが「初見の読者視点」でレビュー |
| 並列で進めたい | A社・B社・C社の事例調査を別々のサブエージェントに同時に任せる |
| 前工程の情報を見せたくない | 完成したLPだけを渡して「初見で申し込みたくなるか」を評価させる |
定義ファイルは `.claude/agents/agent-name.md` に置きます。レビュー・調査・ファクトチェック系のサブエージェントには、ファイルを書き換えられない読み取り専用のツール権限を与えるのが安全運用のコツです。
④ hooks — 特定イベントで必ず発動する「自動処理」
hooksは、Claude Codeの特定イベント(ツール実行の前後、応答の終了時など)に反応して、決めた処理を必ず実行させる仕組みです。CLAUDE.mdへの記載が「お願い」であるのに対し、hooksは機械的に強制されるのが決定的な違いです。
- PreToolUse — ツール実行前に発動(危険な操作をブロックできる)
- PostToolUse — ツール実行後に発動(ファイル変更後の自動チェック等)
- Notification / Stop — 入力待ちや応答終了時に発動(通知音を鳴らす等)
- SessionStart — セッション開始時に発動(最新情報の自動読み込み等)
身近な例では「Claude Codeが入力待ちになったら通知音を鳴らす」、法人運用では「秘密情報ファイルへのアクセスを機械的にブロックする」といった使い方をします。セキュリティ用途については法人導入とセキュリティ対策も参照してください。
どこから整備すべきか — 推奨の順序
- 1CLAUDE.md から始める — 毎回説明し直している前提・ルールを書き出すだけで、体感が大きく変わります
- 2同じ作業を2回以上依頼したら Skills 化する — 「今やった手順をスキル化して」と伝えるだけで雛形が作れます
- 3作業が複雑になってきたら サブエージェント で分業する
- 4確実に守らせたいルールが明確になったら hooks で強制する
重要なのは、最初から完璧なハーネスを設計しようとしないことです。実際に業務で使いながら、「毎回言っていること」をCLAUDE.mdへ、「繰り返す手順」をSkillsへと、運用の中で育てていくのが正解です。
Claude Codeを組織に定着させたい企業様へ。AI Orchestraの法人研修・伴走支援をご覧ください。