ここまでの5章で、Claude Code を入れ、指示を出し、詰まりを抜け、権限を設計してきました。この章は道具そのものを作り変える話です。拡張は名前を覚えても使えません。役に立つのは「いまの不満はどれで解けるのか」という対応表です。

使い分けの地図 ― 4つの問いで決まる

拡張は6つありますが、考えることは4つだけです。お願いで足りるか/確実に効かせたいか/別の文脈に分けたいか/外部に繋ぎたいか——この順に自問すれば、だいたい一意に決まります。

Q1
お願いで足りるか

たまに抜けても致命的でないなら言葉で足ります。→ CLAUDE.md(全体の前提)/Skills(特定作業の手順)

Q2
確実に効かせたいか

一度でも抜けたら困るなら、仕組みで止める。→ hooks。モデルの判断を介さず必ず走ります。

Q3
別の文脈に分けたいか

大量の出力で本筋を埋めたくないなら、外でやらせて結論だけ受け取る。→ subagents

Q4
外部に繋ぎたいか

AIが知りようのない情報(DBの現在値、課題管理の中身)が要るなら。→ MCP

5つ目は「これを他人にも配るか」——配るなら plugins。混同しやすいのはQ1とQ2、CLAUDE.md・Skills・hooks です。どれも同じに見えますが、違うのはいつ読まれるか・誰が実行するかです。

CLAUDE.md ― 消えない記憶。ただし長くすると消える

CLAUDE.md はプロジェクトのルートに置くとセッションのたびに自動で読まれるファイルです(全プロジェクト共通なら ~/.claude/CLAUDE.md)。ファイルなので、第1章で見た「長引くと前半を忘れる」の影響を受けません。毎回説明していることの置き場所です。

「読んだと言うのに守らない」は怠慢ではなく構造の問題で、原因は3つあります。

  • 中盤が沈む——長文の中ほどの指示は見落とされやすく、伸ばすほど真ん中のルールは事実上いなくなります
  • 圧縮で要約される——圧縮が走ると細かい運用ルールは潰れます。後半ほど違反が増えるのはこれです
  • 直近の指示が勝つ——「とりあえずコミットして」が、数百ターン前に読んだ確認手順を素通りさせます

対処は削ること。経験則で確実に効くのは100〜150行あたりまで。超えるなら致命的な掟だけ冒頭に残し、詳細は別ファイルへ(重複はズレを生むので正本は1箇所に)。落とせないものだけ「CRITICAL」を付け、「丁寧に書く」ではなく「3行以内で書く」のように外から判定できる形にすること。

「読みました」は証拠になりません。 判断材料は実行後の振る舞いだけ。何度書き直しても守られないルールは、書き方の問題ではありません——次の節の仕事です。

hooks ― お願いではなく、確定的に効かせる

.env は書き換えないで」——CLAUDE.md に書けば9割は守られます。1割抜けても困らないなら文章で足りる。困るなら hooks——これが分岐点です。

hooks は決まった時点で自動実行されるシェルコマンドです。走らせるのがモデルではなくClaude Code 本体(ハーネス)なので、判断を待たずに必ず走ります。全体像は Claude Code hooksとは で扱っています。定番の発火点は9つ。

SessionStart 開始・再開時 UserPromptSubmit 送信直後 [ブロック可] PreToolUse ツール直前=門番 [ブロック可] PostToolUse ツール成功後=整形[ブロック可] Notification 入力待ち・許可待ち Stop 応答の終わり [ブロック可] SubagentStop サブエージェント終了[ブロック可] SessionEnd セッション終了 PreCompact 圧縮の前 [ブロック可]

「ブロック可」はそこで動作を止められるという意味です。PreToolUse で危険なコマンドを門前払いし、PostToolUse で自動整形する——この2つが定番の入口。設定は settings.json"hooks" キーに書き、置き場所でスコープが決まります(~/.claude/=ユーザー、.claude/=共有、settings.local.json=自分だけ)。

