Skillと他カスタマイズ機能の使い分け

claude-code 101

Ryo Nakagami

2026年04月30日

Index

regmonkey_index:
  title_fontsize: 1.1em
  bullet_fontsize: 0.9em
  children:
    - title: 1. 5つの機能の全体像
      description:
        - Claude Codeのカスタマイズ手段は <strong>5種類</strong>.それぞれが固有の専門領域を持つ
        - 1機能に詰め込まず,<strong>適材適所で組み合わせる</strong>のが基本
      width: [40, 60]
    - title: 2. Skills vs CLAUDE.md
      description:
        - CLAUDE.mdは<strong>常時ロード</strong>.プロジェクト共通の恒久ルール向け
        - Skillsは<strong>オンデマンド</strong>.タスク特有の専門知識を必要時のみ
      width: [40, 60]
    - title: 3. Skills vs Subagents
      description:
        - Skillsは<strong>現セッションに知識を追加</strong>.推論をその場で補強する
        - Subagentsは<strong>別コンテキストで委譲</strong>.独立した作業として隔離
      width: [40, 60]
    - title: 4. Skills vs Hooks
      description:
        - Skillsは<strong>リクエスト駆動</strong>.依頼内容に応じて起動
        - Hooksは<strong>イベント駆動</strong>.ファイル保存・ツール呼び出しで発火
      width: [40, 60]
    - title: 5. Skills vs MCP servers
      description:
        - Skillsは<strong>指示・手順の知識</strong>を与える
        - MCPは<strong>外部ツール・統合</strong>を提供
      width: [40, 60]

5つの機能の全体像

  • 5つの機能の全体像

  • Skills vs CLAUDE.md

  • Skills vs Subagents

  • Skills vs Hooks

  • Skills vs MCP servers

機能はそれぞれ独自の専門領域を持つ:組み合わせて使う

1機能に詰め込まず,常時ロード・オンデマンド・隔離実行・イベント駆動・外部統合を適材適所で配置する

regmonkey_abstract_summary:
  title_fontsize: 1.2em
  bullet_fontsize: 1.0em
  children:
    - title: CLAUDE.md
      description:
        - <strong>常時ロード</strong>.全セッションの冒頭に必ず読み込まれる
        - プロジェクト共通の<strong>恒久ルール</strong>(標準・制約・スタイル)を置く
      width: [25, 75]
    - title: Skills
      description:
        - <strong>オンデマンドロード</strong>.リクエストにマッチしたときだけセッションに合流
        - タスク特有の<strong>専門知識・手順</strong>を必要時に注入する
      width: [25, 75]
    - title: Subagents
      description:
        - <strong>隔離コンテキスト</strong>で作業を委譲し,結果だけ回収する
        - 別ツール権限・並列実行・本セッションの<strong>コンテキスト保護</strong>に有効
      width: [25, 75]
    - title: Hooks
      description:
        - <strong>イベント駆動</strong>.ファイル保存・ツール呼び出しの前後で自動発火
        - lint/format・事前検証など「毎回走らせたい」副作用を仕込む
      width: [25, 75]
    - title: MCP servers
      description:
        - <strong>外部ツール・統合</strong>を Claude に接続する:使える道具を増やす
        - Jira・Slack・社内DB等への API 接続,標準ツールにない追加機能
      width: [25, 75]

Claude Code 機能の使い分け判断の3原則

判断の3原則

  • いつロードされるか」「何を提供するか」の2軸で機能を区別する
  • 各機能は専門領域が重ならない:別の機能で代替するのは無理がある
  • 1つで賄おうとせず,複数を重ねて構成するのが現実的な使い方

具体例:PR レビュー支援フローでの5機能の役割分担

PRレビューフローでの5機能の役割分担。CLAUDE.mdが土台として常時適用され,主軸はHooks→Skills→MCP serversの時系列。SkillsからSubagentsへ別軸で委譲

Skills vs CLAUDE.md

  • 5つの機能の全体像

  • Skills vs CLAUDE.md

  • Skills vs Subagents

  • Skills vs Hooks

  • Skills vs MCP servers

