SpyBara
Go Premium

skills.md 2026-05-02 18:14 UTC to 2026-05-04 22:58 UTC

This page contains 728 additions and 0 deletions.

2026
Mon 4 22:58 Thu 7 22:59 Sun 10 23:03 Wed 13 23:01 Sun 17 01:01 Mon 18 23:59

スキルで Claude を拡張する

Claude Code でスキルを作成、管理、共有して Claude の機能を拡張します。カスタムコマンドとバンドルされたスキルが含まれます。

スキルは Claude ができることを拡張します。SKILL.md ファイルに指示を記述すると、Claude はそれをツールキットに追加します。Claude は関連する場合にスキルを使用するか、/skill-name で直接呼び出すことができます。

同じプレイブック、チェックリスト、または複数ステップの手順をチャットに何度も貼り付けるときや、CLAUDE.md のセクションが事実ではなく手順に成長したときにスキルを作成します。CLAUDE.md コンテンツとは異なり、スキルの本体は使用されるときにのみ読み込まれるため、長いリファレンス資料は必要になるまでほぼコストがかかりません。

Claude Code スキルは Agent Skills オープンスタンダードに従い、複数の AI ツール全体で機能します。Claude Code は 呼び出し制御、サブエージェント実行、動的コンテキスト注入などの追加機能でスタンダードを拡張します。

バンドルされたスキル

Claude Code には、すべてのセッションで利用可能な一連のバンドルされたスキルが含まれています。これには /simplify、/batch、/debug、/loop、および /claude-api が含まれます。固定ロジックを直接実行する組み込みコマンドとは異なり、バンドルされたスキルはプロンプトベースです。Claude に詳細なプレイブックを提供し、ツールを使用して作業を調整させます。他のスキルと同じ方法で呼び出します。/ の後にスキル名を入力します。

バンドルされたスキルは コマンドリファレンスに組み込みコマンドと一緒にリストされており、目的列にスキルとマークされています。

はじめに

最初のスキルを作成する

この例は、Claude に視覚的な図と類推を使用してコードを説明するように教えるスキルを作成します。デフォルトのフロントマターを使用するため、何かの仕組みを尋ねるときに Claude が自動的にスキルを読み込むか、/explain-code で直接呼び出すことができます。

1

スキルディレクトリを作成する

個人用スキルフォルダにスキル用のディレクトリを作成します。個人用スキルはすべてのプロジェクト全体で利用可能です。

mkdir -p ~/.claude/skills/explain-code
2

SKILL.md を記述する

すべてのスキルには SKILL.md ファイルが必要です。2 つの部分があります。YAML フロントマター(--- マーカー間)は Claude にスキルをいつ使用するかを伝え、マークダウンコンテンツはスキルが呼び出されるときに Claude が従う指示です。ディレクトリ名は /slash-command になり、description は Claude がスキルを自動的に読み込むかどうかを決定するのに役立ちます。

~/.claude/skills/explain-code/SKILL.md を作成します:

---
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.
3

スキルをテストする

2 つの方法でテストできます:

説明に一致するものを尋ねることで Claude に自動的に呼び出させます:

How does this code work?

またはスキル名で直接呼び出します:

/explain-code src/auth/login.ts

どちらの方法でも、Claude の説明に類推と ASCII 図が含まれるはずです。

スキルが存在する場所

スキルを保存する場所によって、誰がそれを使用できるかが決まります:

場所 パス 適用対象
Enterprise 管理設定を参照 組織内のすべてのユーザー
Personal ~/.claude/skills/<skill-name>/SKILL.md すべてのプロジェクト
Project .claude/skills/<skill-name>/SKILL.md このプロジェクトのみ
Plugin <plugin>/skills/<skill-name>/SKILL.md プラグインが有効な場所

スキルがレベル全体で同じ名前を共有する場合、enterprise は personal をオーバーライドし、personal はプロジェクトをオーバーライドします。プラグインスキルは plugin-name:skill-name 名前空間を使用するため、他のレベルと競合することはできません。.claude/commands/ にファイルがある場合、それらは同じように機能しますが、スキルとコマンドが同じ名前を共有する場合、スキルが優先されます。

ライブ変更検出

