料理ブログをClaude Codeで書いている初心者向け
プロンプトに毎回貼り直している文体ルールや手順書がある時、CLAUDE.mdが膨らみすぎて作業ごとに関係ないルールまで読まれているのが気になり始めた時に、ルールを切り出してスキルとして1枚にまとめておくと、関係する作業のときだけ自動で読み込んでもらえる
噛み砕くと
キッチンの引き出しを思い浮かべてください。包丁・まな板・ピーラーは毎日使うので作業台の上に出しっぱなし。これがCLAUDE.mdです。
一方、ターメリックの量り器、餃子皮を作る麺棒、年に2回しか使わない燻製チップ。これは引き出しの奥にしまってある。普段は視界に入らないけど、必要な料理を作る時だけ取り出す。
スキルはこの「奥の引き出し」担当です。Claudeは引き出しのラベル(説明文)だけ普段は見ています。「あ、今日は燻製を作るのか」と判断した時に初めて中身を取り出して使う。
CLAUDE.mdに全部詰め込むと、毎回作業台が物置みたいになる。スキルに分けると作業台がスッキリして、必要な時だけ道具が出てくる、というイメージです。
そもそもスキルって、Claudeから見たら何が違うのか
Claude Codeの起動時、Claudeはスキル一覧の「説明文」だけを覚えます。本体(指示の中身)はまだ読みません。
会話が進んで、私が「今日は新しい餃子レシピの記事書く」と言ったとします。Claudeは説明文を見渡して「あ、`recipe-style` というスキルがある」と判断する。そこで初めて本体の中身を読みに行きます。
逆に、その日の会話が記事執筆と全然関係ない場合(例: WordPressの設定変更だけ)。`recipe-style` の本体はずっと読まれません。
これが公式ドキュメントで progressive disclosure と呼ばれている挙動です。常時メモリに居座らせず、必要に応じて表に出す方式。
結果として何が起きるかというと、ルールを20個30個と増やしても、会話の重さがほとんど変わりません。
料理ブログで「文体スキル」を作る再現手順
具体例で動かすのが一番早い。料理ブログで「敬体・絵文字なし・私一人称」の文体ルールをスキルにします。
ステップ1: スキル用のフォルダを作る
料理ブログのプロジェクトフォルダで、ターミナルから次の1行を打ちます。
$ mkdir -p .claude/skills/cooking-blog-style
これで `.claude/skills/cooking-blog-style/` という入れ物ができる。スキル1個につき1フォルダが原則です。
ステップ2: SKILL.md を1枚作る
そのフォルダの中に `SKILL.md` というファイルを作って、次の中身を書きます。
---
name: cooking-blog-style
description: 料理ブログの文体ルール。記事を書くとき、見出しや本文を整えるとき、レシピ記事の下書きを起こすときに使う。
---
このプロジェクトの料理ブログを書くときは以下を守る。
1. 一人称は「私」で統一。「自分」は使わない
2. 絵文字は使わない(ハート・星・料理アイコン全部禁止)
3. 敬体ベースで、語尾の「〜です」が3連続しないようにする
4. 「最後まで読んでくれてありがとう」「ぜひ試してみてください」の決まり文句は使わない
5. 食材の分量は「大さじ1」「小さじ1/2」のように半角数字+単位表記で統一
`---` で囲まれた上3行が frontmatter(設定ブロック)。`name` がスキルの呼び出し名で、`description` が「いつ呼ぶべきか」の判定材料です。
ステップ3: ふつうに会話してみる
Claude Codeを再起動してもいいですし、`.claude/skills/` の変更は基本セッション内で自動検知されます。そのまま続けて「シナモンロールのレシピ記事の下書き作って」と頼んでみる。
Claudeは内部で `cooking-blog-style` の説明文を見ます。「これは料理ブログの記事執筆だから関係ある」と判断したら、SKILL.mdの中身をその場で読み込む。あとは文体ルールに従った下書きを返してきます。
ステップ4: 直接呼び出すこともできる
「自動で読んでほしいけど確実性が欲しい」場面もあります。`/cooking-blog-style` と打って明示的に呼ぶのも可。スキル名の前にスラッシュを付ければスラッシュコマンドとして直接起動します。
CLAUDE.mdに全部書けばよくない?という疑問
正直、最初は私もそう思いました。CLAUDE.md は Claude Code が起動時に必ず読むファイル。文体も見出し構成も全部 CLAUDE.md に書いておけば確実に守ってもらえる、と。
ただ、これをやると CLAUDE.md がどんどん膨らみます。「料理ブログのルール」「カテゴリ整理の手順」「画像生成のプロンプト」「過去のNG事例集」が全部1枚に同居する。500行を超え、1000行を超え、Claudeに渡る前提情報量が肥大していきます。
会話のたびに全部が読み込まれるので、関係ない作業のときも料理レシピの書式ルールが背景で居座る。これが会話の重さ・性能低下の原因の1つ。
判断ラインはシンプルです。
- 常に守らせたい事実・前提(プロジェクト名、ドメイン、サイトの基本方針、絶対ルール) → CLAUDE.md
- 特定の作業のときだけ守らせたい手順・ルール(記事執筆の文体、レシピ記事のテンプレ、月1のカテゴリ整理) → スキル
公式ドキュメントの言い回しは端的です。「CLAUDE.mdの一部が事実ではなく手順に育ってきたら、それはスキルに切り出すサイン」。私もこれは納得感あります。
料理ブログでの使いどころ
シナリオ1: レシピ記事のテンプレを固定する
レシピ記事は「材料」「下準備」「作り方(番号付き)」「コツ」「保存方法」の5見出し構成で統一したい。これを毎回プロンプトで指示するのは無駄。`.claude/skills/recipe-template/SKILL.md` に固定します。
新規レシピ記事を起こすときに「ガパオライスのレシピ記事書いて」と言うだけで、テンプレに沿った下書きが返ってくる。
シナリオ2: 月1のカテゴリ整理を自動化する
月1で「未分類カテゴリの記事を見直して、適切なカテゴリに振り直す」作業をやっている場合。その手順書を `.claude/skills/cooking-categorize/SKILL.md` に書いておく。
`/cooking-categorize` と打てば定型手順が走り出します。「未分類記事を取得→タイトルと本文先頭を読んで判定→カテゴリ変更を提案」まで一気通貫。手順書を見ながら作業する手間が消える。
シナリオ3: 過去のNG事例集を参照させる
「ハートマークが入ってリジェクトしたことがある」「決まり文句の締めが混入した記事を直した経験がある」。こうした失敗集は `.claude/skills/recipe-pitfalls/SKILL.md` にまとめておく。
Claudeが記事執筆時に「お、これは料理レシピだな」と判断してこのスキルを引き当てる。すると過去の落とし穴を踏まずに済みます。CLAUDE.mdに入れると毎回読まれて重い。スキルなら必要な時だけ。
初心者が踏みやすい落とし穴
- description が薄いと自動で呼ばれない。「文体ルール」だけだとClaudeが何の文体か判断できない。「料理ブログの記事を書く・整えるときの文体ルール」のように、対象作業の動詞まで入れると自動呼び出しの精度が上がります
- SKILL.md の置き場所を間違える。`.claude/skills/cooking-blog-style/SKILL.md` であって `.claude/skills/cooking-blog-style.md` ではない。1スキル1フォルダ、中に SKILL.md を入れるのが正しい配置
- frontmatter の `---` を閉じ忘れる。設定の終わりに `---` を必ず置く。閉じないと本体が全部 frontmatter 扱いされて壊れます
- name にスペースや日本語・大文字を入れる。
nameは半角小文字・半角数字・ハイフンのみで64字以内。料理スタイルやCooking Styleは弾かれる。cooking-style-v2のように小文字+数字+ハイフンで書く - 本体に書きすぎて巨大化する。SKILL.md は 500 行以下を目安に、と公式が言っている。詳細リファレンスは別ファイル(同じフォルダの `reference.md` 等)に切り出して、SKILL.md からリンクする方式が推奨されています
- 「呼ばれない」を「壊れた」と勘違いする。description が会話と噛み合わなければ Claude は自動で呼ばない。意図的に呼びたいときは `/<スキル名>` で直接起動するのが確実
関連するコマンドへの動線
スキルはClaude Codeの他の仕組みと組み合わせると効きます。
- /init: プロジェクト初日に CLAUDE.md の雛形を作るスラッシュコマンド。CLAUDE.mdとスキルの役割分担を考える前段階で使う
- /memory: CLAUDE.md を編集するスラッシュコマンド。「これは事実だから CLAUDE.md」「これは手順だからスキル」と振り分ける場面で出番が来る
- /agents: サブエージェントを管理するスラッシュコマンド。サブエージェントというのは、本流の会話とは別の独立した文脈で動く、小さなClaude。スキルと似て非なる仕組みで、SKILL.md の frontmatter に `context: fork` を書くとスキルをサブエージェント側で走らせる連携もできます
- /clear: 会話履歴をリセットするスラッシュコマンド。スキルが膨大になってきたとき、整理ついでに `/clear` で会話を畳み直す運用と相性がいい
- /compact: 会話を要約して圧縮するスラッシュコマンド。公式ドキュメントによれば、圧縮後はスキルの本体が再添付される(最近呼ばれた順に予算25,000トークンまで)ので、セッション後半でも引き継がれます
なお、Claude Code公式に「`/skills` というスラッシュコマンド」は存在しません。各スキルは `/<スキル名>` で個別に呼び出します。`/simplify` `/debug` `/loop` などは Claude Code に最初から入っているバンドル済みスキルとして用意されています。
参考リンク
- Claude Code 公式ドキュメント: Extend Claude with skills
- Claude Code 公式ドキュメント: Memory (CLAUDE.md)
- Claude Code 公式ドキュメント: Commands reference
書き方
.claude/skills/<スキル名>/SKILL.md(プロジェクト用)または ~/.claude/skills/<スキル名>/SKILL.md(ユーザー全体用)にファイルを置く。SKILL.mdの先頭に --- で囲んだfrontmatterを書き、name と description を最低限指定する
やってみるとこうなる
入力
mkdir -p .claude/skills/cooking-blog-style && (vim等で SKILL.md を作成)
出力例
---
name: cooking-blog-style
description: 料理ブログの文体ルール。記事を書くとき、見出しや本文を整えるとき、レシピ記事の下書きを起こすときに使う。
---
このプロジェクトの料理ブログを書くときは以下を守る。
1. 一人称は「私」で統一
2. 絵文字は使わない
3. 「いかがでしたか」「ぜひ試してみてください」の決まり文句は禁止
このページに出てきた言葉
- SKILL.md
- スキル本体を書くMarkdownファイル。ファイル名は固定で、各スキル用フォルダの中に1枚必ず置く
- frontmatter
- ファイル先頭の <code>---</code> で囲まれた設定ブロック。name や description などのメタ情報をここに書く
- name フィールド
- スキルの識別名。半角小文字とハイフンのみ。スラッシュコマンドとしての呼び出し名にもなる
- description フィールド
- スキルが何で、いつ使うかを1〜2文で書く欄。Claudeはこれを読んで自動で呼ぶか判断する
- progressive disclosure
- 段階的な開示。説明文だけ常時見せて、本体は呼ばれた時だけ読み込む方式
- コンテキスト
- Claudeが今の会話で覚えている情報の総量。容量に上限がある
- セッション
- Claude Code を起動してから終了するまでの1回分の会話
- バンドル済みスキル
- Claude Codeに最初から入っているスキル。<code>/simplify</code> <code>/debug</code> <code>/loop</code> などがある