{ "hooks": { "PostToolUse": [ { "matcher": "Edit|Write", "hooks": [ { "type": "command", "command": "..." } ] } ] } }

構造はイベント名 → マッチャ+コマンドの配列matcher は対象ツール名("Edit|Write" のように | 区切り、省略で全一致)。フックは標準入力にJSONを受け取り、終了コードで返します——0 が成功、2 がブロック(標準エラー出力が Claude に渡ります)。対象のファイルパスも入力JSONから取れるので「このパスなら止める」が書けます。

フックは制限をきつくできますが、緩くはできません。 許可を返してもプロンプトを省くだけで、拒否ルールが常に優先されます。PreToolUse の拒否は承認をすべて飛ばすモードでも効くので、第5章で緩めた分の底として使えます。

代償も先に。hooks はあなたの権限で任意のシェルコマンドを自動実行します。公式も「責任は完全にあなたにある」と明記しています。信頼できるものだけを設定し、入力は検証すること。設定はセッション開始時に固定されるので、「直したのに効かない」ときは新しいセッションを開いてください。

subagents ― 文脈を分けて任せる

テストの全出力や巨大なログ——読み捨てるはずの大量テキストが積み上がると、肝心の前提が押し出されます。subagents はその作業を別のコンテキストで走らせ、結論の要約だけを受け取る仕組みです。独自のコンテキストウィンドウ・システムプロンプト・ツール権限を持ち、あなたの会話履歴を見ていないので、調べ物の残骸がメインに戻ってきません。

  • 分けると効く——広い調査/大量の出力を伴う確認/結論だけあればよい自己完結タスク
  • 分けると損する——逐次処理/頻繁な往復/同じファイルを触る並行作業/1〜2手で終わる修正

標準機能なので設定なしに使えます。定義を足すなら .claude/agents/<名前>.md(共通なら ~/.claude/agents/)に、YAML フロントマターで name / description / tools / model を書きます。管理は /agents、呼ぶなら @agent-<名前>。まずは標準の探索用・計画用・汎用から。

description が呼び出しの鍵です。メインのエージェントはこれを見て委譲するか判断するので、曖昧だと一度も呼ばれません。何をするか+いつ使うかを具体的に——同じ罠が Skills にもあります。

紛らわしい Agent Teams は、複数の独立セッションが共有タスクリストで連携する仕組み。実験的なオプトイン・既定では無効CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1)。別インスタンスが動くのでトークン消費が大きく、入れ子にもできません。違いは subagentsとAgent Teamsの違い で比較しています。迷ったら単一セッションか subagents

Skills ― 手順を資産にする

「毎回この手順で」という定型に対し、Skills が優れているのは、必要なときだけ開かれる点です。実体は SKILL.md を中心にしたフォルダ。先頭に namedescription、その下に手順を Markdown で書き、reference/scripts/ も同梱できます。.claude/skills/(プロジェクト)か ~/.claude/skills/(共通)に置くだけで認識されます。

肝は段階的開示です。セッション開始時に読まれるのは各スキルの短い description だけで、依頼が合致して初めて本文や資料が読み込まれます。だから何十個入れても普段の文脈はほとんど埋まりません——常に全文が乗る CLAUDE.md との決定的な差です。裏返しに合致しないと一生開かれませんdescription が曖昧なら、書いた手順は存在しないのと同じ。書き方は Claude Agent Skillsとは で扱っています。

一行で。CLAUDE.md=常に読まれる前提、Skills=Claude が判断して開く手順書、hooks=必ず走る処理。

MCP ― 外のシステムに手を伸ばす

ここまでの3つはやり方を変える拡張でした。MCP(Model Context Protocol)だけは触れる範囲を広げます——DBの現在値や課題管理のチケットのように、AIが構造的に知りようのないものへ手を届かせる規格です。接続の形は2つで、詰まる場所が違います

  • ローカル(stdio)——自分のPCでサーバをサブプロセスとして起動。詰まるのは起動そのもの(パス、環境変数、コマンド解決)
  • リモート(HTTP)——クラウド上のサーバに URL で接続。詰まるのはほぼ認証=401 や 403 が返っている状態