Claude Code はスキルディレクトリのファイル変更を監視します。~/.claude/skills/、プロジェクト .claude/skills/、または --add-dir ディレクトリ内の .claude/skills/ の下でスキルを追加、編集、または削除すると、再起動せずに現在のセッション内で有効になります。セッション開始時に存在しなかった最上位のスキルディレクトリを作成するには、Claude Code を再起動して新しいディレクトリを監視できるようにする必要があります。

ネストされたディレクトリからの自動検出

サブディレクトリ内のファイルを操作する場合、Claude Code はネストされた .claude/skills/ ディレクトリからスキルを自動的に検出します。たとえば、packages/frontend/ 内のファイルを編集している場合、Claude Code は packages/frontend/.claude/skills/ でもスキルを探します。これはパッケージが独自のスキルを持つモノレポセットアップをサポートします。

各スキルは SKILL.md をエントリポイントとするディレクトリです:

my-skill/
├── SKILL.md           # Main instructions (required)
├── template.md        # Template for Claude to fill in
├── examples/
│   └── sample.md      # Example output showing expected format
└── scripts/
    └── validate.sh    # Script Claude can execute

SKILL.md はメイン指示を含み、必須です。他のファイルはオプションで、より強力なスキルを構築できます。Claude が入力するテンプレート、期待される形式を示す出力例、Claude が実行できるスクリプト、または詳細なリファレンスドキュメント。SKILL.md からこれらのファイルを参照して、Claude が各ファイルの内容と読み込むタイミングを知るようにします。詳細については、サポートファイルを追加するを参照してください。

追加ディレクトリからのスキル

--add-dir フラグはファイルアクセスを許可しますが、スキルは例外です。追加されたディレクトリ内の .claude/skills/ は自動的に読み込まれます。ライブ変更検出を参照して、セッション中に編集がどのように取得されるかを確認してください。

その他の .claude/ 設定(サブエージェント、コマンド、出力スタイル)は追加ディレクトリから読み込まれません。読み込まれるもの、読み込まれないもの、および設定をプロジェクト全体で共有するための推奨方法の完全なリストについては、例外テーブルを参照してください。

スキルを設定する

スキルは SKILL.md の上部の YAML フロントマターと、その後に続くマークダウンコンテンツを通じて設定されます。

スキルコンテンツのタイプ

スキルファイルには任意の指示を含めることができますが、それらを呼び出す方法を考えることは、含める内容をガイドするのに役立ちます:

リファレンスコンテンツ は Claude が現在の作業に適用する知識を追加します。規約、パターン、スタイルガイド、ドメイン知識。このコンテンツはインラインで実行されるため、Claude は会話コンテキストと一緒に使用できます。

---
name: api-conventions
description: API design patterns for this codebase
---

When writing API endpoints:
- Use RESTful naming conventions
- Return consistent error formats
- Include request validation

タスクコンテンツ は Claude に特定のアクション(デプロイ、コミット、コード生成など)のステップバイステップの指示を提供します。これらは多くの場合、Claude が実行を決定するのではなく、/skill-name で直接呼び出したいアクションです。disable-model-invocation: true を追加して、Claude が自動的にトリガーするのを防ぎます。

---
name: deploy
description: Deploy the application to production
context: fork
disable-model-invocation: true
---

Deploy the application:
1. Run the test suite
2. Build the application
3. Push to the deployment target

SKILL.md には何でも含めることができますが、スキルを呼び出す方法(ユーザー、Claude、またはその両方)と実行場所(インラインまたはサブエージェント)を考えることは、含める内容をガイドするのに役立ちます。複雑なスキルの場合、サポートファイルを追加することで、メインスキルに焦点を当てることもできます。

フロントマターリファレンス

マークダウンコンテンツを超えて、SKILL.md ファイルの上部の --- マーカー間の YAML フロントマターフィールドを使用してスキルの動作を設定できます:

---
name: my-skill
description: What this skill does
disable-model-invocation: true
allowed-tools: Read Grep
---

Your skill instructions here...

すべてのフィールドはオプションです。Claude がスキルをいつ使用するかを知るために、description のみが推奨されます。

