Claude Codeのスキル(カスタムコマンド)を自作する方法
Claude CodeでWordPressの記事を作ったり、Google Analyticsのレポートを取ったり——MCPで色々な操作ができるようになると、次に思うのは「毎回同じ指示を出すのが面倒」ということでした。
たとえば記事を作るたびに「Gutenbergブロック形式で」「コードブロックはHCBプラグインの形式で」「タグも設定して」と伝えるのはさすがにつらい。
そこで使ったのが、Claude Codeのスキル(カスタムコマンド)機能です。
目次
スキルってなに?
スキルは、スラッシュコマンドで呼び出せる再利用可能な手順書です。
Markdownファイルに「こういう手順で作業して」と書いておくと、ターミナルで /コマンド名 と打つだけでその手順が実行されます。
/wp-post タイトル「SCSSのmixinまとめ」、カテゴリはHTML・CSSこれだけで、認証確認・コンテンツ作成・セルフレビュー・投稿・タグ設定まで全部やってくれる。毎回同じ説明をしなくて済むのがありがたいです。
スキルの作り方
プロジェクトルートに .claude/skills/スキル名/SKILL.md を置くだけです。
.claude/skills/
├── wp-post/
│ └── SKILL.md # /wp-post で呼び出される
└── eyecatch/
└── SKILL.md # /eyecatch で呼び出されるディレクトリ名がそのままコマンド名になります。SKILL.md の中身はMarkdownで、Claude Codeへの指示を自由に書けます。
実例1:記事作成スキル(/wp-post)
WordPress MCPを使った記事の作成・編集を自動化するスキルです。
# WordPress記事作成・編集スキル
## モード判定
$ARGUMENTS の内容から、作成モード/編集モードを判定する。
## ブロック形式のルール
- 段落: <!-- wp:paragraph -->...<!-- /wp:paragraph -->
- コードブロック: HCBプラグイン形式(undefined-numbers, data-lang属性)
## 手順
1. WordPress認証確認
2. Gutenbergブロック形式でコンテンツ作成
3. セルフレビュー2回
4. 下書きとして投稿
5. タグの自動設定
6. 完了報告ポイントは具体的なルールを書いておくことです。「Gutenbergブロック形式で」だけだとクラシックエディタになったり、コードブロックの属性が抜けたりします。正確なHTML構造まで書いておくと、毎回正しいフォーマットで出力してくれます。
$ARGUMENTS はスラッシュコマンドの後に書いたテキストが入る変数です。これを使って引数を受け取れます。
# $ARGUMENTS に「タイトル「〇〇」、カテゴリはAI」が入る
/wp-post タイトル「〇〇」、カテゴリはAI
# $ARGUMENTS に「記事ID:10506 セクションを追加して」が入る
/wp-post 記事ID:10506 セクションを追加して実例2:アイキャッチ生成スキル(/eyecatch)
ImageMagickを使って、背景画像にアイコンとタイトルテキストを合成するスキルです。
# アイキャッチ画像生成スキル
## レイアウトルール
- アイコン: 200x200にリサイズ、上部中央に配置
- テキスト: Hiragino角ゴW8、pointsize 100、白文字+縁取り
- 2パス描画で縁取り付き白文字を実現
## コマンドテンプレート
magick eyecatch-bg.jpg \
\( icons/ICON.png -resize 200x200 \) -geometry +500+120 -composite \
-font ".Hiragino-Kaku-Gothic-Interface-W8" \
...このスキルではコマンドテンプレートを書いておくのがコツです。ImageMagickのオプションは複雑なので、毎回ゼロから組み立てると位置やフォントがブレます。テンプレートがあれば、アイコン名とテキストを差し替えるだけで同じ仕上がりになります。
スキルを書くときのコツ
具体的なルールを書く
「いい感じに作って」ではなく、具体的なフォーマットやルールを明記します。
- 悪い例:「コードブロックはきれいに表示して」
- 良い例:「HCBプラグイン形式で、preクラスは
undefined-numbers、data-lang属性を付ける」
曖昧な指示だと毎回違う結果になります。一度正解がわかったら、それをそのままスキルに書いておくのが確実です。
テンプレートを用意する
コマンドやコード構造のテンプレートを書いておくと、ブレがなくなります。アイキャッチスキルのImageMagickテンプレートや、記事作成スキルのGutenbergブロック形式がこれにあたります。
$ARGUMENTS で引数を受け取る
スキル内で $ARGUMENTS と書くと、スラッシュコマンドの後に入力されたテキストが展開されます。これを使って、スキルの中で分岐やパラメータの取得ができます。
## モード判定
$ARGUMENTS の内容から、以下のいずれかを判定する:
- 作成モード: タイトルや内容の指示がある場合
- 編集モード: 記事IDの指定がある場合commands と skills の違い
以前は .claude/commands/ にファイルを置く方式でした。現在は .claude/skills/ が推奨されています。
# 旧(commands)— 1ファイル = 1コマンド
.claude/commands/wp-post.md
# 新(skills)— ディレクトリ構造で複数ファイル対応
.claude/skills/wp-post/SKILL.md
.claude/skills/wp-post/reference.md # 参考資料など大きな違いはディレクトリ構造です。skills/ ではスキルごとにディレクトリを作り、SKILL.md をメインファイルとして、参考資料やテンプレートなどのサポートファイルも一緒に置けます。
commands/ も引き続き動くので、既存のファイルをあわてて移行する必要はありません。ただ、新しく作るなら skills/ がおすすめです。
まとめ
- スキルは
.claude/skills/スキル名/SKILL.mdを置くだけで作れる /コマンド名で呼び出せて、$ARGUMENTSで引数を受け取れる- 具体的なルールとテンプレートを書いておくのがコツ
- 旧
commands/から新skills/への移行は任意(両方動く)
MCPで外部サービスと繋がると、やれることが増える分、手順も増えます。スキルに手順をまとめておけば、一言で全部やってくれるので、MCP連携とスキルはセットで考えると良さそうです。
今回は以上です!