Skip to content

Skills ​

スキルは、決まった作業の手順や、参照したい知識を、1 つのフォルダーにまとめておき、必要なときだけ Claude に読み込ませる仕組みです。05. CLAUDE.md とメモリ で扱った CLAUDE.md は、すべてのセッションで読み込まれます。スキルは、使うときにだけ中身が読み込まれるので、長い手順を置いておいても、普段のコンテキストをほとんど使いません。このページでは、スキルの仕組みと作り方を整理し、このサイトのリポジトリで実際に 1 つ作ります。

この記事で分かること ​

  • スキルとは何か。CLAUDE.md との使い分け
  • スキルを置く場所と、効く範囲
  • SKILL.md の書き方と、主な設定の項目
  • スキルが使われ始める 2 つのきっかけと、その制限のしかた
  • 作ったスキルを、Claude が期待どおりに使わないときの、原因と対処

用語の整理 ​

用語意味
スキル(skill)手順や知識をまとめた、Claude に読み込ませるためのフォルダー。中心になるのは SKILL.md というファイル
SKILL.mdスキルの本体。先頭に設定を書き、そのあとに、Claude への指示を Markdown で書く
フロントマター(frontmatter)ファイルの先頭に、--- の行で挟んで書く設定の部分。YAML という形式で書く
説明(description)そのスキルが何をするもので、いつ使うものかを書いた文。Claude は、これを見て、スキルを使うかどうかを決める
呼び出す(invoke)スキルを使い始めること。利用者が /スキル名 と入力する方法と、Claude が自分で読み込む方法がある
同梱のスキル(bundled skill)Claude Code に最初から入っているスキル
引数(argument)スキルを呼び出すときに、名前のあとに付けて渡す情報

スキルとは ​

スキルは、SKILL.md というファイルを入れたフォルダーです。Claude は、会話の内容がスキルの説明に当てはまるときに、そのスキルを自分で読み込みます。利用者が、/スキル名 と入力して、直接呼び出すこともできます。

公式ドキュメントは、スキルを作るきっかけを、次のように説明しています。

  • 同じ指示、チェックリスト、複数の手順からなる作業を、何度も会話に貼り付けている
  • CLAUDE.md の中のある部分が、事実ではなく、手順の説明に育ってきた

CLAUDE.md との使い分け ​

CLAUDE.mdスキル
読み込まれるときすべてのセッションの初めに、全文普段は、名前と説明だけ。中身は、呼び出されたとき
向いている内容すべてのセッションで知っておくべき事実。コマンド、決まり、構成特定の作業の手順。必要なときだけ使う知識
コンテキストの使い方書いた分だけ、毎回使う呼び出すまでは、ほとんど使わない

CLAUDE.md には「何が決まっているか」を書き、スキルには「この作業は、こう進める」を書く、と分けると、整理しやすくなります。

同梱のスキル ​

Claude Code には、最初からいくつかのスキルが入っています。公式ドキュメントが例として挙げているのは、/doctor(設定の点検)、/code-review(コードの確認)、/debug、/loop などです。呼び出し方は、自分で作ったスキルと同じで、/ に続けて名前を入力します。

以前は「カスタムコマンド」と呼ばれていた仕組み(.claude/commands/ にファイルを置く方法)は、スキルに統合されました。以前のファイルは、そのまま動きます。新しく作る場合は、スキルの形にします。

スキルを置く場所 ​

スキルは、置く場所によって、読み込まれる範囲が変わります。考え方は、設定ファイルや CLAUDE.md と同じです。

範囲場所読み込まれるセッション
組織管理設定のフォルダーの中の .claude/skills/<スキル名>/SKILL.md組織が配布した、すべての利用者
個人~/.claude/skills/<スキル名>/SKILL.mdこの PC の、自分のすべてのプロジェクト
プロジェクトプロジェクトの .claude/skills/<スキル名>/SKILL.mdそのリポジトリでのセッション。コミットすると、チームの全員に届く
プラグインプラグインの中の skills/<スキル名>/SKILL.mdそのプラグインを有効にしたところ

プラグインは、スキルなどをまとめて配布するための仕組みです。「10. Plugins と「カスタマイズ」」で扱う予定です。

セッションの途中での変更 ​

Claude Code は、スキルのフォルダーを見張っています。~/.claude/skills/ やプロジェクトの .claude/skills/ の中でスキルを追加、編集、削除すると、セッションを始め直さなくても、反映されます。