フィールド 必須 説明
name いいえ スキルの表示名。省略した場合、ディレクトリ名を使用します。小文字、数字、ハイフンのみ(最大 64 文字)。
description 推奨 スキルが何をするか、いつ使用するか。Claude はこれを使用してスキルを適用するかどうかを決定します。省略した場合、マークダウンコンテンツの最初の段落を使用します。主要なユースケースを前置きしてください。スキルリストのコンテキスト使用量を削減するため、description と when_to_use の組み合わせテキストは 1,536 文字で短縮されます。
when_to_use いいえ Claude がスキルを呼び出すべき場合の追加コンテキスト(トリガーフレーズやリクエスト例など)。スキルリストの description に追加され、1,536 文字の上限にカウントされます。
argument-hint いいえ 予想される引数を示すためにオートコンプリート中に表示されるヒント。例:[issue-number] または [filename] [format]。
arguments いいえ スキルコンテンツの $name 置換用の名前付き位置引数。スペース区切り文字列または YAML リストを受け入れます。名前は順序で位置にマップされます。
disable-model-invocation いいえ Claude がこのスキルを自動的に読み込むのを防ぐには true に設定します。/name で手動でトリガーするワークフロー用です。また、スキルがサブエージェントにプリロードされるのを防ぎます。デフォルト:false。
user-invocable いいえ / メニューから非表示にするには false に設定します。ユーザーが直接呼び出すべきではないバックグラウンド知識用です。デフォルト:true。
allowed-tools いいえ このスキルがアクティブな場合、Claude が許可を求めずに使用できるツール。スペース区切り文字列または YAML リストを受け入れます。
model いいえ このスキルがアクティブな場合に使用するモデル。オーバーライドは現在のターンの残りに適用され、設定に保存されません。セッションモデルは次のプロンプトで再開されます。/modelと同じ値を受け入れるか、アクティブなモデルを保持するために inherit を受け入れます。
effort いいえ 努力レベル(このスキルがアクティブな場合)。セッション努力レベルをオーバーライドします。デフォルト:セッションから継承。オプション:low、medium、high、xhigh、max。利用可能なレベルはモデルに依存します。
context いいえ フォークされたサブエージェントコンテキストで実行するには fork に設定します。
agent いいえ context: fork が設定されている場合に使用するサブエージェントタイプ。
hooks いいえ このスキルのライフサイクルにスコープされたフック。設定形式については、スキルとエージェントのフックを参照してください。
paths いいえ このスキルがアクティブ化されるタイミングを制限する Glob パターン。カンマ区切り文字列または YAML リストを受け入れます。設定されている場合、Claude はパターンに一致するファイルを操作する場合にのみ、スキルを自動的に読み込みます。パス固有のルールと同じ形式を使用します。
shell いいえ このスキルの !`command` および ```! ブロックに使用するシェル。bash(デフォルト)または powershell を受け入れます。powershell を設定すると、Windows 上で PowerShell 経由でインラインシェルコマンドが実行されます。CLAUDE_CODE_USE_POWERSHELL_TOOL=1 が必要です。

利用可能な文字列置換

スキルはスキルコンテンツの動的値の文字列置換をサポートします:

変数 説明
$ARGUMENTS スキルを呼び出すときに渡されたすべての引数。$ARGUMENTS がコンテンツに存在しない場合、引数は ARGUMENTS: <value> として追加されます。
$ARGUMENTS[N] 0 ベースのインデックスで特定の引数にアクセスします(例:最初の引数の場合は $ARGUMENTS[0])。
$N $ARGUMENTS[N] の短縮形(例:最初の引数の場合は $0、2 番目の引数の場合は $1)。
$name arguments フロントマターリストで宣言された名前付き引数。名前は順序で位置にマップされるため、arguments: [issue, branch] の場合、プレースホルダー $issue は最初の引数に展開され、$branch は 2 番目の引数に展開されます。
${CLAUDE_SESSION_ID} 現在のセッション ID。ログ、セッション固有のファイルの作成、またはスキル出力とセッションの相関付けに便利です。
${CLAUDE_EFFORT} 現在の努力レベル:low、medium、high、xhigh、または max。スキル指示をアクティブな努力設定に適応させるために使用します。
${CLAUDE_SKILL_DIR} スキルの SKILL.md ファイルを含むディレクトリ。プラグインスキルの場合、これはプラグインルートではなく、プラグイン内のスキルのサブディレクトリです。bash インジェクションコマンドでこれを使用して、現在の作業ディレクトリに関係なく、スキルにバンドルされたスクリプトまたはファイルを参照します。

インデックス付き引数はシェルスタイルのクォートを使用するため、複数単語の値をシングル引数として渡すためにクォートで囲みます。たとえば、/my-skill "hello world" second は $0 を hello world に、$1 を second に展開します。$ARGUMENTS プレースホルダーは常に、入力されたとおりの完全な引数文字列に展開されます。

置換を使用した例:

---
name: session-logger
description: Log activity for this session
---

Log the following to logs/${CLAUDE_SESSION_ID}.log:

$ARGUMENTS

サポートファイルを追加する

スキルはディレクトリ内に複数のファイルを含めることができます。これにより、SKILL.md は本質的なものに焦点を当てながら、Claude は必要な場合にのみ詳細なリファレンス資料にアクセスできます。大規模なリファレンスドキュメント、API 仕様、または例のコレクションは、スキルが実行されるたびにコンテキストに読み込む必要はありません。

my-skill/
├── SKILL.md (required - overview and navigation)
├── reference.md (detailed API docs - loaded when needed)
├── examples.md (usage examples - loaded when needed)
└── scripts/
    └── helper.py (utility script - executed, not loaded)

SKILL.md からサポートファイルを参照して、Claude が各ファイルの内容と読み込むタイミングを知るようにします:

## Additional resources

- For complete API details, see [reference.md](/anthropic/claude-code/history/docs/ja/2026-05-02-1814..2026-05-04-2258/reference/)
- For usage examples, see [examples.md](/anthropic/claude-code/history/docs/ja/2026-05-02-1814..2026-05-04-2258/examples/)

スキルを呼び出すユーザーを制御する

デフォルトでは、ユーザーと Claude の両方がスキルを呼び出すことができます。/skill-name を入力して直接呼び出すことができ、Claude は会話に関連する場合に自動的にスキルを読み込むことができます。2 つのフロントマターフィールドでこれを制限できます:

  • disable-model-invocation: true:ユーザーのみがスキルを呼び出すことができます。/commit、/deploy、/send-slack-message など、副作用があるワークフロー、またはタイミングを制御したいワークフロー用です。コードが準備完了に見えるため、Claude がデプロイを決定することは望ましくありません。

  • user-invocable: false:Claude のみがスキルを呼び出すことができます。アクションとして実行できないバックグラウンド知識用です。legacy-system-context スキルは古いシステムの仕組みを説明します。Claude はこれが関連する場合に知っているべきですが、/legacy-system-context はユーザーが実行する意味のあるアクションではありません。

この例は、ユーザーのみがトリガーできるデプロイスキルを作成します。disable-model-invocation: true フィールドは Claude が自動的に実行するのを防ぎます:

---
name: deploy
description: Deploy the application to production
disable-model-invocation: true
---

Deploy $ARGUMENTS to production:

1. Run the test suite
2. Build the application
3. Push to the deployment target
4. Verify the deployment succeeded

2 つのフィールドが呼び出しとコンテキスト読み込みにどのように影響するかは次のとおりです:

フロントマター ユーザーが呼び出せる Claude が呼び出せる コンテキストに読み込まれるタイミング
(デフォルト) はい はい 説明は常にコンテキストに含まれ、呼び出されるとフルスキルが読み込まれます
disable-model-invocation: true はい いいえ 説明はコンテキストに含まれず、ユーザーが呼び出すとフルスキルが読み込まれます
user-invocable: false いいえ はい 説明は常にコンテキストに含まれ、呼び出されるとフルスキルが読み込まれます

スキルコンテンツのライフサイクル

ユーザーまたは Claude がスキルを呼び出すと、レンダリングされた SKILL.md コンテンツは会話に単一のメッセージとして入力され、セッションの残りの間そこに留まります。Claude Code は後のターンでスキルファイルを再度読み込まないため、タスク全体を通じて適用すべきガイダンスを 1 回限りのステップではなく、スタンディング指示として記述します。

自動コンパクションは、トークン予算内で呼び出されたスキルを前方に運びます。会話が要約されてコンテキストを解放するとき、Claude Code は各スキルの最新の呼び出しを要約の後に再度アタッチし、最初の 5,000 トークンを保持します。再度アタッチされたスキルは 25,000 トークンの合計予算を共有します。Claude Code はこの予算を最近呼び出されたスキルから開始して埋めるため、セッション内で多くのスキルを呼び出した場合、古いスキルはコンパクション後に完全にドロップされる可能性があります。

スキルが最初の応答の後に動作に影響を与えるのを停止しているように見える場合、コンテンツは通常まだ存在し、モデルは他のツールまたはアプローチを選択しています。スキルの description と指示を強化して、モデルがそれを優先し続けるようにするか、フックを使用して動作を決定的に強制します。スキルが大きいか、その後に他のスキルを多く呼び出した場合、コンパクション後にそれを再度呼び出して、フルコンテンツを復元します。

スキルのツールを事前承認する

allowed-tools フィールドは、スキルがアクティブな場合、リストされたツールの権限を付与するため、Claude はあなたに承認を求めることなくそれらを使用できます。これは利用可能なツールを制限しません。すべてのツールは呼び出し可能なままであり、権限設定は引き続き、リストされていないツールのツール承認を管理します。

このスキルは、スキルを呼び出すときはいつでも、Claude が git コマンドを実行できるようにします:

---
name: commit
description: Stage and commit the current changes
disable-model-invocation: true
allowed-tools: Bash(git add *) Bash(git commit *) Bash(git status *)
---

スキルが特定のツールを使用するのをブロックするには、代わりに権限設定に拒否ルールを追加します。

スキルに引数を渡す

ユーザーと Claude の両方がスキルを呼び出すときに引数を渡すことができます。引数は $ARGUMENTS プレースホルダーを通じて利用可能です。

このスキルは GitHub の問題を番号で修正します。$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 が含まれていない場合、Claude Code はスキルコンテンツの最後に ARGUMENTS: <your input> を追加するため、Claude は入力したものを引き続き見ることができます。

位置で個別の引数にアクセスするには、$ARGUMENTS[N] または短い $N を使用します:

---
name: migrate-component
description: Migrate a component from one framework to another
---

Migrate the $ARGUMENTS[0] component from $ARGUMENTS[1] to $ARGUMENTS[2].
Preserve all existing behavior and tests.

/migrate-component SearchBar React Vue を実行すると、$ARGUMENTS[0] が SearchBar に、$ARGUMENTS[1] が React に、$ARGUMENTS[2] が Vue に置き換えられます。$N 短縮形を使用する同じスキル:

---
name: migrate-component
description: Migrate a component from one framework to another
---

Migrate the $0 component from $1 to $2.
Preserve all existing behavior and tests.

高度なパターン

動的コンテキストを注入する

!`<command>` 構文はスキルコンテンツが Claude に送信される前にシェルコマンドを実行します。コマンド出力はプレースホルダーを置き換えるため、Claude はコマンド自体ではなく実際のデータを受け取ります。

このスキルは GitHub CLI でライブ PR データを取得することで、プルリクエストを要約します。!`gh pr diff` および他のコマンドが最初に実行され、その出力がプロンプトに挿入されます:

---
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...

このスキルが実行されるとき:

  1. 各 !`<command>` が直ちに実行されます(Claude が何かを見る前に)
  2. 出力はスキルコンテンツのプレースホルダーを置き換えます
  3. Claude は実際の PR データを含む完全にレンダリングされたプロンプトを受け取ります

これは前処理であり、Claude が実行するものではありません。Claude は最終結果のみを見ます。

複数行のコマンドの場合、インラインフォーム !`<command>` の代わりに、```! で開かれたフェンスコードブロックを使用します:

## Environment
```!
node --version
npm --version
git status --short
```

ユーザー、プロジェクト、プラグイン、または追加ディレクトリソースからのスキルとカスタムコマンドについて、この動作を無効にするには、設定で "disableSkillShellExecution": true を設定します。各コマンドは [shell command execution disabled by policy] に置き換えられます。バンドルされたスキルと管理スキルは影響を受けません。この設定は管理設定で最も有用です。ユーザーはそれをオーバーライドできません。

スキルをサブエージェントで実行する

スキルを分離して実行したい場合は、フロントマターに context: fork を追加します。スキルコンテンツはサブエージェントを駆動するプロンプトになります。会話履歴にアクセスできません。

スキルとサブエージェントは 2 つの方向で連携します:

アプローチ システムプロンプト タスク また読み込む
context: fork を持つスキル エージェントタイプから(Explore、Plan など) SKILL.md コンテンツ CLAUDE.md
skills フィールドを持つサブエージェント サブエージェントのマークダウン本体 Claude の委任メッセージ プリロードされたスキル + CLAUDE.md

context: fork を使用すると、スキルにタスクを記述し、実行するエージェントタイプを選択します。逆の場合(スキルをリファレンス資料として使用するカスタムサブエージェントを定義する)については、サブエージェントを参照してください。