常時ロードのCLAUDE.md と 必要時のみのSkills

全セッション共通ルールはCLAUDE.mdへ.セッションに応じた必要専門知識はSkillsに分離

ロードのタイミングが本質的な違い

  • CLAUDE.md1セッションの開始時に必ず読み込まれる:プロジェクト全体の前提
  • Skillsはマッチしたときだけセッションに追加される:必要なときに必要な知識

CLAUDE.md を使う場面

  • プロジェクト全体に常に適用される標準
    • 例:TypeScriptはstrictモードで書く
  • 絶対にやってはいけない」制約
    • 例:DBスキーマを直接変更しない
  • フレームワーク選定・コーディングスタイル

Tips

  • 複数ステップの手順一部のコードのみに関わる事項は CLAUDE.md ではなく,Skill か path-scoped rule(ネストした CLAUDE.md)へ移す

Skills を使う場面

  • 特定タスクのときだけ必要な専門知識
    • 例:PRレビュー用のチェックリスト
  • 一部の場面でのみ意味を持つ知識
  • コンテキストを圧迫する可能性のある詳細な手順
    • skillsは常に読み込まれるのではなく,タスクマッチ時点で全文が読み込まれる(=段階的開示(progressive disclosure)で動作)
    • タスクに応じて呼び出す形にするとContext Windowsを節約できる

Skills vs Subagents

  • 5つの機能の全体像

  • Skills vs CLAUDE.md

  • Skills vs Subagents

  • Skills vs Hooks

  • Skills vs MCP servers

別コンテキストで実行するSubagents

Skillsは推論をその場で強化.Subagentsは作業を委譲して結果だけを受け渡す

