Claude Codeのスキル入門 — SKILL.mdで自分用コマンドを作る
Claude Codeの「スキル」の仕組みを整理する。スキル = SKILL.md に手順を書いたフォルダで、/スキル名 で呼べる自作コマンドになる。以前の「カスタムスラッシュコマンド」(.claude/commands/*.md)はスキルに統合された(旧形式も動く)。
スキルとは
SKILL.mdに指示を書いておくと、自分が/名前で呼ぶことも、Claudeが関連タスクのときに自動で読み込むこともできる- CLAUDE.mdとの違いは読み込みタイミング。CLAUDE.mdは毎セッション全文がコンテキストに入るが、スキルは説明文(description)だけ常駐し、本文は使うときだけ読み込まれる。長い手順書はスキルにした方がトークンが安い
- 使い分けの目安: 「事実・規約」はCLAUDE.md、「手順・チェックリスト」はスキル。同じ指示を2回以上チャットに貼ったらスキル化のサイン
置き場所
| 場所 | パス | 適用範囲 |
|---|---|---|
| 個人用 | ~/.claude/skills/名前/SKILL.md |
自分の全プロジェクト |
| プロジェクト用 | .claude/skills/名前/SKILL.md |
そのリポジトリだけ(コミットして共有できる) |
| プラグイン | プラグイン/skills/名前/SKILL.md |
プラグイン有効な場所 |
- 同名がある場合は個人用がプロジェクト用に勝つ。バンドルスキル(
/code-review等)も同名の自作スキルで上書きできる - モノレポではサブディレクトリの
.claude/skills/も自動発見される(apps/web:deployのようにディレクトリ修飾名になる) - ファイルの追加・編集はセッション再起動なしで即反映される
SKILL.mdの書き方
---
name: deploy
description: アプリを本番にデプロイする。デプロイ・リリースを頼まれたときに使う
disable-model-invocation: true
---
デプロイ手順:
1. テストを実行する
2. ビルドする
3. デプロイ先にpushするfrontmatterは全部任意(description だけは書くべき。Claudeが自動発動の判断に使う)。主なフィールド:
| フィールド | 役割 |
|---|---|
description |
何をするスキルか+いつ使うか。自動発動の判断材料 |
disable-model-invocation: true |
Claudeの自動発動を禁止。自分だけが呼べる(デプロイ・コミット等の副作用系に必須) |
user-invocable: false |
/ メニューに出さない。Claudeだけが使う背景知識用 |
argument-hint |
補完時に出る引数ヒント(例: [PR番号]) |
allowed-tools |
このスキル実行中は指定ツールを承認なしで実行可(例: Bash(git add *)) |
context: fork |
サブエージェントとして別コンテキストで実行 |
model / effort |
このスキル実行中だけモデル・思考の深さを変える |
paths |
指定globのファイルを触るときだけ自動発動 |
誰が呼べるかの整理
| 設定 | 自分 | Claude | 用途 |
|---|---|---|---|
| デフォルト | ○ | ○ | 汎用の手順・知識 |
disable-model-invocation: true |
○ | × | /commit /deploy など副作用のある操作 |
user-invocable: false |
× | ○ | レガシー仕様の解説などの背景知識 |
引数と動的コンテキスト
$ARGUMENTS= 呼び出し時の引数全部。$0$1で個別参照、frontmatterのarguments: [issue, branch]で$issueのような名前付きも可!`コマンド`を本文に書くと、Claudeが読む前にコマンドが実行されて出力に置き換わる。いわゆる動的コンテキスト注入- 例:
!`git diff HEAD`を入れておくと、常に最新のdiffがスキル本文に入った状態で始まる
- 例:
${CLAUDE_SKILL_DIR}でスキル自身のディレクトリ、${CLAUDE_PROJECT_DIR}でプロジェクトルートを参照できる
補助ファイル
スキルはフォルダなので、SKILL.md 以外のファイルも置ける。
my-skill/
├── SKILL.md ← 本体(必須。500行以内推奨)
├── reference.md ← 詳細資料(必要になったときだけ読まれる)
└── scripts/
└── helper.js ← Claudeが実行するスクリプトSKILL.md から「詳細は reference.md を見る」のように参照しておくと、Claudeが必要時だけ読む。本文を薄く保つほどトークン効率が良い。
うちでの実例
このモノレポでは .claude/skills/ に以下を置いている。全部 disable-model-invocation 相当の「自分が呼ぶ」運用。
/commit— コミットメッセージ規約(Conventional Commits + 日本語要約)とpushまでの手順/blog-article— アプリ紹介記事を6言語分生成する手順(スクショ撮影コマンド込み)/x-announce— X告知用のデモGIF撮影と投稿文作成(文字数カウントスクリプト同梱)
「毎回説明していた手順」をスキルにすると、依頼が「/blog-article」の一言で済むようになる。スクリプトを同梱できるのが強くて、GIFエンコードや文字数検証のような決まった処理はスキル内の .js に固めてある。
まとめ
- スキル =
SKILL.mdを置くだけの自作コマンド。本文は使うときだけ読まれるのでCLAUDE.mdより低コスト - 副作用のある手順は
disable-model-invocation: trueで自分専用に !`コマンド`の動的注入と補助スクリプト同梱が実用上の必殺技- 詳細は公式ドキュメント