例:Explore エージェントを使用した研究スキル

このスキルはフォークされた Explore エージェントで研究を実行します。スキルコンテンツはタスクになり、エージェントはコードベース探索に最適化された読み取り専用ツールを提供します:

---
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

このスキルが実行されるとき:

  1. 新しい分離されたコンテキストが作成されます
  2. サブエージェントはスキルコンテンツをプロンプト(「$ARGUMENTS を徹底的に調査...」)として受け取ります
  3. agent フィールドは実行環境(モデル、ツール、権限)を決定します
  4. 結果は要約され、メイン会話に返されます

agent フィールドは使用するサブエージェント設定を指定します。オプションには、組み込みエージェント(Explore、Plan、general-purpose)または .claude/agents/ からのカスタムサブエージェントが含まれます。省略した場合、general-purpose を使用します。

Claude のスキルアクセスを制限する

デフォルトでは、Claude は disable-model-invocation: true が設定されていないスキルを呼び出すことができます。allowed-tools を定義するスキルは、スキルがアクティブな場合、これらのツールへのアクセスを許可なしで Claude に付与します。権限設定は引き続き、他のすべてのツールのベースライン承認動作を管理します。/init、/review、/security-review などの組み込みコマンドも Skill ツールを通じて利用可能です。/compact などの他の組み込みコマンドはそうではありません。