ただし、1 つ例外があります。セッションを始めたときに、skills フォルダーそのものがまだなかった場合です。この場合、Claude Code は、そのフォルダーを見張っていません。あとから作ったフォルダーの中のスキルを読み込むには、/reload-skills コマンドを実行します。

SKILL.md の書き方 ​

SKILL.md は、2 つの部分からなります。

markdown
---
name: api-conventions
description: このコードベースでの API の設計の決まり。API のエンドポイントを書くときに使う。
---

API のエンドポイントを書くときは、次に従う。

- 名前の付け方は、REST の慣習に合わせる
- エラーは、決まった形式で返す
- 入力の検証を入れる
  • --- で挟まれた部分(フロントマター):スキルの設定。Claude が、いつこのスキルを使うかを判断する材料になる。
  • そのあとの部分:スキルが呼び出されたときに、Claude が従う指示。

フロントマターの項目は、すべて省略できます。公式ドキュメントが書くことを勧めているのは、description だけです。

主な項目 ​

項目働き
name/ のあとに入力する名前。省略すると、フォルダーの名前が使われる
description何をするスキルで、いつ使うか。Claude は、これを見て、スキルを使うかどうかを決める。いちばん大事な使いみちを、先頭に書く
when_to_useClaude が使うべき場面の補足。きっかけになる言い回しや、依頼の例
argument-hint入力の補完のときに表示される、引数の案内。例:[ファイル名]
disable-model-invocationtrue にすると、Claude が自分では読み込まなくなる。利用者が /名前 と入力したときだけ動く
user-invocablefalse にすると、利用者が /名前 で呼び出せなくなる。Claude だけが読み込む
allowed-toolsこのスキルを呼び出した回の応答の間、確認なしで使えるツール
pathsファイルのパターン。当てはまるファイルを扱っているときだけ、Claude が自動で読み込む
contextfork にすると、別のコンテキスト(サブエージェント)で実行する

項目の名前は、表のとおりに正確に書く必要があります。Claude Code は、知らない名前の項目を、誤りとして知らせずに、無視します。

説明が、いちばん大事 ​

普段のセッションで、コンテキストに入っているのは、それぞれのスキルの名前と説明だけです。Claude は、この説明を見て、今の依頼にスキルが当てはまるかを判断します。そのため、説明には、次の 2 つを書きます。

  • 何をするスキルか
  • どんなときに使うか(利用者が、実際に口にしそうな言葉を入れる)

スキルの数が多くなると、説明の一覧が長くなりすぎないように、一部の説明が省かれることがあります。説明は、大事なことから先に書きます。

本文は、短く書く ​

スキルは、一度読み込まれると、その内容が会話の中に残り続けます。つまり、本文の 1 行 1 行が、そのあとの応答のたびに、コンテキストを使います。公式ドキュメントは、やり方や理由を長く説明するのではなく、何をするかを書くように勧めています。

長い資料や例は、同じフォルダーの中の別のファイルに分けられます。

text
my-skill/
├── SKILL.md       全体の説明と、ほかのファイルへの案内
├── reference.md   詳しい資料。必要なときだけ読まれる
└── scripts/
    └── helper.py  実行するためのスクリプト

SKILL.md の中で、それぞれのファイルに何が書いてあり、いつ読むべきかを案内しておくと、Claude が、必要なときにだけ読みます。

引数を渡す ​

スキルを呼び出すときに、名前のあとに情報を付けられます。本文の中に $ARGUMENTS と書いておくと、その部分が、渡された内容に置き換わります。

markdown
---
name: fix-issue
description: GitHub の Issue を修正する
---

GitHub の Issue $ARGUMENTS を修正する。

/fix-issue 123 と入力すると、本文は「GitHub の Issue 123 を修正する。」として、Claude に渡されます。

スキルが使われ始める、2 つのきっかけ ​

スキルが使われ始めるきっかけは、2 つあります。

きっかけ内容例
利用者が、名前を入力する入力欄に、/スキル名 と入力する/deploy と入力する
Claude が、自分で判断する会話の内容が、スキルの説明に当てはまると Claude が判断して、スキルを読み込む「変更した内容をまとめて」と頼むと、変更をまとめるスキルが使われる

何も設定しなければ、どのスキルも、両方のきっかけで使われます。

きっかけを、片方だけにする ​

スキルによっては、片方のきっかけだけにしたほうがよいものがあります。フロントマターの項目で、制限できます。

利用者が入力したときだけ、使われるようにする