コンテキストの扱いが本質的な違い

  • Subagentsは独立コンテキストで実行:タスクを渡して結果を回収する
  • Subagentsが大量のログを読み込んでも,親エージェントのコンテキストには影響しない(メモリ汚染の防止

Subagents を使う場面

  • 作業を別コンテキストに委譲したい
    • 例:広範な検索・調査の並列実行
  • 異なるツール権限を与えたい
  • 委譲作業と本セッションのコンテキスト分離が必要

REMARKS

  • Subagentsは親エージェントのコンテキストを参照できない
  • 情報を共有させたい場合は相互に参照できるログファイルを媒体にして,情報連携したりする

Skills を使う場面

  • 現タスクのClaudeの知識を補強したい
    • 例:自社流のスライド作法をセッションに注入
  • 専門知識をセッション全体で参照する
  • 隔離せず継続して使う知識・指示

サブエージェントによるコンテキスト分離

親はタスクを委譲し,サブエージェントが独立コンテキストで作業.本コンテキストには要約だけが返る

親エージェントが3つのサブエージェント(A・B・C)にタスクを委譲し,それぞれが独立コンテキストで作業した結果の要約だけを親が受領する図

もしSubAgentsがなかったら

  1. 膨大なログ分析やテスト実行ログを読み込むことでAgentのメモリが汚染
  2. 重要な要件や設計判断が圧縮1で失われる
  3. 重要度の低い情報に引きずられることで推論の一貫性が崩れる

Skills vs Hooks

  • 5つの機能の全体像

  • Skills vs CLAUDE.md

  • Skills vs Subagents

  • Skills vs Hooks

  • Skills vs MCP servers

リクエスト駆動のSkills と イベント駆動のHooks

何を依頼されたかで動くのがSkills.何が起きたかで動くのがHooks.発火条件のレイヤーが違う

起動トリガーが本質的な違い

  • Hooksはイベントで発火:ファイル保存・ツール呼び出しの前後で自動実行
    • プロンプトとしてではなく,プログラムとして動作する
  • Skillsはリクエストで発火:ユーザーの依頼内容にマッチして起動

Hooks を使う場面

  • ファイル編集・保存ごとに走らせたい自動処理
    • 例:保存時にlint・formatを自動実行
  • 特定ツール呼び出し前の事前検証
    • 例: Bash呼び出し時に,実行予定スクリプトをログに吐き出す
  • Claude Codeの作業状態の通知
    • 例: Slackに長時間タスクの完了通知を投げる

Skills を使う場面

  • リクエストの処理方針を変える知識
    • 例:レビュー依頼時のみチェック観点を提供
  • 状況に応じて,Claudeの推論を導くガイドライン
  • 「やるかどうか」自体をリクエストに応じてモデルが判定する

REMARKS

  • Hooksと異なり,スキル実行の判断はモデルが行うので,「絶対xxxしろ」とSKILLに記述したとしても,100%遵守の保証はない
  • 確実に走らせたい処理はHooks,文脈に応じた知識注入はSkills

Hookの種類:セッション・プロンプト系

record1:
  Hook名: SessionStart
  タイミング: セッション開始時・再開時
  Block: ×
  主な用途: 開発コンテキスト(Issue・最近の変更など)の読み込み、環境変数のセットアップ

record2:
  Hook名: Setup
  タイミング: <code>--init-only</code> または <code>-p</code> モードで <code>--init</code> / <code>--maintenance</code> 起動時
  Block: ×
  主な用途: CIやスクリプトから明示的にトリガーする一回限りの依存関係インストール・スケジュールクリーンアップ

record3:
  Hook名: UserPromptSubmit
  タイミング: ユーザがプロンプトを送信し、Claudeが処理する前
  Block:
  主な用途: プロンプトに基づくコンテキスト追加・プロンプトの検証・特定種類のプロンプトのブロック

record4:
  Hook名: UserPromptExpansion
  タイミング: スラッシュコマンドがプロンプトに展開され、Claudeに届く前
  Block:
  主な用途: 特定コマンドの直接呼び出しブロック・スキル用コンテキスト注入・コマンド利用ログ

record5:
  Hook名: SessionEnd
  タイミング: セッションが終了したとき
  Block: ×
  主な用途: セッション終了ログ・後処理

Hookの種類:ツール実行系

record1:
  Hook名: PreToolUse
  タイミング: Claudeがツールパラメータを生成した後、ツール呼び出しの処理前
  Block:
  主な用途: 危険コマンドのブロック・ツール入力の修正・許可/拒否/確認の制御

record2:
  Hook名: PermissionRequest
  タイミング: 権限ダイアログが表示されるとき
  Block:
  主な用途: ユーザの代わりに権限を自動承認・拒否、カスタムロジックによるツール権限制御

record3:
  Hook名: PermissionDenied
  タイミング: auto modeのclassifierがツール呼び出しを拒否したとき
  Block: ×
  主な用途: 拒否ログ記録・設定調整・モデルへのリトライ指示

record4:
  Hook名: PostToolUse
  タイミング: ツールが正常に完了した直後
  Block: ×
  主な用途: ファイル自動フォーマット・ツール出力の置換・Claudeへのフィードバック追加

record5:
  Hook名: PostToolUseFailure
  タイミング: ツール実行が失敗したとき
  Block: ×
  主な用途: 失敗ログ・アラート送信・Claudeへの修正フィードバック

record6:
  Hook名: PostToolBatch
  タイミング: 並列ツール呼び出しのバッチ全体が解決した後、次のモデル呼び出し前
  Block:
  主な用途: バッチ単位でのコンテキスト注入・エージェントループの停止

Hookの種類:タスク・SubAgent・停止系

record1:
  Hook名: Notification
  タイミング: Claude Codeが通知を送るとき
  Block: ×
  主な用途: 外部サービス(Slack・デスクトップ通知など)への通知転送

record2:
  Hook名: SubagentStart
  タイミング: Agentツール経由で SubAgent が起動したとき
  Block: ×
  主な用途: SubAgent へのコンテキスト注入・起動ログ

record3:
  Hook名: SubagentStop
  タイミング: SubAgent が応答を終えたとき
  Block:
  主な用途: SubAgent の停止防止・結果の検証

record4:
  Hook名: TaskCreated
  タイミング: TaskCreateツール経由でタスクが作成されるとき
  Block:
  主な用途: 命名規則の強制・タスク説明の必須化・特定タスクの作成防止

record5:
  Hook名: TaskCompleted
  タイミング: タスクが完了としてマークされるとき
  Block:
  主な用途: テスト・lint通過などの完了基準の強制

record6:
  Hook名: Stop
  タイミング: Main agent が応答を終えたとき
  Block:
  主な用途: 停止前の品質ゲート・デスクトップ通知・タスク完了確認

record7:
  Hook名: StopFailure
  タイミング: APIエラーで応答が終わったとき
  Block: ×
  主な用途: レート制限・認証エラーなどの失敗ログ・アラート・リカバリ

record8:
  Hook名: TeammateIdle
  タイミング: Agent Teamのチームメイトがアイドルに移行する直前
  Block:
  主な用途: アイドル前の品質ゲート(lint、ビルド成果物の確認など)

Hookの種類:コンテキスト・環境・拡張系

record1:
  Hook名: InstructionsLoaded
  タイミング: <code>CLAUDE.md</code> や <code>.claude/rules/*.md</code> がコンテキストに読み込まれたとき
  Block: ×
  主な用途: 監査ログ・コンプライアンス追跡・観測性

record2:
  Hook名: ConfigChange
  タイミング: セッション中に設定ファイルが変更されたとき
  Block:
  主な用途: 設定変更の検証・不正な変更のブロック

record3:
  Hook名: CwdChanged
  タイミング: 作業ディレクトリが変わったとき(<code>cd</code> コマンド実行時など)
  Block: ×
  主な用途: direnvなどによるリアクティブな環境管理

record4:
  Hook名: FileChanged
  タイミング: 監視対象ファイルがディスク上で変更されたとき
  Block: ×
  主な用途: ファイル変更の検知・環境再読み込み

record5:
  Hook名: WorktreeCreate
  タイミング: worktree作成時
  Block:
  主な用途: デフォルトのgit動作を置き換えるカスタムworktree作成

record6:
  Hook名: WorktreeRemove
  タイミング: セッション終了時や SubAgent 完了時にworktreeが削除されるとき
  Block: ×
  主な用途: worktreeクリーンアップ

record7:
  Hook名: PreCompact
  タイミング: コンテキスト圧縮前
  Block:
  主な用途: 圧縮前のバックアップ・圧縮の防止

record8:
  Hook名: PostCompact
  タイミング: コンテキスト圧縮の完了後
  Block: ×
  主な用途: 圧縮後の状態ログ

record9:
  Hook名: Elicitation
  タイミング: MCPサーバがツール呼び出し中にユーザ入力を要求したとき
  Block:
  主な用途: MCPのelicitationリクエストのインターセプト・自動応答

record10:
  Hook名: ElicitationResult
  タイミング: ユーザがMCPのelicitationに応答した後、サーバへ返却される前
  Block:
  主な用途: ユーザ応答の上書き・修正

Hook Exit Code

Hook コマンドの exit code が,Claude Code の次の挙動(続行・ブロック・無視)を決める

record1:
  Exit code: 0
  意味: 
    - 成功(処理続行)
  挙動・効果:
    - stdout の JSON output フィールドを解釈.<span class="regmonkey-bold">JSON は exit 0 のときだけ処理される</span>
    - 多くのイベントでは stdout はデバッグログのみに書かれ,transcript には出ない
    - 例外:<code>UserPromptSubmit</code>・<code>UserPromptExpansion</code>・<code>SessionStart</code> は stdout が <span class="regmonkey-bold">Claude のコンテキストとして読み込まれ</span>,モデルが見て応答に反映できる

record2:
  Exit code: 2
  意味: 
    - ブロッキングエラー
  挙動・効果:
    - stdout(JSON も含めて)は<span class="regmonkey-bold">無視される</span>
    - stderr の内容が Claude にエラーメッセージとしてフィードバックされる
    - イベント別効果:<code>PreToolUse</code> はツール呼び出しをブロック,<code>UserPromptSubmit</code> はプロンプトを拒否,等

record3:
  Exit code: その他
  意味: 
    - 非ブロッキングエラー
  挙動・効果:
    - transcript に「<code>&lt;hook name&gt; hook error</code>」通知+stderr の1行目が表示される(<code>--debug</code> なしで原因確認できる)
    - 実行は<span class="regmonkey-bold">継続</span>される(ブロックしない)
    - 完全な stderr はデバッグログに記録される

Skills vs MCP servers

  • 5つの機能の全体像

  • Skills vs CLAUDE.md

  • Skills vs Subagents

  • Skills vs Hooks

  • Skills vs MCP servers

指示・知識を与えるSkills と 外部ツールを提供するMCP

SkillsはClaudeに「どう振る舞うか」を教える.MCPは「使える道具」を増やす.

提供するものが本質的に異なる

  • Skillsは指示・知識・手順をセッションに追加する:振る舞いの方針
  • MCPは外部ツール・統合をClaudeに接続する:実行可能な道具

MCP servers を使う場面

  • 外部システムとの統合
    • 例:Jira・Slack・社内DBへのアクセス
  • 標準ツールにない追加機能を提供
  • データ取得・操作のためのAPI接続

Skills を使う場面

  • どう書くか」「どう判断するか」の手順
    • 例:自社のスライド作法・レビュー基準
  • 特定領域の専門知識の付与
  • ツールではなく振る舞いの指示

MCPは外部システムとAIアプリケーションの接続プロトコル

MCP HOST(AIアプリケーション)が MCP Client を介してローカルおよびリモートの MCP Server に接続し,さらにブラウザ・DB・GitHub 等の外部システムに到達するアーキテクチャ図

Summary

record1:
  category: CLAUDE.md
  rule:
    - <span class="regmonkey-bold">常時ロード</span>.プロジェクト共通の恒久ルールを置く
  actions:
    - 全セッションに必ず適用される標準・制約・スタイルを記述
    - セッションによって不要になる詳細は <code>Skills</code> に逃がす

record2:
  category: Skills
  rule:
    - <span class="regmonkey-bold">オンデマンドロード</span>.タスク特有の専門知識を必要時に注入する
  actions:
    - PRレビュー・スライド作成など「特定タスク向け」の手順を整理
    - description で発火条件を明示しマッチしたときだけセッションに合流
    - 全セッションに常駐させると邪魔な詳細・チェックリストはここに置く

record3:
  category: Subagents
  rule:
    - <span class="regmonkey-bold">隔離コンテキスト</span>で作業を委譲し結果だけ受け取る
  actions:
    - 広範な検索・調査・並列タスクを別コンテキストで実行
    - 委譲作業に異なるツール権限を与えたいときに有効
    - 本セッションのコンテキストを汚さず結果のみ回収する

record4:
  category: Hooks
  rule:
    - <span class="regmonkey-bold">イベント駆動</span>.ファイル保存・ツール呼び出しで自動発火
  actions:
    - 保存時のlint・formatなど「毎回走らせたい」処理を自動化
    - 特定ツール呼び出し前の事前検証・ガードレール
    - Claudeの行動に対する自動の副作用を仕込む

record5:
  category: MCP<br>servers
  rule:
    - <span class="regmonkey-bold">外部ツール・統合</span>を提供.Skillsとは異なるカテゴリ
  actions:
    - Jira・Slack・社内DBなど外部システムへの接続
    - 標準にない追加ツール・API機能を Claude に与える
    - 「振る舞い」ではなく「使える道具」を増やす目的で導入

record6:
  category: 組み合わせの<br>原則
  rule:
    - 1機能に詰め込まず<span class="regmonkey-bold">専門領域ごとに分担</span>させる
  actions:
    - CLAUDE.mdは恒久ルール・Skillsはタスク特有・Subagentsは委譲
    - Hooksはイベント自動処理・MCPは外部統合
    - 重ねて構成しそれぞれの強みが活きる配置を取る