Claude が呼び出すことができるスキルを制御する 3 つの方法:

すべてのスキルを無効にする には、/permissions で Skill ツールを拒否します:

# Add to deny rules:
Skill

特定のスキルを許可または拒否する には、権限ルールを使用します:

# Allow only specific skills
Skill(commit)
Skill(review-pr *)

# Deny specific skills
Skill(deploy *)

権限構文:完全一致の場合は Skill(name)、任意の引数を含むプレフィックス一致の場合は Skill(name *)。

個別のスキルを非表示にする には、フロントマターに disable-model-invocation: true を追加します。これにより、スキルが Claude のコンテキストから完全に削除されます。

スキルを共有する

スキルはオーディエンスに応じて異なるスコープで配布できます:

  • プロジェクトスキル:.claude/skills/ をバージョン管理にコミットします
  • プラグイン:プラグインに skills/ ディレクトリを作成します
  • 管理:管理設定を通じて組織全体にデプロイします

視覚的な出力を生成する

スキルは任意の言語でスクリプトをバンドルして実行でき、Claude に単一のプロンプトで可能なもの以上の機能を提供します。1 つの強力なパターンは視覚的な出力を生成することです。ブラウザで開くインタラクティブな HTML ファイルで、データの探索、デバッグ、またはレポートの作成に使用できます。

この例はコードベースエクスプローラーを作成します。ディレクトリを展開および折りたたむことができるインタラクティブなツリービュー、一目でファイルサイズを確認でき、ファイルタイプを色で識別できます。

スキルディレクトリを作成します:

mkdir -p ~/.claude/skills/codebase-visualizer/scripts

~/.claude/skills/codebase-visualizer/SKILL.md を作成します。説明は Claude にこのスキルをいつアクティブにするかを伝え、指示は Claude にバンドルされたスクリプトを実行するよう伝えます:

---
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

Generate an interactive HTML tree view that shows your project's file structure with collapsible directories.

## Usage

Run the visualization script from your project root:

```bash
python ~/.claude/skills/codebase-visualizer/scripts/visualize.py .
```

This creates `codebase-map.html` in the current directory and opens it in your default browser.

## What the visualization shows

- **Collapsible directories**: Click folders to expand/collapse
- **File sizes**: Displayed next to each file
- **Colors**: Different colors for different file types
- **Directory totals**: Shows aggregate size of each folder

