Claude Code Skillsの 作り方と 制作依頼への 使い方

毎回プロンプトに貼っていた制作依頼の確認手順を.claude/skills/production-review/SKILL.mdにまとめ、/production-reviewで呼び出す手順です。配布教材のコピー先、SKILL.mdの全文、frontmatterの役割、架空の依頼8件の照合方法、うまく動かないときの戻し方を説明します。照合結果は1回だけの実演です。
毎回貼っている確認手順をSkillにする
この記事では、架空の制作依頼8件(requests.json)と判定規則(judging-rules.md)を置いたフォルダで /production-review を呼び出し、8件それぞれの判定をJSONで受け取ります。判定規則は11条あり、記録するissue codeは10種類です。題材は制作依頼の確認をClaude Codeで進める記事で扱った作業です。前の記事では毎回プロンプトで指示していましたが、ここではその指示をSkillとして保存し、1行で呼び出せるようにします。
Claude Codeの公式ドキュメントは、同じ指示やチェックリスト、複数ステップの手順を何度もチャットに貼っているならSkillを作る場面だと説明しています。Skillの本文が読み込まれるのは使ったときだけです。メモリのドキュメントでも、CLAUDE.mdには毎回のセッションで必要な事実を書き、複数ステップの手順はSkillへ移すよう案内されています。この練習では、内容ごとに置き場所を次のように分けます。
横にスクロールして比較できます
| 内容 | 置き場所 | 理由 |
|---|---|---|
| どの作業でも前提になる事実 | CLAUDE.md(この記事の手順では使わない) | 毎回のセッションで読み込まれる |
| 読む順番と出力形式 | SKILL.md | 呼んだときだけ必要な手順 |
| 判定の基準 | judging-rules.md | 手順と分けておけば規則だけを差し替えられる |
| 正解 | answer-key/expected-results.json | 実行フォルダにはコピーせず、Claudeに見せない |
CLAUDE.mdとSkillの使い分けはCLAUDE.mdの書き方ガイドでも説明しています。
練習フォルダにSkillを配置する
使う教材は2つです。練習セット(production-review-practice/)とSkill教材(skills-and-reviewers/)を、同じフォルダの中に展開してください。練習セットの中身は次の2つに分かれています。
exercise/:入力の3ファイル(requests.json、judging-rules.md、prompt.txt)answer-key/:期待結果と照合スクリプト
期待結果をAIに見せないよう、作業フォルダには exercise/ の中身だけをコピーします。そこへSkill教材の .claude フォルダを追加してください。
# /path/to は各ZIPを展開した実際の場所へ置き換える
mkdir -p ~/cc-practice/request-check
cd /path/to/production-review-practice
cp -R exercise/. ~/cc-practice/request-check/
cd /path/to/skills-and-reviewers
cp -R .claude ~/cc-practice/request-check/.claude は隠しフォルダです。Finderで見えなくてもコピーされています。prompt.txt は通常のプロンプト指示で使うファイルで、Skillで実行するこの記事では使いません。.claude/agents/ にある2つの担当定義も、ここでは使いません。コピー後のフォルダは次の形になります。
~/cc-practice/request-check/
├── requests.json
├── judging-rules.md
├── prompt.txt
└── .claude/
├── agents/
│ ├── request-checker.md
│ └── claim-checker.md
└── skills/
└── production-review/
└── SKILL.md.claude/skills/<skill-name>/SKILL.md は、プロジェクト単位のSkillを置く場所です。このフォルダで起動したセッションで読み込まれます。SKILL.md の全文は次のとおりです。
---
name: production-review
description: 架空の制作依頼について不足と矛盾を確認し確認先を返す
disable-model-invocation: true
allowed-tools: Read
---
# 制作依頼の確認
1. 作業フォルダの requests.json と judging-rules.md を読む
2. IDを一度ずつ残して全件を確認する
3. 空欄は補完せず矛盾とともに issue_codes に記録する
4. results 配列に id、decision、issue_codes、confirmation を含むJSONを返す
5. 外部送信と制作開始は行わないfrontmatterの役割と誤解しやすい点
--- で囲まれた部分には、呼び出し方と権限の扱いを書きます。
横にスクロールして比較できます
| 項目 | この練習での値 | 役割 | 注意点 |
|---|---|---|---|
| name | production-review | / に続けて入力するコマンド名 | 省略するとディレクトリ名が使われる |
| description | 確認内容の要約 | Skillの用途を説明する | disable-model-invocation: true のときはClaudeのコンテキストに載らない |
| disable-model-invocation | true | Claudeが自分の判断でSkillを呼ばないようにする | サブエージェントへの事前読み込みにも使われなくなる |
| allowed-tools | Read | Skillを呼んだターンに限り、Readを確認なしで使えるようにする | 他のツールを禁止する設定ではない |
disable-model-invocation: true を付けておけば、確認を始めるタイミングを人が決められます。
allowed-tools はよく誤解される項目です。ドキュメントによると、この項目は列挙したツールをそのターンだけ事前承認するものです。次のメッセージを送ると承認は消えます。また、列挙していないツールも使える状態のまま残ります。ワークスペースの信頼確認とは関係なく適用されますが、組織が allowManagedPermissionRulesOnly を設定している環境では無視されます。つまり allowed-tools: Read と書いても、読むことしかできないSkillにはなりません。共有ドライブや社内サービスの認証、最小権限の設定を代わりに担うこともできません。
ツールを外したい場合は、範囲に合わせて使い分けます。
Skillを使っている間だけ外す:
disallowed-toolsすべてのプロンプトで止める:権限設定のdenyルール
毎回必ず守らせたい規則がある:フック
本文5行目の「外部送信と制作開始は行わない」も、CLAUDE.mdと同じくClaudeへの指示です。強制力はありません。
/production-reviewを実行して8件を照合する
今回の実演で使ったコマンドは次のとおりです。printモード(-p)に /production-review の1行だけを渡しています。
cd ~/cc-practice/request-check
claude -p "/production-review" --tools Read,Skill --allowedTools Read,Skill --setting-sources project --strict-mcp-config --mcp-config '{"mcpServers":{}}'--setting-sources project は、読み込む設定の範囲をprojectに絞る指定です。--strict-mcp-config と空の --mcp-config を組み合わせて、MCPサーバーを使わない条件にしています。実演の記録は次のとおりです。
横にスクロールして比較できます
| 項目 | 記録 |
|---|---|
| 実行日 | 2026年10月14日 |
| Claude Code | 2.1.285 |
| モデル | claude-opus-5-5 |
| 実行回数 | 独立した1回 |
| 終了コード | 0 |
| 経過時間 | 10.945秒 |
| CLIが報告したAPI換算額 | 0.0940934 USD(実際の追加請求額ではない) |
| 結果の保存 | CLIが返したJSONを、ホスト側のスクリプトが actual-results.json として保存 |
| 人による確認と修正の時間 | 未記録 |
今回の実演では、Claude CodeがWriteでファイルを書き出す操作は観測していません。手元で再現するときは、出力された results 配列のJSONを ~/cc-practice/request-check/actual-results.json として自分で保存してください。
対話モードで試すこともできます。その場合は作業フォルダで claude を起動し、メッセージの先頭に /production-review を入力します。返ってきたJSONは同じように保存してください。ただし、対話モードでの実行は今回計測していません。
返ってきたJSONから、results 配列の要素を2件抜粋します。R06は、尺の値が2か所で食い違っている依頼です。
{
"results": [
{
"id": "R01",
"decision": "ready",
"issue_codes": [],
"confirmation": "問題なし。すべての必須項目がそろっています。"
},
{
"id": "R06",
"decision": "hold",
"issue_codes": [
"conflicting_duration"
],
"confirmation": "duration_seconds(15)と other_duration_seconds(30)が一致しません。どちらの尺が正しいか確認してください。"
}
]
}これは2件の抜粋です。照合用には実際に返った8件すべてを保存します。
答え合わせは練習セットの最上位フォルダに戻って行います。answer-key/ は作業フォルダにコピーしません。
cd /path/to/production-review-practice
python3 answer-key/check_result.py ~/cc-practice/request-check/actual-results.json照合するのは id、decision、issue_codes の3項目です。confirmation の文章は照合の対象外です。今回は8件すべてが一致し、IDの重複もありませんでした。
横にスクロールして比較できます
| ID | 入力の状態 | decision | issue_codes |
|---|---|---|---|
| R01 | 全項目あり | ready | なし |
| R02 | 目的と対象者が空欄 | hold | missing_objective, missing_target_audience |
| R03 | 素材の許諾がunknown | hold | asset_permission_unconfirmed |
| R04 | 納期と確認者が空欄 | hold | missing_deadline, missing_reviewer |
| R05 | 尺が0 | hold | invalid_duration |
| R06 | 尺が2か所で不一致 | hold | conflicting_duration |
| R07 | 訴求と根拠が空欄 | hold | missing_approved_claim, missing_source_ref |
| R08 | 納期が基準日より前 | hold | past_deadline |
この結果は、次の点に注意して読んでください。
Skillの効果は示していない:同じ練習セットをプロンプトで直接指示した別の試行(計測教材の
run-log.csvにあるbaselineの例)でも、8件すべてが一致しています。そのため、Skillで精度が上がったとも、時間が短くなったとも言えません。確かめられたのは、長い指示を貼り直さず1行で同じ確認を呼び出し、照合した3項目が期待結果と一致したことだけです。どの依頼でも同じになるとは限らない:結果は1回の実行に基づくものです。
読み込みの経路は断言できない:ツール呼び出しの記録はすべては保存していません。そのため、ClaudeがSKILL.mdや入力ファイルをどの経路で読んだかは断言できません。
実行の記録は計測教材の measurement-and-updates/observed/skill.json に収録しています。
うまく動かないときの戻し方
問題が起きたら、まずどの段階で止まっているかを切り分けます。表の手順は公式ドキュメントに基づくもので、今回の実演では試していません。
横にスクロールして比較できます
| 症状 | 確認すること | 戻し方 |
|---|---|---|
| /production-review が見つからない | 作業フォルダに .claude/skills/production-review/SKILL.md があるか | 隠しフォルダのコピー漏れがないかを確かめる。対話セッションの起動後に .claude/skills/ を作った場合は、/reload-skills を実行するか新しいセッションで開き直す |
| Claudeが自分の判断でSkillを使ってしまう | 1行目が --- になっているか。項目名の綴りが正しいか | YAMLの解析に失敗すると、本文は読み込まれても設定はすべて空になる。綴りを間違えた項目もエラーなしで無視される |
| check_result.py が見つからない | 練習セットの最上位フォルダにいるか | production-review-practice/ で python3 answer-key/check_result.py の形で実行する |
| 照合で不一致が出る | どのIDのどのコードが違うか | 期待結果は書き換えない。規則とSKILL.mdの書き方を見直し、新しいセッションで再実行する |
| 長い会話の途中で手順を守らなくなる | 会話が圧縮されていないか | もう一度 /production-review を呼ぶ。重要な指示はSKILL.mdの上のほうに書く |
| しばらく使わない | 他の作業に影響していないか | .claude/skills/production-review/ を削除する。ファイルを残したまま隠すなら skillOverrides で "off" にする |
frontmatterの解析エラーは、claude --debug で起動するか、v2.1.233以降で使える次のコマンドで確認できます。
claude plugin validate .claude/skills対話モードでSkillを直したら、Skillを書いていたときの会話を引き継がず、新しいセッションで試してください。ドキュメントの評価手順にあるとおり、作成時の会話が残っていると指示の書き漏れが見えにくくなります。
配布前に再実行して同じ条件を確かめる
今回の結果は1回分だけです。チームへ配る前に、次の手順で再実行してください。
空の作業フォルダを用意し、
exercise/の3ファイルと.claudeフォルダだけをコピーする上と同じ
claude -pコマンドで/production-reviewを実行する出力を
actual-results.jsonに保存し、練習セットの最上位フォルダでanswer-key/check_result.pyを使って照合するClaude Codeのバージョン、モデル、一致件数、確認と修正にかかった時間を計測教材の
run-log.csvに記録する
初回と再実行で照合結果がそろえば、少なくともその環境では、同じ条件で確認を呼び出せたと言えます。
チームで共有するときは、.claude/skills/ をリポジトリにコミットします。その前に、配布先の権限設定や組織の管理設定のもとで実際に動くかを試してください。allowed-tools の扱いは環境によって変わります。
参考情報