markdown
---
name: deploy
description: アプリケーションを本番の環境にデプロイする
disable-model-invocation: true
---

disable-model-invocation: true を書くと、Claude は、このスキルを自分の判断では使わなくなります。使われるのは、利用者が /deploy と入力したときだけです。

外部に影響する作業のスキルには、この設定を付けます。デプロイ、コミット、メッセージの送信などです。公式ドキュメントは、「コードの準備ができたように見えるからといって、Claude にデプロイを決めさせたくはない」と説明しています。

Claude が判断したときだけ、使われるようにする

markdown
---
name: legacy-system-context
description: 古いシステムの仕組みの説明
user-invocable: false
---

user-invocable: false を書くと、利用者が /名前 と入力しても、動かなくなります。背景の知識のように、Claude には必要なときに読んでほしいが、利用者がコマンドとして実行する意味はない、というスキルに使います。

まとめると、次のようになります。

設定利用者の入力で使われるかClaude の判断で使われるか向いているスキル
何も書かない使われる使われる害のない作業。参照する知識
disable-model-invocation: true使われる使われない外部に影響する作業
user-invocable: false使われない使われる背景の知識

スキルに、確認なしで使えるツールを持たせる ​

フロントマターの allowed-tools にツールを書くと、そのスキルが使われた回の応答の間、書かれたツールを、確認なしで使えるようになります。たとえば、コミットのスキルに、git のコマンドを書いておく使い方があります。

markdown
---
name: commit
description: 今の変更をステージして、コミットする
disable-model-invocation: true
allowed-tools: Bash(git add *) Bash(git commit *) Bash(git status *)
---

この項目は、許可を広げるものなので、注意が必要です。公式ドキュメントによると、プロジェクトのスキルの allowed-tools は、そのフォルダーについて信頼の確認を承認していなくても、適用されます。スキルは、自分自身に広い許可を与えることができてしまいます。ほかの人が作ったリポジトリで Claude Code を使う前に、コミットされているスキルの allowed-tools を確かめておきます。

どのスキルが使われても確実に止めたいツールは、03. 権限モードと、確認を減らす方法 で見た、権限の設定の deny ルールに書きます。

作ったスキルを、Claude が期待どおりに使わないとき ​

スキルを作っても、Claude が、作った人の期待どおりに使うとはかぎりません。スキルは、Claude が説明を読んで、使うかどうかを判断する仕組みだからです。起きやすい困りごとは、次の 4 つです。それぞれ、原因と対処が違います。

Claude が、スキルを使わない ​

使ってほしい場面なのに、Claude がスキルを使わずに、作業を進めてしまう場合です。Claude は、スキルの説明(description)を見て判断しているので、まず、説明を見直します。

原因対処
説明に、依頼で使う言葉が入っていない説明に、利用者が実際に言いそうな言葉を入れる
フロントマターの書き方に誤りがあり、説明が読み込まれていない--- が、ファイルの 1 行目にあるかを確かめる。YAML の書き方を確かめる。フロントマターが読めないと、本文だけが読み込まれて、説明が空になる

説明を直しても使われないときは、/スキル名 と入力すれば、利用者の側から、確実に使い始められます。

作ったスキルが、一覧に出てこない ​

/ を入力しても、作ったスキルが候補に出てこない場合です。

原因対処
セッションを始めた時点で、skills フォルダーがなかった/reload-skills を入力する。または、セッションを始め直す

Claude が、使ってほしくない場面でも、スキルを使う ​

関係のない依頼でも、Claude がスキルを読み込んでしまう場合です。

原因対処
説明が広すぎて、多くの依頼に当てはまってしまう説明を、具体的な場面に絞る
そもそも、Claude の判断で使われては困るスキルであるdisable-model-invocation: true を付けて、利用者が入力したときだけ使われるようにする

Claude が、途中からスキルの指示に従わなくなる ​

最初はスキルの手順に従っていたのに、会話が長くなると、従わなくなる場合です。

スキルの内容は、使い始めたときに 1 回だけ、会話の中に読み込まれます。そのあとで、ファイルが読み直されることはありません。会話が長くなって、圧縮(古い内容の要約)が行われると、スキルの内容は、先頭の部分しか残らないことがあります。

原因対処
圧縮で、スキルの内容の後ろの部分が失われたもう一度、スキルを使い始める。大事な指示は、SKILL.md の先頭の近くに書く
毎回、必ず守らせたい決まりを、スキルに書いているスキルは、強制ではない。必ず守らせたいことは、フックに書く(「09. Hooks」で扱う予定)

