【完全ガイド】Claude Code Skills 入門 - カスタムスキルの作り方

この記事でわかること
- Skills が何で、どこに置くとどう読まれるのか(パーソナル・プロジェクト・エンタープライズ・プラグインの 4 種類と優先順位)
- SKILL.md の frontmatter の各フィールドが実際に何をするのか
- allowed-tools は「制限」ではなく「事前承認」であるということと、本当に制限する手段
- コミットメッセージ生成 Skill を例にした作成手順
Claude Code がインストール済みで、基本的なコマンドライン操作と Markdown がわかれば十分です。
はじめに
Claude Code を使っていると、「毎回同じような指示を出すのが面倒」「チームで共通のワークフローを使いたい」と思うことがありませんか?
そんな課題を解決するのが
Skills 機能です。Skills を使えば、Markdown ファイルを配置するだけで Claude Code の動作をカスタマイズできます。
Claude Code Skills とは
Skills は、Claude Code の機能を拡張するための「指示書」です。Markdown ファイル形式で、特定のタスクを実行する方法を Claude に教えることができます。
Skills の特徴
- 自動発見 - Claude が自動的に適切な Skill を見つけて使用
- チーム共有 - プロジェクトに配置すればチーム全員が使える
- 承認の前倒し - よく使うツールを先に許可して、確認プロンプトを減らせる
- 複数ファイル対応 - 複雑なワークフローは複数ファイルに分割可能
Skills vs スラッシュコマンド
.claude/commands/deploy.md と .claude/skills/deploy/SKILL.md はどちらも /deploy を作り、同じように動きます(既存の .claude/commands/ はそのまま使えます)。以下の対比は、どちらの形式で書くかを選ぶときの目安として読んでください。| 項目 | Skills | スラッシュコマンド |
|---|---|---|
| 発見方法 | 自動 | 手動(/コマンド) |
| 複雑さ | 複数ファイル対応 | 単一ファイル |
| 用途 | 複雑なワークフロー | シンプルなプロンプト |
Skills のディレクトリ構成
Skills は保存場所によって 4 つの種類があります。
1. パーソナル Skills
~/.claude/skills/
└── my-skill/
└── SKILL.mdあなた専用の Skill です。すべてのプロジェクトで使用できます。
2. プロジェクト Skills
.claude/skills/
└── team-skill/
└── SKILL.mdプロジェクトリポジトリに配置。チームメンバー全員が使用できます。
3. エンタープライズ Skills
組織が配布する Skill です。全ユーザーに適用され、上書きされません。
4. プラグイン Skills
プラグインが持ち込む Skill です。プラグイン名:skill名 という名前空間に入るので、他と名前が衝突しません。
SKILL.md の書き方
すべての Skill に必須なのは
SKILL.md ファイルです。フロントマター(YAML)と本文(Markdown)で構成されます。
基本構造
---
name: my-skill
description: このSkillの説明。いつ使うかを記載(Claudeが自動発見する判断基準)
allowed-tools: Read, Bash, Write
---
# Skill のタイトル
## 使用ルール
1. 最初にこれをする
2. 次にこれをする
3. 最後にこれをする
## コード例
echo "Hello, Skill!"
フロントマターの項目
| フィールド | 必須 | 説明 |
|---|---|---|
| name | ✅ | Skill名(小文字・ハイフンのみ) |
| description | ✅ | 説明(自動発見の判断基準) |
allowed-tools |
- | 確認なしで使ってよいツール(制限ではなく事前承認) |
disallowed-tools |
- | 使わせないツール。利用可能プールから取り除く |
disable-model-invocation |
- | true で Claude の自動起動を禁止(明示呼び出し限定) |
user-invocable |
- | false で / メニューから隠す |
context |
- | fork で subagent の別 context で実行 |
allowed-tools は「制限」ではありません。ここは筆者も長らく誤解していた部分なので、はっきり書いておきます。このフィールドは、列挙したツールにそのターンの間だけ承認プロンプトなしで使える権限を与えるだけで、列挙外のツールを禁止しません(通常の permissions に従って使えます)。権限は次のメッセージを送った時点で失効します。
本当に「使わせない」を実現したいなら disallowed-tools、リポジトリ全体で禁止したいなら settings.json の permissions.deny を使います。
実践: コミットメッセージ生成 Skill を作る
実際に Skill を作成してみましょう。git の差分からコミットメッセージを生成する Skill を例にします。
Step 1: ディレクトリ作成
mkdir -p ~/.claude/skills/commit-helperStep 2: SKILL.md 作成
---
name: commit-helper
description: git の差分からコミットメッセージを生成します。「コミットメッセージを作って」「commit message」と言われた時に使用。
allowed-tools: Bash, Read
---
# コミットメッセージ生成
## 手順
1. `git diff --staged` でステージされた変更を確認
2. 変更内容を分析
3. Conventional Commits 形式でメッセージを提案
## フォーマット
<type>(<scope>): <subject>
<body>
### type の種類
- feat: 新機能
- fix: バグ修正
- docs: ドキュメント
- style: フォーマット
- refactor: リファクタリング
- test: テスト
- chore: その他Step 3: 動作確認
Claude Code で「コミットメッセージを作って」と言うと、Skill が自動で発見され使用されます。
Tips & ベストプラクティス
Bash とツール名だけ書くと任意のシェルコマンドが無確認で走る状態になります。Bash(git:*) のように絞ってください。他人の書いた Skill を入れるときは、この行を読んでから信頼しましょう。disable-model-invocation: true を付けて、自分が /name と打ったときだけ動くようにします。参考リンク
- Claude Code: Skills(公式)
- Claude Code: Settings(公式)
- Conventional Commits
- Claude Code の skill と slash command の境界線(別記事)
まとめ
Claude Code Skills を使えば、繰り返しの作業を自動化し、チームで共通のワークフローを共有できます。
- Skills は Markdown ファイルを配置するだけで使える
- パーソナル(
~/.claude/skills/)とプロジェクト(.claude/skills/)が基本。同名ならパーソナルが勝つ - description をしっかり書くと自動発見されやすい
allowed-toolsは事前承認であって制限ではない。制限したいならdisallowed-toolsかpermissions.deny- 勝手に走られると困るものは
disable-model-invocation: true
ぜひ自分だけの Skill を作ってみてください!
更新履歴
- allowed-tools の説明を訂正。「使用可能ツールの制限」「allowed-tools でセキュリティを確保」と書いていたが、実際は列挙したツールにそのターン限りの事前承認を与えるだけで、列挙外を禁止するものではない(公式ドキュメントで確認)。本当に制限する手段として disallowed-tools / permissions.deny を追記。置き場所が「4つ」と書きながら 2 つしか挙げていなかったのを、エンタープライズ・プラグインを加えて補完し、優先順位を公式の記述に合わせて明記。frontmatter 表に disallowed-tools / disable-model-invocation / context を追加。custom commands が skills に統合されたことを注記。参考リンクを現行の公式ドキュメント URL に更新。コードブロックの言語指定を plain text から bash に修正。「この記事でわかること」「対象読者」「前提条件」を概要プロパティへ移動。


