Claude Code 解説書 — Thread 5 of 8
Skills — 再利用可能な知識とワークフロー
マークダウンひとつで Claude の能力を拡張する
スレッド4で概観した6つの拡張レイヤーのうち、最も手軽に始められるのがSkillsだ。 CLAUDE.mdが「プロジェクト全体の指示書」だったのに対し、Skillsは特定の知識やワークフローを再利用可能なモジュールとして切り出す仕組みである。
たとえば「デプロイ手順」「PRレビューの観点」「コード説明のフォーマット」といったものを一度スキルとして定義すれば、プロジェクトやチームをまたいで何度でも呼び出せる。 本スレッドでは、スキルの設計思想から実践的な作成方法、チームへの展開まで一通り扱う。
前提知識:スレッド4で解説した拡張レイヤーの全体像、特にCLAUDE.md・Skills・MCPの違いを把握していると理解がスムーズになる。スレッド2のエージェンティックループ(AIが「調査→実行→検証」を自律的に繰り返す動作サイクル)の知識も前提となる。
Section 5.1
5.1Skillとは何か — 概念と位置づけ
Skillとは、SKILL.mdというマークダウンファイルに記述された「知識・手順・ルールのパッケージ」だ。 Claude Codeはこのファイルを読み込み、指示に従って行動する。核心は単純で、「Claudeへの指示をファイル化して再利用できるようにする」ということである。
口頭で毎回同じ説明をする代わりに、一度書けばスラッシュコマンド(/skill-name)やClaudeの自動判断で何度でも呼び出せる。
SkillsはAgent Skillsというオープン標準に準拠しており、Claude Code固有の機能ではなく複数のAIツール間で互換性がある。Claude Codeはこの標準に加え、呼び出し制御やサブエージェント実行などの独自拡張を追加している。
CLAUDE.md との違い
両者は「マークダウンでClaudeに指示を与える」という点で似ているが、設計目的が異なる。
| 観点 | CLAUDE.md | Skill |
|---|---|---|
| 役割 | プロジェクト全体の規約・文脈 | 特定タスクの知識・手順 |
| 読み込み | セッション開始時に常時読み込み | 必要な時だけ読み込み |
| 呼び出し | 自動(常に適用) | /name or Claudeの自動判断 |
| スコープ | プロジェクト単位 | 個人・プロジェクト・組織単位 |
| 構成 | 単一ファイル | ディレクトリ(補助ファイル可) |
たとえば
CLAUDE.mdに「テストは必ずpytestで書くこと」と記載し、Skillとして「/fix-issue:GitHubのIssueを読んで修正しテストを書きPRを出す手順」を作成する。前者はすべてのタスクに適用されるルール、後者は特定のワークフローを実行する手順書だ。
図5-1:Skillは通常description(説明文)だけがコンテキストに常駐し、トリガーされて初めて全文が読み込まれる
Section 5.2
5.2バンドルスキル — 最初から使える組み込みスキル
Claude Codeにはあらかじめ組み込まれたバンドルスキル(bundled skills)が付属しており、インストール直後から利用できる。 これらはビルトインコマンド(/helpや/compactなど固定ロジックを実行するもの)とは異なり、プロンプトベースで動作する。つまり、Claudeに詳細な手順書(playbook)を渡し、Claudeがツールを駆使して柔軟に作業するという設計だ。
| スキル | 用途 |
|---|---|
/batch <指示> | 大規模コード変更を並列実行する。コードベースを調査し、5〜30の独立した作業単位に分解。承認後、各単位をgit worktree(作業ツリー)で並列処理し、テスト実行とPR作成まで行う |
/claude-api | Claude API のリファレンスを読み込む。プロジェクトの言語に合わせたSDK情報、ツール使用、ストリーミング等のガイダンスを提供。anthropicパッケージのインポートを検出すると自動起動 |
/debug [説明] | 現在のセッションのデバッグログを読み、問題を分析する。任意で問題の説明を渡すと、その観点に絞って調査 |
/loop [間隔] <指示> | プロンプトを定期的に繰り返し実行する。デプロイの監視、PRの状況確認などに使用 |
/simplify [焦点] | 直近の変更ファイルをコード品質・再利用性・効率性の3観点で並列レビューし、問題を修正。焦点を渡すと特定の観点に絞れる |
たとえば
/batch src/ 以下のすべてのコンポーネントを Solid から React に移行して と実行すると、Claudeはまずコードベースを走査してコンポーネント一覧を作成し、依存関係を分析して独立した作業単位に分割する。各単位は別々のgit worktreeで並列処理され、テスト実行・PR作成まで自動で行われる。
ビルトインコマンドとの違い:/helpや/compactは固定ロジックを直接実行する「ビルトインコマンド」。一方バンドルスキルはClaude自身がプロンプトに基づいて判断・行動するため、コードベースに適応した柔軟な動きが可能だ。
Section 5.3
5.3カスタムスキルの作成
バンドルスキルだけでは足りないとき、自分でスキルを作成できる。 スキルはディレクトリ + SKILL.mdの構成で、SKILL.mdの先頭にYAMLフロントマター(メタデータ記述領域)、その後にマークダウンで指示を書く。
5.3.1 最小構成 — はじめてのスキル
以下は、コードを図解と比喩で説明するスキルの例だ。
# ファイル: ~/.claude/skills/explain-code/SKILL.md
--- name: explain-code description: Explains code with visual diagrams and analogies. Use when explaining how code works, teaching about a codebase, or when the user asks "how does this work?" --- When explaining code, always include: 1. **Start with an analogy**: Compare the code to something from everyday life 2. **Draw a diagram**: Use ASCII art to show the flow, structure, or relationships 3. **Walk through the code**: Explain step-by-step what happens 4. **Highlight a gotcha**: What's a common mistake or misconception? Keep explanations conversational. For complex concepts, use multiple analogies.
これだけで/explain-codeコマンドが使えるようになる。 さらに、descriptionにマッチする質問(「このコードどう動くの?」など)をすると、Claudeが自動的にこのスキルを読み込んで使う。
5.3.2 SKILL.md の構造
図5-2:SKILL.mdはフロントマター(設定)とマークダウン本文(指示)の2パートで構成される
5.3.3 フロントマター全フィールド
| フィールド | 必須 | 説明 |
|---|---|---|
name | いいえ | スキル名。省略時はディレクトリ名。小文字・数字・ハイフンのみ(最大64文字) |
description | 推奨 | スキルの用途説明。Claudeの自動呼び出し判定に使われる |
argument-hint | いいえ | オートコンプリート時に表示される引数のヒント |
disable-model-invocation | いいえ | trueでClaude自動呼び出しを禁止。手動実行専用にする |
user-invocable | いいえ | falseで/メニューから非表示。Claude専用の背景知識向け |
allowed-tools | いいえ | スキル実行時に許可なしで使えるツールを制限する |
model | いいえ | スキル実行時に使用するモデルを指定 |
context | いいえ | forkでサブエージェントとして実行 |
agent | いいえ | context: fork時のサブエージェント種別 |
hooks | いいえ | スキルのライフサイクルに紐づくフック(自動処理)を定義 |
5.3.4 スキルの2つの型 — リファレンス型とタスク型
スキルの内容は大きく2つの型に分類できる。これを意識すると設計が明確になる。
図5-3:リファレンス型はClaudeの「知識」を拡張し、タスク型はClaudeの「行動」を定義する
たとえば
リファレンス型:api-conventionsスキルに「RESTful命名規約を使う」「エラーフォーマットを統一する」と書いておけば、ClaudeはAPI実装時に自動でこの規約を参照する。
タスク型:deployスキルに「1. テスト実行 → 2. ビルド → 3. デプロイ先にプッシュ」と書き、disable-model-invocation: trueを設定。ユーザーが/deployと明示的に打った時だけ実行される。
Section 5.4
5.4スキルの配置と優先順位
スキルをどこに置くかで、誰がそのスキルを使えるかが決まる。
| スコープ | パス | 適用範囲 |
|---|---|---|
| Enterprise(組織) | 管理者設定で配布 | 組織内の全ユーザー |
| Personal(個人) | ~/.claude/skills/<name>/SKILL.md | 自分の全プロジェクト |
| Project | .claude/skills/<name>/SKILL.md | そのプロジェクトのみ |
| Plugin | <plugin>/skills/<name>/SKILL.md | プラグイン有効化場所 |
同名のスキルが複数のスコープに存在する場合、Enterprise > Personal > Projectの優先順位で上位が勝つ。 Pluginスキルはplugin-name:skill-nameという名前空間を使うため、他のレベルと衝突しない。
図5-4:同名スキルが競合した場合、上位スコープが優先される
モノレポでの自動検出
サブディレクトリにある.claude/skills/も自動的に検出される。 たとえばpackages/frontend/のファイルを編集中であれば、packages/frontend/.claude/skills/にあるスキルも利用可能になる。モノレポ(monorepo:複数パッケージを1リポジトリで管理する構成)に適した設計だ。
ディレクトリ構成
my-skill/ ├── SKILL.md # メイン指示(必須) ├── template.md # Claudeが埋めるテンプレート ├── examples/ │ └── sample.md # 期待されるフォーマットの例 └── scripts/ └── validate.sh # Claudeが実行するスクリプト
SKILL.mdのみが必須で、その他の補助ファイルは任意だ。 補助ファイルがある場合は、SKILL.md内からリンクしておくとClaudeが必要に応じて読み込める。 SKILL.mdは500行以内に収め、詳細なリファレンスは別ファイルに分離するのが推奨される。
Section 5.5
5.5呼び出し制御 — 誰がスキルを起動するか
デフォルトでは、ユーザーもClaudeもスキルを呼び出せる。 しかし「デプロイはClaude任せにしたくない」「レガシーシステムの知識はClaudeが判断して使えばいい」といったケースがある。 2つのフロントマターフィールドでこれを制御する。
図5-5:3パターンの呼び出し制御。コンテキストコストと安全性のトレードオフを設計する
disable-model-invocation: trueは、コンテキスト節約の面でも重要だ。 このフラグを設定したスキルはdescriptionすらコンテキストに含まれないため、大量のスキルがある環境でトークン消費を抑えられる。
コンテキスト予算:スキルのdescriptionは全体で「コンテキストウィンドウの2%」(フォールバックは16,000文字)まで読み込まれる。スキル数が多く予算を超えた場合は一部のスキルが除外される。/contextで除外警告を確認でき、環境変数SLASH_COMMAND_TOOL_CHAR_BUDGETで上限を変更できる。
Section 5.6
5.6引数と動的コンテキスト
5.6.1 $ARGUMENTS による引数渡し
スキル実行時に渡されたテキストは$ARGUMENTSプレースホルダーで受け取れる。
--- name: fix-issue description: Fix a GitHub issue disable-model-invocation: true --- Fix GitHub issue $ARGUMENTS following our coding standards. 1. Read the issue description 2. Understand the requirements 3. Implement the fix 4. Write tests 5. Create a commit
/fix-issue 123と実行すると、Claudeには「Fix GitHub issue 123 following our coding standards...」というテキストが渡される。 個別の引数にアクセスするには$ARGUMENTS[N](0ベースインデックス)または省略形の$Nを使う。
たとえば
/migrate-component SearchBar React Vueと実行すると、$0=SearchBar、$1=React、$2=Vueに置換される。
5.6.2 文字列置換変数
| 変数 | 内容 |
|---|---|
$ARGUMENTS | スキル呼び出し時に渡された全引数 |
$ARGUMENTS[N] / $N | N番目の引数(0ベース) |
${CLAUDE_SESSION_ID} | 現在のセッションID。ログファイル名やセッション追跡に利用 |
${CLAUDE_SKILL_DIR} | SKILL.mdが存在するディレクトリの絶対パス。同梱スクリプトの参照に使う |
5.6.3 動的コンテキスト注入(!コマンド構文)
!`command`構文を使うと、スキルの内容がClaudeに送られる前にシェルコマンドを実行し、その出力をスキル本文に埋め込める。これは「前処理」であり、Claude自身が実行するのではない。
--- name: pr-summary description: Summarize changes in a pull request context: fork agent: Explore allowed-tools: Bash(gh *) --- ## Pull request context - PR diff: !`gh pr diff` - PR comments: !`gh pr view --comments` - Changed files: !`gh pr diff --name-only` ## Your task Summarize this pull request...
このスキルを実行すると、まずgh pr diff等のコマンドが先に走り、その出力結果がスキル本文に差し込まれた状態でClaudeに渡される。
図5-6:!`command`は前処理としてシェルを実行し、Claudeには展開後のテキストだけが渡される
Section 5.7
5.7サブエージェント実行 — context: fork
context: forkをフロントマターに設定すると、スキルはサブエージェント(メインの会話から分離された独立プロセス)として実行される。サブエージェントは会話履歴を持たず、SKILL.mdの内容をプロンプトとして受け取って作業し、結果の要約だけをメインの会話に返す。
この分離が有効な場面は明確だ。大量のファイル読み込みやコマンド実行を行うタスク型スキルでは、メインの会話コンテキストを消費せずに済む。一方、リファレンス型スキルは会話の文脈と合わせて使いたいので、context: forkは不適切だ。
図5-7:リファレンス型はインラインで文脈と統合、タスク型はforkで独立実行が基本方針
agentフィールドで、サブエージェントの種類を指定できる。 組み込みエージェント(Explore=読み取り専用探索、Plan=計画立案、general-purpose=汎用)に加え、.claude/agents/に定義したカスタムエージェントも指定可能だ。
--- name: deep-research description: Research a topic thoroughly context: fork agent: Explore --- Research $ARGUMENTS thoroughly: 1. Find relevant files using Glob and Grep 2. Read and analyze the code 3. Summarize findings with specific file references
注意:context: forkはタスク(やるべきこと)が明記されたスキルでのみ意味を持つ。「この規約に従え」だけのガイドラインをforkで実行しても、サブエージェントは指示だけ受け取ってやるべき作業がなく、空振りに終わる。
Section 5.8
5.8ツール制限とパーミッション
allowed-toolsフィールドで、スキル実行中にClaudeが使えるツールを限定できる。これにより、スキルの安全性を設計段階でコントロールする。
--- name: safe-reader description: Read files without making changes allowed-tools: Read, Grep, Glob ---
このスキルが有効な間、Claudeはファイル読み取り系のツールだけを許可なしで使え、書き込み系のツールは使えない。
パーミッションルールによるスキルアクセス制御
/permissionsコマンドで、Claudeがどのスキルを呼び出せるかをさらに細かく制御できる。
| 設定 | 効果 |
|---|---|
Skillを拒否リストに追加 | Claudeのスキル呼び出しを全面禁止 |
Skill(commit)を許可 | commitスキルのみ許可 |
Skill(deploy *)を拒否 | deploy で始まるスキルを拒否(前方一致) |
Section 5.9
5.9チームでのスキル共有と配布
スキルの共有方法は、対象範囲に応じて3つある。
図5-8:対象範囲に応じた3つの共有手段
最も手軽なのはプロジェクト共有だ。.claude/skills/をリポジトリにコミットするだけで、git pullしたチームメンバー全員が同じスキルを使える。 スキルの更新もGitのマージフローに乗るため、レビューや差分管理が自然に行える。
Section 5.10
5.10実践例 — ビジュアル出力を生成するスキル
スキルはマークダウンの指示だけでなく、スクリプトをバンドルして実行させることもできる。 公式ドキュメントで紹介されている「コードベースビジュアライザー」を例に、スキルの設計パターンを見てみよう。
構成
~/.claude/skills/codebase-visualizer/ ├── SKILL.md # 指示:スクリプトの実行方法と出力説明 └── scripts/ └── visualize.py # Pythonスクリプト:HTMLツリービュー生成
SKILL.md の内容
--- name: codebase-visualizer description: Generate an interactive collapsible tree visualization of your codebase. Use when exploring a new repo, understanding project structure, or identifying large files. allowed-tools: Bash(python *) --- # Codebase Visualizer Run the visualization script from your project root: ```bash python ~/.claude/skills/codebase-visualizer/scripts/visualize.py . ``` This creates `codebase-map.html` and opens it in your browser.
ポイントは3つだ。
allowed-tools を限定:Bash(python *)でPythonの実行のみ許可し、他の危険なコマンドは実行できないようにしている
スクリプトを補助ファイルとして同梱:SKILL.md自体は短く保ち、重い処理はPythonスクリプトに委譲している
${CLAUDE_SKILL_DIR}で参照可能:スクリプトのパスをハードコードする代わりに、この変数を使えば配置場所に依存しない設計になる
このパターンは、依存グラフの可視化、テストカバレッジレポート、APIドキュメント生成、データベーススキーマの図示など、あらゆる「コードを分析して視覚的な出力を生成する」用途に応用できる。
Section 5.11
5.11トラブルシューティング
スキルが起動しない
descriptionを確認:ユーザーが自然に使うキーワードがdescriptionに含まれているか。Claudeはこのテキストをもとに起動を判断する
認識確認:「What skills are available?」とClaudeに聞き、一覧にスキルが表示されるか確認する
直接呼び出し:/skill-nameで手動起動してみる。これで動くなら、descriptionの精度が問題
スキルが意図せず起動する
descriptionを狭める:広すぎる説明は関係ないタスクにもマッチしてしまう
手動専用にする:disable-model-invocation: trueを追加して自動起動を禁止する
スキルが認識されない
スキルのdescriptionがコンテキスト予算を超えると除外される。/contextで警告を確認し、必要に応じてSLASH_COMMAND_TOOL_CHAR_BUDGETで上限を引き上げる。 また、不要なスキルにdisable-model-invocation: trueを設定して予算を空けるのも有効だ。
Section 5.12
5.12まとめ — スキル設計のチェックリスト
図5-9:スキルを設計する際の判断フロー
本スレッドの内容を振り返る。
| トピック | 要点 |
|---|---|
| Skillの本質 | SKILL.mdに書いた指示をモジュール化し、再利用可能にする仕組み |
| バンドルスキル | /batch, /simplify等、プロンプトベースで柔軟に動作する組み込みスキル |
| 2つの型 | リファレンス型(知識提供)とタスク型(手順実行)で設計指針が異なる |
| 配置と優先順位 | Enterprise > Personal > Project。置き場所がスコープを決める |
| 呼び出し制御 | disable-model-invocationとuser-invocableの組み合わせで3パターン |
| 動的コンテキスト | !`command`で外部データをスキルに注入できる |
| サブエージェント実行 | context: forkでコンテキスト分離。タスク型に有効 |
| チーム共有 | .claude/skills/をGitコミット、Plugin化、またはEnterprise配布 |
次のステップ:スレッド6では、Skillsの「内部知識の拡張」に対して、外部サービスへの接続を担うMCP(Model Context Protocol)を扱う。SkillsとMCPを組み合わせることで、Claude Codeの行動範囲は大きく広がる。
homulaの支援体制
homulaは、AIエージェントの戦略策定・PoC・実装・運用・内製化までを一気通貫で支援するAIインテグレーターです。Claude CodeのSkills設計やMCP連携を含む、エンタープライズ向けAIエージェント構築をお手伝いします。
ブートキャンプ(3-5日)
AIエージェントの動くプロトタイプを最短5日で構築。Skills設計・MCP接続を含む技術検証とROI試算を提供。
導入パッケージ(2-4ヶ月)
設計から本番運用まで一気通貫。エンタープライズ要件(監査・権限管理・閉域網)を満たすAIエージェント基盤を構築。
Series Navigation
← 前の章
第4章:拡張レイヤー概論
Coming Soon
次の章 →
第6章:MCP — 外部サービスとの接続
Coming Soon
他シリーズの関連ガイド
よくある質問
CLAUDE.mdはプロジェクト全体に常時適用されるルール・規約を書く場所です。Skillは特定タスクの知識・手順をモジュール化し、必要な時だけ読み込みます。たとえば「テストはpytestで書く」はCLAUDE.md、「GitHubのIssueを修正してPRを出す手順」はSkillに書きます。
まずdescriptionを確認してください。Claudeはこのテキストをもとに起動を判断します。「What skills are available?」とClaudeに聞いて一覧に表示されるか確認し、/skill-nameで手動起動を試みてください。それでも動かない場合は、コンテキスト予算を超えている可能性があるため/contextコマンドで確認します。
大量のファイル読み込みやコマンド実行を伴うタスク型スキルに有効です。メイン会話のコンテキストを消費せず、サブエージェントが独立して作業し、結果の要約だけを返します。一方、リファレンス型スキル(規約・知識の提供)は会話文脈と統合する必要があるため、forkは不適切です。
.claude/skills/ディレクトリをGitリポジトリにコミットする方法が最も手軽です。git pullしたチームメンバー全員が同じスキルを使えます。スキルの更新もGitのマージフローに乗るため、レビューや差分管理が自然に行えます。
/helpや/compactは固定ロジックを実行する「ビルトインコマンド」です。一方/batchや/simplify等のバンドルスキルはClaude自身がプロンプトに基づいて判断・行動するため、コードベースに適応した柔軟な動きが可能です。