実際にやってみる ​

このサイトのリポジトリで、スキルを 1 つ作り、実際に使いました。作ったスキル、試したこと、想定していなかったこと、あとから確かめたこと、の順に書きます。

1. 作ったスキル ​

名前は、register-page です。書き終えた新しいページを、サイトから見られる状態にする作業をまとめました。

このサイトでは、ページを書き終えるたびに、次の作業をしています。

  • サイトの 3 か所(テーマの一覧、サイドバー、トップページの新着記事)に、ページへのリンクを追加する
  • サイトをビルドする
  • 確認用のサーバーを起動し直して、ページが表示されることを確かめる

05 で作った CLAUDE.md には、「3 か所を更新する」という事実だけを書きました。その具体的な手順を、スキルにしました。

コミットと公開は、スキルに含めていません。外部に影響する作業を含めると、利用者が入力したときだけ使われる設定(disable-model-invocation: true)が必要になります。外部に影響しない範囲だけにして、Claude の判断でも使えるスキルにしました。

スキルの実体は、.claude/skills/register-page/SKILL.md という、ファイル 1 つです。全文は、次のとおりです。

markdown
---
name: register-page
description: study-lab のサイトに、書き終えた新しいページを登録する。テーマの一覧、サイドバー、トップページの新着記事の 3 か所にリンクを追加し、ビルドして、確認用のサーバーで表示を確かめる。新しいページを書き終えたとき、または「ページを登録して」と頼まれたときに使う。
argument-hint: "[ページのファイルのパス]"
---

# 新しいページをサイトに登録する

対象のページ:$ARGUMENTS
(指定がなければ、`git status` で、`docs/` 以下に新しく追加された Markdown を対象にする)

次の順に行う。コミット、push、プルリクエストの作成は、この手順には含めない。

1. 対象のページの 1 行目(`# ` で始まる行)から、ページのタイトルを読む。
2. テーマのトップページ `docs/<テーマ>/index.md` の一覧で、対象のページの行を直す。
   - タイトルを、ページへのリンクにする(例:`[タイトル](./ファイル名)`。拡張子の `.md` は付けない)
   - 状態を「準備中」から「公開済み」に変える
3. サイドバー `docs/.vitepress/config.mts` の、対象のテーマのグループに、ページを追加する。
   - 番号のあるテーマでは、番号の順になる位置に入れる
4. トップページ `docs/index.md` の「新着記事」の表の、いちばん上に行を追加する。
   - 形:`| 今日の日付(YYYY-MM-DD) | テーマの名前 | [タイトル](./テーマ/ファイル名) |`
5. `npm run docs:build` を実行して、成功することを確かめる。
6. 確認用のサーバーを起動し直す。
   - 動いていれば止めてから、`npm run docs:preview -- --port 4173` を起動する
7. 次の 2 点を確かめる。
   - `http://localhost:4173/study-lab/<テーマ>/<ファイル名>` が表示される
   - テーマのトップページと、サイトのトップページに、対象のページへのリンクがある
8. 行った変更(3 か所)と、確認用の URL を、利用者に伝える。

フロントマターの description には、「新しいページを書き終えたとき」「ページを登録して」という、使う場面の言葉を入れました。本文の $ARGUMENTS は、対象のページを受け取るための部分です。

2. 試したこと ​

2 つのことを試しました。

試したこと方法結果
作ったスキルを、名前の入力で使えるか入力欄に、/register-page docs/claude-code/06-skills.md と入力した。対象は、このページ自身使えた
スキルの手順のとおりに、作業が進むかClaude が、手順を上から順に行った最後まで進んだ

名前を入力したとき、Claude に渡されたのは、SKILL.md の本文でした。本文の中の $ARGUMENTS は、入力したパスに置き換わっていました。

text
対象のページ:docs/claude-code/06-skills.md

手順ごとの結果は、次のとおりです。

手順結果
1. タイトルを読む「Skills」
2. テーマの一覧を直す06 の行にリンクを付け、「公開済み」に変えた
3. サイドバーに追加する05 の次に追加した
4. 新着記事に追加する表のいちばん上に追加した
5. ビルドする成功
6. 確認用のサーバーを起動し直す起動した
7. 表示を確かめるページが表示された。テーマのトップページと、サイトのトップページに、リンクがあった
8. 利用者に伝える変更した 3 か所と、確認用の URL を伝えた