~/.claude/skills/codebase-visualizer/scripts/visualize.py を作成します。このスクリプトはディレクトリツリーをスキャンし、以下を含む自己完結型の HTML ファイルを生成します:

  • ファイル数、ディレクトリ数、合計サイズ、ファイルタイプ数を示すサマリーサイドバー
  • コードベースをファイルタイプ別に分類する棒グラフ(サイズ別トップ 8)
  • ディレクトリを展開および折りたたむことができる折りたたみ可能なツリー(色分けされたファイルタイプインジケーター付き)

スクリプトは Python が必要ですが、組み込みライブラリのみを使用するため、インストールするパッケージはありません:

#!/usr/bin/env python3
"""Generate an interactive collapsible tree visualization of a codebase."""

import json
import sys
import webbrowser
from pathlib import Path
from collections import Counter

IGNORE = {'.git', 'node_modules', '__pycache__', '.venv', 'venv', 'dist', 'build'}

def scan(path: Path, stats: dict) -> dict:
    result = {"name": path.name, "children": [], "size": 0}
    try:
        for item in sorted(path.iterdir()):
            if item.name in IGNORE or item.name.startswith('.'):
                continue
            if item.is_file():
                size = item.stat().st_size
                ext = item.suffix.lower() or '(no ext)'
                result["children"].append({"name": item.name, "size": size, "ext": ext})
                result["size"] += size
                stats["files"] += 1
                stats["extensions"][ext] += 1
                stats["ext_sizes"][ext] += size
            elif item.is_dir():
                stats["dirs"] += 1
                child = scan(item, stats)
                if child["children"]:
                    result["children"].append(child)
                    result["size"] += child["size"]
    except PermissionError:
        pass
    return result

def generate_html(data: dict, stats: dict, output: Path) -> None:
    ext_sizes = stats["ext_sizes"]
    total_size = sum(ext_sizes.values()) or 1
    sorted_exts = sorted(ext_sizes.items(), key=lambda x: -x[1])[:8]
    colors = {
        '.js': '#f7df1e', '.ts': '#3178c6', '.py': '#3776ab', '.go': '#00add8',
        '.rs': '#dea584', '.rb': '#cc342d', '.css': '#264de4', '.html': '#e34c26',
        '.json': '#6b7280', '.md': '#083fa1', '.yaml': '#cb171e', '.yml': '#cb171e',
        '.mdx': '#083fa1', '.tsx': '#3178c6', '.jsx': '#61dafb', '.sh': '#4eaa25',
    }
    lang_bars = "".join(
        f'<div class="bar-row"><span class="bar-label">{ext}</span>'
        f'<div class="bar" style="width:{(size/total_size)*100}%;background:{colors.get(ext,"#6b7280")}"></div>'
        f'<span class="bar-pct">{(size/total_size)*100:.1f}%</span></div>'
        for ext, size in sorted_exts
    )
    def fmt(b):
        if b < 1024: return f"{b} B"
        if b < 1048576: return f"{b/1024:.1f} KB"
        return f"{b/1048576:.1f} MB"

    html = f'''<!DOCTYPE html>
<html><head>
  <meta charset="utf-8"><title>Codebase Explorer</title>
  <style>
    body {{ font: 14px/1.5 system-ui, sans-serif; margin: 0; background: #1a1a2e; color: #eee; }}
    .container {{ display: flex; height: 100vh; }}
    .sidebar {{ width: 280px; background: #252542; padding: 20px; border-right: 1px solid #3d3d5c; overflow-y: auto; flex-shrink: 0; }}
    .main {{ flex: 1; padding: 20px; overflow-y: auto; }}
    h1 {{ margin: 0 0 10px 0; font-size: 18px; }}
    h2 {{ margin: 20px 0 10px 0; font-size: 14px; color: #888; text-transform: uppercase; }}
    .stat {{ display: flex; justify-content: space-between; padding: 8px 0; border-bottom: 1px solid #3d3d5c; }}
    .stat-value {{ font-weight: bold; }}
    .bar-row {{ display: flex; align-items: center; margin: 6px 0; }}
    .bar-label {{ width: 55px; font-size: 12px; color: #aaa; }}
    .bar {{ height: 18px; border-radius: 3px; }}
    .bar-pct {{ margin-left: 8px; font-size: 12px; color: #666; }}
    .tree {{ list-style: none; padding-left: 20px; }}
    details {{ cursor: pointer; }}
    summary {{ padding: 4px 8px; border-radius: 4px; }}
    summary:hover {{ background: #2d2d44; }}
    .folder {{ color: #ffd700; }}
    .file {{ display: flex; align-items: center; padding: 4px 8px; border-radius: 4px; }}
    .file:hover {{ background: #2d2d44; }}
    .size {{ color: #888; margin-left: auto; font-size: 12px; }}
    .dot {{ width: 8px; height: 8px; border-radius: 50%; margin-right: 8px; }}
  </style>
</head><body>
  <div class="container">
    <div class="sidebar">
      <h1>📊 Summary</h1>
      <div class="stat"><span>Files</span><span class="stat-value">{stats["files"]:,}</span></div>
      <div class="stat"><span>Directories</span><span class="stat-value">{stats["dirs"]:,}</span></div>
      <div class="stat"><span>Total size</span><span class="stat-value">{fmt(data["size"])}</span></div>
      <div class="stat"><span>File types</span><span class="stat-value">{len(stats["extensions"])}</span></div>
      <h2>By file type</h2>
      {lang_bars}
    </div>
    <div class="main">
      <h1>📁 {data["name"]}</h1>
      <ul class="tree" id="root"></ul>
    </div>
  </div>
</body></html>'''
    output.write_text(html)

