Claude Codeに記事ひな形作成や特定フォーマットの整形を毎回同じ手順でやらせていて、コピペ呪文を1コマンド化して再利用したい人向け
毎週・毎日のように同じプロンプトをコピペしてClaude Codeに投げているとき、その指示文をSKILL.mdに移して `/コマンド名` の1行で呼び出せるようにする場面で使う。記事ひな形・テストコード雛形・PRレビュー観点リスト・変更履歴メッセージの整形のように、骨組みは固定で内容だけ毎回違うタイプの作業に向く
Claude Codeを使ってると、毎回同じ前置きを書いてないですか。「タイトル候補を5つ・冒頭3文の結論ボックス・h2を質問形で5本」みたいな指示文を、記事のテーマだけ差し替えてコピペで投げる、あれです。Skills(スキル)はその「コピペ呪文」をファイルに保存しておいて、`/recipe-skeleton` のような短い1コマンドで呼び出せるようにする仕組みです。
同じ仕事を毎週やってるなら、毎回プロンプトを組み立てる必要はない。書いてしまえばいいんです。
噛み砕くと
Skillsは「Claude Code用の覚え書き帳」みたいなものです。新しい職場の初日に先輩から渡される「うちの店ではこの順番でメニュー出します」のメモ書き、あの感覚に近い。Claude Codeは毎回ゼロから判断するので、毎回そのメモを口頭で渡してたら時間が無駄です。Skillsは机の引き出しに入れておくメモで、必要な場面が来たら自動で取り出してくれるか、自分で「これ使って」と指名できる仕組みになっています。
ややこしいのは、Skillsの前身として「Custom Commands」という仕組みが先にあったことです。公式は2025〜2026年にかけてこの2つを統合しました。中身はほぼ同じです。
Skills と Custom Commands は別物じゃない(最近統合された)
公式ドキュメントには "Custom commands have been merged into skills" と書いてあります。つまり、`.claude/commands/deploy.md` と `.claude/skills/deploy/SKILL.md` のどちらでも `/deploy` が同じように動く、という整理になりました。
違いは置き場所と、できることの幅です。
- 旧 Custom Commands形式: `.claude/commands/<名前>.md` の1ファイルだけのシンプル形式。今もそのまま動く
- 新 Skills形式: `.claude/skills/<名前>/SKILL.md` でフォルダごと持てる形式。中にテンプレ・スクリプト・参考資料を一緒に入れられる
新しく作るなら Skills 形式の方がいい、というのが公式の推奨です。ファイル1個で十分なら旧形式のままでもOK。
「料理ブログの記事ひな形を出す」スキルを実際に作ってみる
毎週日曜に副業で料理ブログを更新している、という想定で進めます。毎回Claude Codeに投げているのが下記のような指示文だとします。
今から書く料理レシピ記事について、
- タイトル候補を5つ
- 冒頭3文の結論ボックス(料理名・所要時間・難易度)
- h2を質問形で5本(材料は?・作り方は?...)
を出して。レシピ名: ○○
これを毎週コピペして、最後の `○○` だけ書き換えてた。それを `/recipe-skeleton 鶏の照り焼き` の1行で済むようにします。
ステップ1: スキルを置くフォルダを作る
個人レベルの置き場所に作ります。自分のパソコンの全プロジェクトから使える共通フォルダ、という意味です。ターミナルを開いて次の1行を打ちます。
$ mkdir -p ~/.claude/skills/recipe-skeleton
これで `~/.claude/skills/recipe-skeleton/` というフォルダができました。フォルダ名がそのままスラッシュコマンド名になります。今回なら `/recipe-skeleton` です。
注意点が1つあります。もし今まで `~/.claude/skills/` フォルダ自体が存在しなかった場合は、Claude Codeをいったん終了して再起動してください。Claude Codeは起動時にこのフォルダを「見張り対象」として登録するので、新規にフォルダを作ったタイミングでは認識してくれません。次回起動からは中のファイルを追加・編集するだけで自動で読み直してくれるので、再起動が必要なのは「skillsフォルダを初めて作ったとき」の1回だけです。
ステップ2: SKILL.md を書く
フォルダの中に `SKILL.md` というファイルを1つ作って、下記をそのまま貼ります。
---
description: 料理レシピ記事の冒頭ひな形を出す。タイトル候補5本、結論ボックス3文、h2質問形5本のセット。
---
レシピ名「$ARGUMENTS」について、料理ブログの記事冒頭ひな形を作って。
1. タイトル候補を5つ。数字を入れる、料理名と所要時間を含める
2. 冒頭3文の結論ボックス。料理名・所要時間・難易度
3. h2を質問形で5本。材料/作り方/コツ/保存/アレンジ
各セクションの中身までは書かなくていい。骨組みだけ。
ファイルの先頭にある `---` で囲まれた3行が「YAML frontmatter」と呼ばれる設定欄です。ここの `description` が、いつこのスキルが呼ばれるかの目印になります。
ステップ3: 実際に呼んでみる
Claude Codeを開いて、新しいセッションを始めます。プロジェクトのフォルダにいる必要はない。個人レベルに置いたので、どこからでも使えます。
> /recipe-skeleton 鶏の照り焼き
Claudeが下記のような出力を返してきます。
## タイトル候補
1. 15分で完成・失敗しない鶏の照り焼き|タレの黄金比はこれ
2. 鶏の照り焼きを冷めても美味しく作る3つのコツ
3. 鶏の照り焼き+付け合わせ5選|お弁当にも使える組み合わせ
4. 一人暮らしの夕食5分仕込みレシピ|鶏の照り焼き
5. 鶏の照り焼きとブリの照り焼きの味付けの違い
## 結論ボックス(3文)
- 料理名: 鶏の照り焼き
- 所要時間: 約15分
- 難易度: ★★☆☆☆
## h2質問形5本
1. 鶏の照り焼きの材料は?
2. 鶏の照り焼きの作り方は?
3. 失敗しないコツは?
...
これが毎週日曜の作業の出発点になります。プロンプトを組み立てる時間がゼロになる。
ステップ4: ここで初心者がやりがちな勘違い
「`description` には何でも書いていい」と思って、「料理ブログ用のひな形を出すスキル」みたいに**ふんわり**書くと、Claudeが発動条件として読み取れなくなります。逆に**狭すぎる**と、ユーザーが「レシピのアウトライン作って」と言ったときに反応しない。
公式ドキュメントは「front-load the key use case」と書いています。意訳すると「一番大事な使い道を先頭に書け」です。書き方のコツは、**ユーザーが自然に口にしそうなキーワードを description に含める**こと。「料理レシピ記事」「ひな形」「タイトル候補」「結論ボックス」のような語を入れておくと、Claudeが「いまその話してる」と気づいてスキルを引っ張り出してくれます。
ステップ5: 自動で呼ばれるか、自分で呼ぶか
デフォルト設定では、ユーザーが `/recipe-skeleton` と打って明示的に呼ぶこともできるし、Claudeが「あ、いまこのスキルが効きそう」と判断して自動で呼ぶこともできます。両方OK。
ただ、スキルの「呼ばれ方」は frontmatter で2方向にチューニングできます。1つ目は disable-model-invocation: true で、これを足すと「Claudeの自動発動だけを止めて、ユーザーが `/コマンド名` と打ったときだけ動く」という形にできます。デプロイや投稿のような「勝手に走られると困る」スキルに使います。
2つ目は逆向きの user-invocable: false で、これを足すと「ユーザーの `/メニュー` から消して、Claudeだけが裏で呼べる」という形になります。「うちの社内で使ってる旧システムの説明」「コーディング規約のメモ」のように、コマンドとして手動で打つ意味はないけど、関連する話題が出たらClaudeに自動で読み込んでほしい背景知識タイプのスキルに向きます。
今回のひな形作成は副作用がなくて、かつユーザーが `/recipe-skeleton` で能動的に呼ぶ前提なので、両方とも付けずデフォルトのままでOKです。
ステップ6: フォルダ内に補助ファイルを置ける
SKILL.mdと同じフォルダに、テンプレートやスクリプトを一緒に入れられます。
~/.claude/skills/recipe-skeleton/
├── SKILL.md # 本体(必須)
├── title-formula.md # タイトル作成の細かい型集
└── scripts/
└── ingredients.py # 材料データの一覧スクリプト
SKILL.md の中で「詳細はtitle-formula.mdを参照」と書いておけば、Claudeは必要なときだけそのファイルを読みに行きます。SKILL.md本体を肥大化させずに、参考資料だけ別に持てる仕掛けです。
つまり Skills は何をしてくれるのか
- やってくれる: 毎回同じプロンプト指示を保存して、短い1コマンドで呼び出せるようにする。フォルダにテンプレや参考資料を同梱して、必要なときだけ読み込ませる。description の文面でClaudeが自動発動するか、ユーザーが手動で `/名前` で呼ぶか、両方使える
- やってくれない: スキル自体が自動でClaudeを賢くするわけではない。中身に書いた指示文の質がそのまま出力の質になる。曖昧な指示を保存したら曖昧な結果が返る
- 意味が薄い場面: 1回しか使わない指示文をスキル化する/毎回内容がガラッと変わる作業/チームで共有する気がない個人メモを延々と量産する。スキル一覧が膨れて Claudeのコンテキスト(会話で覚えていられる量)を圧迫します
使いどころ3シナリオ
シナリオ1: 副業で料理ブログを毎週更新している人
タイトル候補・結論ボックス・h2構成といった記事のひな形を毎回手で書き起こしているなら、`/recipe-skeleton` 1コマンドに置き換えられます。1記事あたり10分の前置き作業がゼロになる。スキルの中身を後から「タイトル候補を7本に増やす」「FAQセクションも入れる」みたいに育てていけば、書く度に品質が上がります。
シナリオ2: 家計簿アプリを個人で開発している人
新しい画面を追加するたびに「Reactのコンポーネント雛形」「テストファイル」「型定義」を毎回同じ構造で書いている、というケース。`/new-component 支出入力フォーム` のスキルを作って、3ファイルセットを一気に出させる仕掛けにできます。プロジェクト固有のルールを `.claude/skills/` に置けば、チームに渡しても同じやり方が再現できる。
シナリオ3: ネットで公開されてるコードを自分のパソコンに持ってきた直後の人
新しく触るコードベースで毎回やる「依存関係を読む」「設定ファイルを一覧化する」「README以外のドキュメント探す」の3点セットを `/scout-repo` というスキルにしておくと、持ってきた30秒後にはコードベースの地図が出てきます。`context: fork` という設定を足せば、メイン会話と切り離した別タブで調査だけ走らせて、結果サマリーだけ返してもらう、という使い方もできる。
初心者が踏みやすい落とし穴
- description が曖昧でスキルが呼ばれない。「便利なヘルパー」のような抽象的な書き方だと、Claudeが「いまこの会話に合う」と判断できない。ユーザーが自然に口にする言葉を必ず入れる
- description が広すぎてスキルが頻繁に呼ばれすぎる。「コードを書くときに使う」みたいに広い書き方だと、関係ない場面でも勝手に発動する。発動して欲しい場面を具体的に書く
- 個人レベルとプロジェクトレベルの置き場所を混同する。`~/.claude/skills/` は自分のパソコン全プロジェクト共通、`プロジェクトフォルダ/.claude/skills/` はそのプロジェクト専用。チームで共有するつもりのスキルを個人レベルに置いてしまうと、共有相手のパソコンには存在しないことになる
- 旧 `.claude/commands/<名前>.md` 形式と新 Skills 形式が混在してメンテが分裂する。両方とも動くので、どちらかに統一する。新規は Skills 形式、古いCustom Commandsは余裕があるときに移行する、くらいの方針でOK
- SKILL.md を肥大化させる。公式は「500行以内に収める」を推奨している。長くなるなら、参考資料を別ファイルに切り出して `[reference.md](reference.md) を参照` の形でリンクする。SKILL.md本体は「いつ呼ぶか・何をするか」の骨組みだけにする
- スキルの中身が会話途中で勝手に消えることがある。Claude Codeは会話が長くなると「コンテキスト(覚えておけるテキストの量)」が満杯になり、自動で要約圧縮(公式用語ではcompaction)が走ります。圧縮の後、各スキルは最初の5,000トークン分(だいたい日本語で7,000〜8,000字)だけが再読み込みされる仕様です。さらに、複数スキルの合計が25,000トークンを超えると古いスキルから順番に丸ごと消えていく。長いSKILL.mdを複数走らせていて「途中からスキルの効きが弱くなった」と感じたら、`/スキル名` で呼び直すと復活します
- 「使ってないスキルを隠せばコンテキストが空く」と勘違いする。一番確実なのは使っていないスキルをフォルダごと削除すること。容量だけ節約したい場合は
disable-model-invocation: trueを足すと、descriptionがコンテキストに乗らなくなり、`/名前` で呼んだ時だけ読み込まれる形になります。間違えやすいのがuser-invocable: false。こちらはメニューの見え方だけを変える設定で、コンテキストへの読み込み量は変わりません。容量節約目的で `user-invocable: false` を付けても効きません
書き方
個人レベル: ~/.claude/skills/<コマンド名>/SKILL.md
プロジェクトレベル: <プロジェクトフォルダ>/.claude/skills/<コマンド名>/SKILL.md
中身(最小例):
---
description: いつこのスキルを呼ぶかの説明
---
指示文の本体。$ARGUMENTS で呼び出し時の追加情報を受け取る
やってみるとこうなる
入力
/recipe-skeleton 鶏の照り焼き
出力例
## タイトル候補
1. 15分で完成・失敗しない鶏の照り焼き|タレの黄金比はこれ
2. 鶏の照り焼きを冷めても美味しく作る3つのコツ
3. 鶏の照り焼き+付け合わせ5選
4. 一人暮らしの夕食5分仕込みレシピ|鶏の照り焼き
5. 鶏の照り焼きとブリの照り焼きの味付けの違い
## 結論ボックス(3文)
- 料理名: 鶏の照り焼き
- 所要時間: 約15分
- 難易度: ★★☆☆☆
## h2質問形5本
1. 鶏の照り焼きの材料は?
2. 鶏の照り焼きの作り方は?
3. 失敗しないコツは?
4. 保存はどうする?
5. アレンジは?
このページに出てきた言葉
- SKILL.md
- スキルの中身を書くテキストファイル。先頭に「いつ呼ばれるか」を書き、その下に「呼ばれたときの指示」を書く
- frontmatter(フロントマター)
- ファイル先頭に <code>---</code> で囲んで書く設定欄。「ここからここまでが設定」という区切り
- description
- スキルがいつ呼ばれるかを書く欄。Claudeはここの文章と会話の話題を照らし合わせ、自動でスキルを呼び出すか判断する
- $ARGUMENTS
- コマンドの後ろに書き足された文字列を、スキル本文に差し込むための目印。<code>/recipe-skeleton 鶏の照り焼き</code> なら「鶏の照り焼き」がここに入る
- 個人レベル / プロジェクトレベル
- スキルの置き場所の違い。<code>~/.claude/skills/</code> は自分のパソコン全プロジェクト共通、<code>プロジェクトフォルダ/.claude/skills/</code> はそのプロジェクト専用
- Custom Commands(旧形式)
- <code>.claude/commands/<名前>.md</code> の1ファイル形式。Skillsに統合されたが今も動く。新規はSKILL.md形式が推奨
- disable-model-invocation
- Claudeが自動でこのスキルを呼ばないようにする設定。trueにすると <code>/名前</code> と手動で打った時だけ動く。descriptionがコンテキストに乗らなくなるので容量節約にも効く
- user-invocable
- ユーザーが <code>/メニュー</code> から手動で呼べるかどうかの設定。falseにするとメニューから消えてClaudeだけが裏で呼べる形になる。背景知識タイプのスキル向け
- context: fork
- スキルを「メイン会話とは別タブ」で走らせる設定。調査・要約のような重い作業を切り離して、結果だけメインに戻せる
- コンテキスト
- Claude Codeが「いま走ってる会話で覚えておける文章の量」。会話・ファイル・スキルのdescriptionが全部この枠を食う
- compaction(自動要約圧縮)
- 会話が長くなりコンテキストが満杯になると、Claude Codeが過去のやり取りを自動要約に置き換えて空きを作る動き。圧縮後は各スキルが最初の5,000トークン分だけ再読み込みされ、合計25,000トークンを超えると古いスキルから消える