← 記事一覧へ

Claude Codeのスキル入門 — SKILL.mdで自分用コマンドを作る

claude-code個人開発

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 で自分専用に
  • !`コマンド` の動的注入と補助スクリプト同梱が実用上の必殺技
  • 詳細は公式ドキュメント