if __name__ == '__main__':
    target = Path(sys.argv[1] if len(sys.argv) > 1 else '.').resolve()
    stats = {"files": 0, "dirs": 0, "extensions": Counter(), "ext_sizes": Counter()}
    data = scan(target, stats)
    out = Path('codebase-map.html')
    generate_html(data, stats, out)
    print(f'Generated {out.absolute()}')
    webbrowser.open(f'file://{out.absolute()}')

テストするには、任意のプロジェクトで Claude Code を開き、「Visualize this codebase」と尋ねます。Claude はスクリプトを実行し、codebase-map.html を生成し、ブラウザで開きます。

このパターンは任意の視覚的な出力に機能します。依存関係グラフ、テストカバレッジレポート、API ドキュメント、またはデータベーススキーマの視覚化。バンドルされたスクリプトが重い処理を行い、Claude が調整を処理します。

トラブルシューティング

スキルがトリガーされない

Claude がスキルを期待どおりに使用しない場合:

  1. 説明にユーザーが自然に言うキーワードが含まれていることを確認します
  2. スキルが「利用可能なスキルは何ですか?」に表示されることを確認します
  3. 説明により密接に一致するようにリクエストを言い換えてみます
  4. スキルがユーザー呼び出し可能な場合は、/skill-name で直接呼び出してみます

スキルが頻繁にトリガーされる

Claude がスキルを使用したくない場合:

  1. 説明をより具体的にします
  2. スキルを手動で呼び出したい場合のみ disable-model-invocation: true を追加します

スキルの説明が短縮される

スキルの説明がコンテキストに読み込まれるため、Claude は利用可能なものを知っています。すべてのスキル名は常に含まれていますが、多くのスキルがある場合、説明は文字予算に合わせて短縮される可能性があり、Claude が一致するために必要なキーワードを削除できます。予算はコンテキストウィンドウの 1% で動的にスケーリングされ、8,000 文字のフォールバックがあります。

制限を上げるには、SLASH_COMMAND_TOOL_CHAR_BUDGET 環境変数を設定します。またはソースで description と when_to_use テキストをトリミングします。各エントリの組み合わせテキストは予算に関係なく 1,536 文字でキャップされているため、主要なユースケースを前置きしてください。

関連リソース

  • 設定をデバッグする:スキルが表示されない、またはトリガーされない理由を診断する
  • サブエージェント:特化したエージェントにタスクを委任する
  • プラグイン:他の拡張機能でスキルをパッケージ化して配布する
  • フック:ツールイベント周辺のワークフローを自動化する
  • メモリ:永続的なコンテキストのための CLAUDE.md ファイルを管理する
  • コマンド:組み込みコマンドとバンドルされたスキルのリファレンス
  • 権限:ツールとスキルアクセスを制御する