きっかけ:MicroCMSへのPOSTを自動化しようとした
Claude Code で MicroCMS の API にコンテンツをPOSTする処理を作ろうとしたとき、最初に作ってくれたのが /microcms-post というカスタムコマンド(Command)でした
カスタムコマンドを知らなかったので、何度か指示し直して Skill に変えてもらいました
その流れで Command と Skill の違い が気になって調べてみました
調べてみた
公式ドキュメント( https://code.claude.com/docs/ja/skills )を読んでみると、こんな記述がありました
カスタムコマンドはスキルにマージされました。
.claude/commands/deploy.mdのファイルと.claude/skills/deploy/SKILL.mdのスキルの両方が/deployを作成し、同じように機能します。既存の.claude/commands/ファイルは引き続き機能します。スキルは追加機能を提供します。
Command は Skill に統合された旧仕様 とのことでした
カスタムコマンド(Command)とは
ClaudeCode でカスタムのスラッシュコマンドを作るための仕組みです
.claude/commands/hello.md というファイルを作れば、/hello というコマンドが使えるようになります
---
description: MicroCMS にコンテンツをPOSTする
---
## Instructions
$ARGUMENTS の内容を MicroCMS API にPOSTする。
エンドポイント: https://your-service.microcms.io/api/v1/posts
スキル(Skill)とは
Skill は Command の上位互換にあたる仕組みです
.claude/skills/<スキル名>/SKILL.md というディレクトリ構成で、フロントマターで指定できる項目が多くなっています
---
description: MicroCMS にコンテンツをPOSTする。投稿・更新・下書き保存の依頼で使う。
disable-model-invocation: true
allowed-tools: Bash(curl *)
---
## Instructions
$ARGUMENTS の内容を MicroCMS API にPOSTする。
エンドポイント: https://your-service.microcms.io/api/v1/posts
機能比較
| 機能 | Command | Skill |
|---|---|---|
| ファイル構成 | 単一 .md ファイル |
ディレクトリ + SKILL.md
|
| Claudeによる自動呼び出し | ✗ | ✓ description に一致した場合 |
| サブエージェント実行 | ✗ | ✓ context: fork
|
| 動的コンテキスト注入 | ✗ | ✓ !`command` 構文 |
| ツールの事前承認 | ✗ | ✓ allowed-tools
|
| サポートファイル | ✗ | ✓ 同ディレクトリに追加可 |
| 既存ファイルの継続利用 | ✓ 後方互換 | ✓ |
機能を調べる
Skill には知らなかった機能がいくつかあったので、それぞれ調べてみました
Claudeによる自動呼び出し
Skill の description フロントマターをうまく書いておくと、ユーザーが明示的に /skill-name と打たなくても、Claude が「これは関係ありそう」と判断して自動的に読み込んでくれます
逆に、副作用のある処理(デプロイ、外部APIへのPOSTなど)は意図せず呼ばれると困るので、disable-model-invocation: true を付けておくとよさそうです
---
description: MicroCMS にコンテンツをPOSTする。投稿・更新の依頼で使う。
disable-model-invocation: true # ← 副作用があるので手動呼び出しに限定
---
サブエージェント実行
context: fork を付けると、スキルを独立したサブエージェントとして実行できます
通常のスキルは今の会話の中で実行されますが、context: fork を付けると会話履歴を持たないクリーンな状態で分岐して実行され、結果だけがメインの会話に返ってきます
---
description: コードベースを調査する
context: fork
agent: Explore
---
$ARGUMENTS について徹底的に調査してください。
1. Glob と Grep で関連ファイルを探す
2. コードを読んで分析する
3. ファイルパスを明示しながら結果をまとめる
agent: Explore を指定するとファイル読み取り特化のエージェントが使われるので、コードベースの調査などに向いています
| 通常スキル | context: fork |
|
|---|---|---|
| 会話履歴 | 引き継ぐ | なし(クリーンな状態) |
| 実行 | メインの会話の中 | 独立したエージェント |
| 向いている処理 | 参照・ガイドライン系 | 調査・デプロイなど重い処理 |
動的コンテキスト注入(!`command`)
SKILL.md の中で !`git diff HEAD` のように書くと、Claude がスキルを読む前にシェルコマンドが実行されて、その結果がそのままプロンプトに埋め込まれます
## 現在の変更
!`git diff HEAD`
## 指示
上記の差分をもとに変更内容を要約してください。
ツールの事前承認
allowed-tools を使うと、スキルが動いている間だけ指定したツールを確認なしで実行できるようになります
ClaudeCode はシェルコマンドを実行するとき、通常ユーザーに承認を求めます。allowed-tools に書いたツールはその確認が省略されます
---
description: MicroCMS にコンテンツをPOSTする
allowed-tools: Bash(curl *) # ← curl コマンドは許可なしで実行できる
---
Bash(curl *) と書くと「curl で始まるコマンドはすべてOK」という意味になります
MicroCMS への POST のような「このスキルを呼んだら curl を叩くのは当然」という処理には書いておくとスムーズです
サポートファイル
Skill はディレクトリ構成なので、SKILL.md 以外のファイルも一緒に置けます
.claude/skills/microcms-post/
├── SKILL.md # メインの指示(必須)
├── template.md # 投稿のテンプレート
├── examples/
│ └── sample.md # 出力例
└── scripts/
└── validate.sh # バリデーション用スクリプト
SKILL.md の中でサポートファイルを参照しておくと、Claude が必要なときだけ読みに行きます
SKILL.md を短く保ちながら、詳細な情報を別ファイルに分けられるのが便利です
## Instructions
$ARGUMENTS の内容を MicroCMS API にPOSTする。
投稿フォーマットは [template.md](template.md) を参照してください。
出力例は [examples/sample.md](examples/sample.md) を確認してください。
まとめ
Command は Skill にマージされた旧仕様で、Skill が現在の推奨です
既存の Command はそのまま動きますが、新しく作るときは Skill を使うとよさそうです
Claude Code が最初に Command を作っていたのは、どちらも /コマンド名 で呼び出せる同じ仕組みだからかもしれないと思いました
最後に、Skill には自動呼び出しやサブエージェント実行など、Command にはない追加機能があることを知ることができたので、より使いやすくするためにも使っていこうと思います