だから「繋がらない」を一括りにせず、まず /mcp でステータスを見ます。failed ならローカル起動、needs authentication ならリモートの認証、pending approval なら承認待ち——ステータスが打ち手を決めます。対処は MCPサーバ接続エラーの直し方 にまとめました。

特有の罠も。共有設定の .mcp.jsonリポジトリ直下.claude/ の下でも settings.json の中でもありません)、APIキーはサーバごとの env に。Windows では npx の実体がバッチファイルのため、cmd 経由で /c npx ... と渡すと通ります。

繋いだサーバはコンテキストを消費します。 ツール定義が積み上がるだけで文脈が圧迫されます。使っていないサーバは無効化しておくのが無難です。

plugins ― 一式を束ねて配る

スキル、サブエージェント定義、フック、MCP 設定が散らばってきたら、束ねて配れる形にするのが plugins です。間違えやすいのはディレクトリ規則。マニフェストは .claude-plugin/plugin.json で、.claude-plugin/ に入れるのはそれだけskills/agents/hooks/hooks.json.mcp.jsonルートに置きます

/plugin marketplace add owner/repo ← カタログを登録する /plugin install name@marketplace ← そこから個別に導入する /plugin list ← 入っているものを確認する

導入は2段階。カタログを登録し、そのうえで個別にインストール——追加しただけでは何も入りません。スコープは user(全プロジェクト)/project(共同作業者全員)/local(自分だけ)/managed(管理者配布・変更不可)で、チームで揃えるなら project。自作の手順は pluginsとmarketplaceとは で扱っています。

プラグインはあなたの権限で任意のコードを実行しうる——公式ドキュメントの明記です。Anthropic は第三者のプラグインや同梱 MCP サーバを検証しません。信頼できる発行元のものだけを入れること。第5章の権限設計が、ここでは他人が書いたコードとして戻ってきます。

何から入れるか ― 順番の話

6つ並べましたが、全部入れる必要はありません。困りごとが無いうちに入れると設定の複雑さだけが増えます。順番は症状から

  • 毎回同じ説明をしている → CLAUDE.md。特定の作業だけなら Skills へ
  • 書いたのに守られない → まず削る。実害が出るものだけ hooks
  • すぐ文脈が埋まる → 重い調べ物を subagents へ/不要な MCP を無効化
  • 情報にAIが届かない → MCP。1つずつ繋いで、通ったのを見てから次へ
  • 同じ設定を配りたい → plugins。自分で使えているものだけ束ねる
  • 特に困っていない → 何も入れない。それが最良の状態

最後の行は冗談ではありません。拡張は詰まりの原因も増やします——「Claude Code が変だ」の正体が自分で足した層であることは多い。だから第4章の切り分けが先です。

まとめ

  • 選ぶ基準は4つの問い——お願いで足りるか(CLAUDE.md・Skills)/確実に効かせたいか(hooks)/別の文脈に分けたいか(subagents)/外部に繋ぎたいか(MCP)。配るなら plugins
  • CLAUDE.md はセッションをまたぐ記憶。長くすると中盤が沈み、圧縮で薄まり、直近の指示に負ける。削って優先度を明示する
  • hooks はハーネスが実行するので判断が入らない。制限はきつくできるが緩くはできない
  • subagents は別コンテキストで働き要約だけ返す。逐次処理や頻繁な往復には向かない
  • Skillsdescription が合致したときだけ開く段階的開示。増やしても軽いが、説明が曖昧だと呼ばれない
  • MCP は触れる範囲を広げる規格。/mcp のステータスで打ち手が決まる
  • plugins は配布の箱。他人のコードが自分の権限で走るので発行元を確かめる
  • 入れる順番は症状から。困りごとが生まれてから1つずつ

拡張していくほど消費は増えます。最後に、長く使い続けるための運用を扱います。次の 第7章「コストと上限」 へ進みましょう。