コミットや公開は、行われませんでした。手順に含めていないためです。

3. 想定していなかったこと ​

1 つ、ありました。作った直後は、スキルを使えませんでした。

項目内容
起きたことスキルのファイルを作ってすぐに使おうとすると、Unknown skill: register-page(そのスキルは存在しない)という結果になった
原因Claude Code は、スキル用のフォルダーを見張っていて、普通は、新しいスキルにすぐ気づく。ただし、セッションを始めた時点で、そのフォルダーがなかった場合は、見張っていない。今回は、.claude/skills/ フォルダーごと新しく作ったので、これに当たった
対処入力欄に、/reload-skills(スキルを読み込み直すコマンド)を入力した。Reloaded skills: 34 skills available (1 added) と表示され、使えるようになった
今後このリポジトリでは、もう起きない。フォルダーができたので、次からは、新しいスキルにすぐ気づく

これは、公式ドキュメントに書かれているとおりの動きです(上の「セッションの途中での変更」を参照)。

4. あとから確かめたこと:Claude の判断で、スキルが使われるか ​

このページを書いた時点では、利用者が名前を入力して、スキルを使い始めました。Claude が、自分の判断でスキルを使い始める動きは、次のページ(07. MCP とコネクター)を書き終えたときに、確かめました。

項目内容
状況Claude が、07 のページの本文を書き終えた。利用者は、スキルの名前を入力していない
Claude がしたことスキルの一覧にある register-page の説明(「新しいページを書き終えたとき…に使う」)が、今の状況に当てはまると判断して、自分でスキルを使い始めた。対象のページのパスも、引数として自分で渡した
結果スキルの本文が読み込まれ、手順のとおりに、3 か所へのリンクの追加、ビルド、表示の確認まで進んだ

スキルの内容は、このページのときに、すでに 1 回読み込まれていました。2 回目は、引数(対象のページ)が違うので、本文の全体が、もう一度読み込まれました。上の「Claude が、途中からスキルの指示に従わなくなる」で見た、「スキルの内容は、使い始めたときに読み込まれる」という動きのとおりです。

5. スキルを、リポジトリで共有するための変更 ​

スキルとは別に、設定を 1 つ変えました。

04. 設定ファイルの仕組み で確かめたとおり、このリポジトリでは、.gitignore で .claude フォルダーの全体を、Git の管理の対象から外していました。スキルは、その中にあるので、そのままでは、リポジトリに入りません。

.gitignore を、次のように書き換えました。

text
.claude/*
!.claude/skills/

1 行目で、.claude の中のものをすべて外し、2 行目で、スキルのフォルダーだけを、管理の対象に戻しています。PC ごとに内容が違うファイル(プレビュー用の設定など)は、これまでどおり、対象から外れたままです。

まとめ ​

  • スキルは、手順や知識をまとめた SKILL.md を、フォルダーに入れたもの。普段は名前と説明だけが読み込まれ、中身は、呼び出されたときに読み込まれる。
  • すべてのセッションで必要な事実は CLAUDE.md に、特定の作業の手順はスキルに書く。
  • 置く場所で、範囲が決まる。個人のスキルは ~/.claude/skills/、プロジェクトのスキルは .claude/skills/。
  • 説明(description)が、Claude がスキルを使うかどうかの判断の材料になる。何をするか、いつ使うかを、具体的に書く。
  • スキルが使われ始めるきっかけは、利用者が名前を入力することと、Claude が自分で判断することの 2 つ。外部に影響する作業のスキルは、disable-model-invocation: true を付けて、利用者が入力したときだけ使われるようにする。
  • allowed-tools は、許可を広げる項目である。ほかの人が作ったスキルを使う前に、内容を確かめる。

確認の記録 ​

項目内容
最終確認日2026 年 10 月 13 日
Claude Code のバージョン2.1.295(macOS のデスクトップアプリ)
検証の状況「実際にやってみる」は、macOS のデスクトップアプリと、このサイトのリポジトリで確かめた結果。プロジェクトのスキルを作り、/reload-skills で読み込み、/スキル名 で呼び出して、手順のとおりに動くことを確かめた。Claude が、説明をもとに、自分でスキルを使い始めることも、次のページを書いたときに確かめた。それ以外の節は、公式ドキュメントの内容をもとに書いている
確かめていない内容同梱のスキル、個人のスキル、allowed-tools、disable-model-invocation、paths、context: fork、補助のファイルは、実際には操作していない