Claude Code Desktopを使い始めて何記事か触っているうちに、「もっと自動化したい」「設定を整理したい」「ファイル操作を任せる範囲を絞りたい」みたいなことを考え始めますよね
そこから先に進むには 「拡張機構」と呼ばれる仕組みを理解しておくと、できることの幅が一気に広がります
この記事では、Claude Codeに慣れてきた中級者向けに 拡張機構の4本柱(Skills・MCP・Hooks・Subagents)と、その土台になる「ハーネス」という概念を体系的に解説します
応用編では各機能の具体的なテクニックや、CLAUDE.md・Permissions・Worktreesといった日常運用で効いてくる設定を扱う予定なので、まずはこの基礎編で全体像を押さえてもらえると嬉しいです
Claudeの基本的な使い方はClaudeの使い方を初心者向けに解説した記事、AI周辺の用語はClaudeを始める前に知っておきたい用語集でまとめているので、初学者の方はそちらから入るのがスムーズです
そもそも「ハーネス」って何
Claude Code関連の記事を読んでいると、最近 「ハーネス」(harness)という言葉をよく見るようになりました、聞き慣れない単語ですよね
LLM(脳)とハーネス(体・道具・記憶)
Claude本体は厳密にいうと LLM(大規模言語モデル)というテキストを生成するだけのモデルです、ファイルを読んだり、コマンドを実行したり、記憶を保持したりする機能は本体にはありません
それなのにClaude Codeが「ファイルを操作する」「コマンドを実行する」「設定を覚える」みたいな振る舞いができるのは、本体の周りに『体・道具・記憶』に相当するソフトウェア層が組まれているからです、これが「ハーネス」と呼ばれているものになります
例えるなら次のような関係性です
| 役割 | 担当しているもの |
|---|---|
| 脳(考える部分) | Claudeの本体(LLM) |
| 体(動く部分) | ツール実行・ファイル操作・コマンド実行 |
| 道具(連携部分) | MCP・コネクタ・拡張機構 |
| 記憶(覚える部分) | CLAUDE.md・Memory・コンテキスト管理 |
| ルール(縛る部分) | Permissions・Hooks |
このうち 「脳」以外のすべてがハーネスです、つまり実は Claude Codeのコードの大半はLLMの中身ではなく、このハーネス側にあることになります
だからカスタマイズの自由度が高い
ここが中級者にとって重要な視点で、ハーネス側はユーザーが書き換えられる部分が多いです
LLM本体(Claudeの賢さ)はAnthropicが訓練したものをそのまま使うしかありませんが、周辺のハーネスは settings.json や Skills・Hooks・MCPサーバーなどで 自分の使い方に合わせて自由に拡張できる設計になっています
つまり「Claude Codeをもっと使いこなしたい」というのは ハーネス側をどう構築するかの話とほぼ同義です、ここから先で扱う4本柱はすべてこのハーネス層の構成要素になります
ハーネスエンジニアリングって何
ハーネスを 「設計・構築・最適化する取り組み全般」を ハーネスエンジニアリングと呼びます
Anthropic公式や業界でもよく出てくる用語で、最近は prompt engineering(プロンプトエンジニアリング)から harness engineering へと重心が移ってきている流れがあります
両者の違いをざっくり整理すると次のようになります
| 軸 | prompt engineering | harness engineering |
|---|---|---|
| 焦点 | プロンプトの書き方 | 周辺ソフトウェア層の設計 |
| 主体 | エンドユーザー寄り | 開発者・運用者 |
| 効果範囲 | 1回の会話で完結 | 継続的なエージェント動作 |
| 具体例 | 「順を追って考えて」と頼む | Hookでツール権限を制限する |
ハーネスエンジニアリングが扱う主な範囲はこんな感じです
- 権限ポリシー設計(permissions.deny / allow / askの構造、4階層の使い分け)
- コンテキスト管理戦略(CLAUDE.mdの階層化、auto-compactタイミング設計、Memory運用)
- ツール選定と制限(allow-tools、Subagentごとの権限分離、危険コマンドのdeny)
- 拡張機構の設計(Skills / Hooks / MCP / Subagents の組み合わせ)
- エラー復旧・隔離(worktreeでの隔離戦略、失敗時の挙動設計)
- ロングランニング設計(複数セッションをまたぐタスクのcontext reset、引き継ぎファイル設計)
- 観測・ロギング(エージェントが何をしたかの記録、PostToolUseでのログ出力)
つまりこの記事で紹介している 4本柱の話もすべてハーネスエンジニアリングの構成要素になります
参考までに、Claude Codeのコードベース分析(2026年)では 「AI判定ロジック1.6% / ハーネス層98.4%」というデータもあって、Claude Code自体がハーネスエンジニアリングの結晶みたいな存在になっています
「もっと使いこなしたい」と感じたら、この記事で扱う拡張機構を組み合わせて自分用のハーネスを設計していくフェーズに入ったということになります
拡張機構の4本柱
Claude Codeのハーネスを拡張する仕組みは、現時点で大きく4つあります
- Skills:再利用可能な指示パターンをまとめる
- MCP:外部サービスと連携するための共通規格
- Hooks:イベント発生時に自動でスクリプトを走らせる
- Subagents:タスクを隔離した別エージェントに委譲する
それぞれが 「困りごと」の解決手段として性格が違うので、ここから1つずつ役割を整理していきます
Skills:再利用可能な指示パターン
Skillsは「よく使うプロンプト指示をテンプレート化して、Claudeに覚えさせる」仕組みです
毎回「コミットメッセージを書くときは○○のフォーマットで、こういう観点で…」と説明するのは面倒、でも一度Skillとして登録しておけば、Claudeがその場面を察知して自動で呼び出してくれたり、こちらから /コマンド名 で呼び出せたりします
ファイルの置き場所は次の2か所
~/.claude/skills/<skill-name>/SKILL.md(全プロジェクト共通の個人スキル).claude/skills/<skill-name>/SKILL.md(プロジェクト固有、Gitで共有可)
SKILL.mdの基本構造はこんな感じです
---
name: commit-message
description: Gitのコミットメッセージを書くときに呼び出すスキル。conventional commits形式で、件名と本文を生成
when_to_use: Gitコミット、コミットメッセージ作成、commit
allow-tools: Bash(git diff *) Bash(git status)
user-invocable: true
---
# コミットメッセージ生成スキル
差分を確認した上で、次のルールでコミットメッセージを書いてください
- 件名は50字以内、英語または日本語
- conventional commits形式(feat / fix / docs / chore など)
- 本文は「なぜこの変更が必要だったか」を1〜2文で
- 文末に署名を入れないトリガー方法の3パターン
Skillsは どうやって発動するかで3つのパターンがあります
| パターン | 発動条件 | 主な用途 |
|---|---|---|
| 自動トリガー | Claudeがdescriptionを読んで「これだ」と判断したとき | 常用するタスク全般 |
| 手動呼び出し | ユーザーが /skill-name と入力 | 明示的に呼びたいワークフロー |
| パストリガー | frontmatterの paths にマッチするファイルを開いたとき | ファイル種別ごとの自動ロード |
自動トリガーを効かせるには description フィールドの書き方が重要で、「いつ使うべきか」を具体的なキーワード付きで書いておくとClaudeの判断精度が上がります
Skillsを使うメリット
- 同じ指示を毎回書かなくて済む(プロンプトの肥大化を防げる)
- チームで共有できる(プロジェクトのSkillsをGit管理)
- スキル単位でツール権限を絞れる(
allow-toolsで限定) - 引数を取れるので汎用的なテンプレートが作れる
個人的にはClaude Codeの4本柱のうち 一番気軽に作り始められるのがSkillsで、Markdownを書くだけで作れるので習作に最適です
MCP:外部サービス連携の共通規格
MCP(Model Context Protocol)は、Claudeが外部のサービスやデータベースとやり取りするための 共通言語です
これがなかった頃は、AIに「WordPressを操作させる」「GitHubのissueを読ませる」みたいなことをやろうとすると、それぞれのサービスごとに 個別のつなぎ込みコードを書く必要がありました
MCPは そのつなぎ込みのインターフェース部分を標準化したものです、MCPに対応した「MCPサーバー」を1個用意すれば、Claudeから自由にその外部サービスを呼び出せるようになります
公式コネクタ vs 自作MCPサーバー
MCPの活用には大きく2つのアプローチがあります
| アプローチ | 概要 | 難易度 |
|---|---|---|
| 公式コネクタを使う | Anthropicが用意したGoogle Drive・Slack・GitHubなどとの連携を有効化するだけ | 低(設定のみ) |
| 自作MCPサーバーを書く | Python/TypeScriptで自前のサーバーを立てて、独自API・社内システムと連携 | 中〜高 |
中級者がまず触るなら 公式コネクタからがおすすめ、設定画面からON/OFFするだけで使えます
そこから先「自分のWordPressと連携したい」「社内システムと繋ぎたい」となったら自作MCPサーバーの出番です
MCPが解決する課題
- 「ChatGPT版」「Claude版」みたいに AIごとに連携コードを書き直さなくていい(MCP対応サーバーは複数AIで共通利用可)
- 認証(APIキー・OAuth)の扱いが標準化されている
- ツールの一覧表示・呼び出しも自動で処理される
2026年現在、AIエージェント業界の標準規格として急速に広がっていて、これからますます重要になる仕組みです
Hooks:イベント駆動の自動化
Hooksは、Claudeが何かをするタイミング(イベント)に合わせて 自動でスクリプトを実行する仕組みです
SkillsやCLAUDE.mdが「Claudeにお願いする」性格の機構なのに対して、Hooksは 機械的に発動するのが大きな違いになります、「Claudeの判断に任せず、確実に毎回走らせたい処理」がある場合に効きます
主要なHookイベント
| イベント名 | 発火タイミング | 典型的な用途 |
|---|---|---|
SessionStart | Claude Code起動時 | 環境変数読み込み、初期化スクリプト |
UserPromptSubmit | ユーザーがプロンプト送信時 | 入力検証、コンテキスト自動追加 |
PreToolUse | Claudeがツール実行する直前 | 危険コマンドのブロック、ログ出力 |
PostToolUse | ツール実行直後 | 自動lint・format、結果ロギング |
Stop | セッション終了時 | クリーンアップ、後片付け |
とくに PreToolUse は 危険コマンドの最終防衛線として使えるので、中級者なら覚えておきたいイベントです
設定例:rm -rf を見つけたら強制ブロック
例えば settings.json のdenyリストだけでは不安なので「実行直前に二重チェックして、危ない場合は通知も出したい」みたいなケースで使います
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "~/.claude/hooks/block-dangerous.sh"
}
]
}
]
}
}呼び出されるシェルスクリプトの最小例はこんな感じ
#!/bin/bash
INPUT=$(cat)
CMD=$(echo "$INPUT" | jq -r '.tool_input.command')
if echo "$CMD" | grep -qE 'rm -rf|DROP TABLE'; then
jq -n '{
hookSpecificOutput: {
hookEventName: "PreToolUse",
permissionDecision: "deny",
permissionDecisionReason: "危険コマンドをHookでブロックしました"
}
}'
fi
exit 0Hookは exit code とJSON出力の組み合わせで「許可/拒否/警告だけ」を制御できる仕組みになっていて、ここの設計が地味に奥深いです
SkillsとHooksの違い
初心者が混乱しがちなのが「SkillsとHooksってどう違うの?」という点なので整理しておきます
| 項目 | Skills | Hooks |
|---|---|---|
| 性質 | Claudeへの「お願い」 | 機械的な強制実行 |
| 判断主体 | Claude(描写を読んで判断) | システム(条件マッチで自動発火) |
| 書き方 | Markdown(プロンプト的) | シェルスクリプトや任意の実行可能ファイル |
| 主な用途 | 定型タスクのテンプレート化 | セキュリティ防御・自動lint等 |
Subagents:隔離コンテキストでの委譲
Subagents(サブエージェント)は、メインのClaudeセッションから 別のコンテキストを持つClaudeにタスクを委譲する仕組みです
たとえば「ファイルを50個調査して、関連箇所をまとめて」みたいな重いタスクを、メインの会話に直接やらせると コンテキストウィンドウが調査ログで埋まってしまう問題があります
これをSubagentに任せれば、メインのコンテキストはきれいなまま、結果サマリーだけを受け取れます
AGENT.mdの基本構造
Subagentの定義ファイルは .claude/agents/<agent-name>/AGENT.md に置きます
---
name: code-researcher
description: 大規模リポジトリの調査用エージェント、関連ファイル特定と概要把握を担当
tools: Read Grep Glob Bash(rg *)
model: claude-sonnet
maxTurns: 30
permissionMode: ask
isolation: worktree
---
あなたはコード調査の専門エージェントです
ユーザーから渡されたテーマに沿って、リポジトリ内の関連ファイル・関数・モジュールを特定し
最後に「どこに何があるか」のサマリーをMarkdownで返してください
ファイル変更や書き込みは行わず、読み取り専用で動作してください主要なフィールド
| フィールド | 役割 |
|---|---|
tools | このエージェントが使えるツールを限定(セキュリティの肝) |
model | 使用モデル指定(軽い作業はHaikuに任せる等) |
maxTurns | 最大ターン数、暴走を防ぐ |
permissionMode | 権限チェックの強さ(ask / allow / deny) |
isolation | worktree隔離するか |
Subagentsの典型ユースケース
- リサーチタスク:大量ファイルから関連箇所を抽出
- コードレビュー:セキュリティ・パフォーマンスを別の視点で並行チェック
- テスト実行:長時間かかるテストを別エージェントに任せて、メインは設計を続行
- 並列実装:複数モジュールを別エージェントで同時実装
注意点として、Subagentは親のSkillsを継承しない仕様です、必要なSkillはAGENT.mdの中で明示的にプリロードする必要があります
4本柱の使い分けマップ
ここまで4つの拡張機構を見てきましたが、 どの場面でどれを使うかを整理するとこんな感じになります
| やりたいこと | 使うべき機構 |
|---|---|
| 定型タスクのテンプレート化(コミットメッセージ、レビュー観点など) | Skills |
| 外部サービスとの連携(WordPress、Slack、GitHubなど) | MCP |
| 機械的な強制処理(危険コマンドブロック、自動lint) | Hooks |
| 長いリサーチ・並列処理・隔離したい作業 | Subagents |
| 判断基準・方針の周知(常時参照される指針) | CLAUDE.md(応用編で扱う) |
| 機械的に止めたい操作のブロック | Permissions deny(応用編で扱う) |
同じ「自動化したい」というニーズでも、「Claudeの判断を信頼する」のがSkills、「機械的に処理させる」のがHooks、という対称関係を覚えておくと選びやすくなります
同様に 「メイン会話内で完結させる」のが標準、「コンテキストを分けたい」のがSubagents、「Claude内で完結」のが標準、「外部とつなぐ」のがMCP、と対比で覚えると整理しやすいです
最初の一歩|まず作ってみるなら
4本柱を一気に覚えるのは大変なので、それぞれ 「習作として最初に作るならこれ」というお題を1つずつ紹介します
Skills:コミットメッセージ生成スキル
上で例示したような commit-message スキルが Skills入門に最適です
毎回作業しているうちに「commitメッセージこんな感じで書きたい」という個人の好みが見えてくるので、それをそのままMarkdownに書き出すだけで形になります、5分くらいで完成します
MCP:公式コネクタを1つ試す
自作MCPはハードルが高めなので、まずは 公式コネクタを1つ有効化してみるのがおすすめ
Google Drive・GitHub・Notion など、自分が日常的に使っているサービスのコネクタを設定画面から有効にして、Claude経由でファイル一覧を取ったり検索したりする体験から始めるとMCPの便利さが実感できます
Hooks:危険コマンド通知だけのHook
いきなり複雑なHookを書くより、「危険コマンドを実行しようとしたらデスクトップ通知を出すだけ」みたいな最小Hookから入るのが分かりやすいです
Windowsなら msg、Macなら osascript、シェルスクリプトの記述方法もコピペできるものが多いので、最初の壁は高くありません
Subagents:リサーチ専用エージェント
「リサーチタスク用に tools を Read Grep Glob だけに絞った専用エージェント」を作るのが、Subagentsの威力を体感する最短ルートです
大きめリポジトリで「○○の実装どこにある?」みたいな調査をするとき、メインで進めるのとSubagentに任せるのとで、コンテキスト消費量の違いに驚くと思います
まとめ|拡張機構を押さえると見える世界
長くなりましたが、ポイントをぎゅっと整理するとこんな感じです
- Claude Codeの大半は 「ハーネス」と呼ばれる周辺ソフトウェア層、ここをいじれるのがカスタマイズの幅
- 拡張機構は4本柱:Skills(再利用指示)・MCP(外部連携)・Hooks(機械的自動化)・Subagents(隔離委譲)
- 同じ「自動化」でも Claudeに判断させるのがSkills、機械的に発動させるのがHooksという対称関係
- 同じ「処理委譲」でも 外部と繋ぐのがMCP、コンテキスト分離するのがSubagentsという対称関係
- 慣れるまでは Skillsから入るのが最も気軽、Markdown1ファイルで始められる
この基礎編で4本柱の見取り図ができたので、応用編では CLAUDE.mdの深掘り・Memory管理・Permissions応用・Worktreesでの並列開発など、日常運用で効いてくる中級者向けテクニックを掘り下げる予定です
各拡張機構の個別深掘り(Skillsだけで1記事、MCPだけで1記事、というレベル)も今後 順次まとめていく予定なので、興味のある分野があれば追っかけてもらえると嬉しいです
初心者向けの周辺記事として、Claudeの使い方を初心者向けに解説した記事、Claudeを始める前に知っておきたい用語集、Claude Code Desktop初心者向けセキュリティ5選も合わせてどうぞ


コメント