【Claude】「Skillsが発火しない」を解決:Slash Commandsで確実なワークフロー構築

「Skillsが発火しない」を解決:Claude Code Slash Commandsで確実なワークフロー構築

はじめに

ども!龍ちゃんです。以前「Claude Code Skills 実装ガイド:ローカルツールをスムーズに統合する方法」という記事を書きました。おかげさまで「Claude Code Skills」というキーワードでの検索流入も増えてきています。

前回の記事では、CLAUDE.md にツール説明を書いても無視される問題 を Skills で解決する方法を紹介しました。Skills の「自動認識」機能により、トリガーワードで自動的にツールが使われるようになる、という話でしたね。

しかし、しばらく使っているうちに 新たな課題 が見えてきました。

「Skills でも発火しないことがある」

そうなんです。Skills は確かに CLAUDE.md よりも認識されやすいのですが、100% 確実に発火するわけではないんですよね。特に複雑なワークフローや、必ず特定の手順を踏んでほしい処理では、「発火しない」問題が致命的になることがあります。

この記事では、その解決策として Slash Commands を紹介します。結論から言うと、確実に発火させたい処理は Slash Commands に移行するのがベストです。

記事の位置づけ

この記事は、前回の「Claude Code Skills 実装ガイド」の 続編・発展編 です。

前回記事今回の記事
CLAUDE.md → Skills への移行Skills/CLAUDE.md → Slash Commands への移行
「自動認識」のメリット推し「確実な発火」のメリット推し
Progressive Loading の説明読み込み順序・確実性の観点

前回記事を読んでいなくても理解できる内容ですが、併せて読むとより理解が深まります。

この記事で学べること

主要なポイント

  1. Skills/CLAUDE.md の限界: なぜ「発火しない」ことがあるのか
  2. Slash Commands の特徴: なぜ「確実に発火する」のか
  3. 移行事例: 実際の /review/research コマンドの実装
  4. 各要素の住み分け: Hooks / Skills / Commands / CLAUDE.md の使い分け

実践的なテクニック

  • Slash Commands のファイル構造と書き方
  • YAML Frontmatter の活用(allowed-tools, description)
  • AskUserQuestion を使ったインタラクティブなワークフロー
  • 複数エージェントの連携

前提条件

必要な知識

  • Claude Code の基本的な使用経験
  • CLAUDE.md の基本的な理解
  • Skills の概念(前回記事参照)

あると理解が深まる知識

  • サブエージェント(Subagents)の概念
  • Hooks の基本

問題提起: 「発火しない」問題

Skills の自動認識が機能しないケース

前回記事で紹介した Skills は、description に基づいてモデルが自動的に判断して適用します。しかし、この「自動判断」が裏目に出るケースがあります。

ケース1: 似たようなトリガーワードが複数ある

ユーザー: 「この記事をチェックして」

期待: technical-accuracy-reviewer が発火
実際: 単純にファイルを読んで「問題なさそうです」で終了

ケース2: コンテキストが長くなると判断が曖昧に

長い会話の後...

ユーザー: 「調べて」

期待: research Skill が発火してスコープ確認
実際: WebSearch で簡易検索して終了

ケース3: 複雑なワークフローの一部だけ実行

ユーザー: 「レビューして」

期待: 技術チェック → コンテンツ改善 → SEO評価 の順で実行
実際: 簡単なフィードバックだけで終了

CLAUDE.md が無視されるケース

CLAUDE.md に詳細なワークフローを書いても、同様の問題が起きます。

# CLAUDE.md

## レビューワークフロー
記事のレビューを依頼された場合は、以下の順序で実行してください:
1. technical-accuracy-reviewer でセキュリティチェック
2. content-reviewer でコンテンツ品質評価
3. blog-reviewer でSEO評価とタイトル生成

問題点:

  • CLAUDE.md は常時読み込まれるが、長くなると相対的に優先度が下がる
  • 「レビューして」という曖昧な指示では、このワークフローが適用されない
  • モデルの判断に依存するため、確実性がない

技術的な背景: 読み込みタイミングの違い

なぜこのような問題が起きるのか、読み込みタイミングの観点から説明します。

機能読み込みタイミング確実性
CLAUDE.mdセッション開始時に全文△ 埋もれる可能性
Skillsメタデータのみ → マッチ時に本文△ マッチ判断はモデル依存
Slash Commandsユーザーが /command 入力時◎ 100%確実

Slash Commands はユーザーが明示的に呼び出すため、読み込みタイミングに曖昧さがありません。/review と入力すれば、必ず review.md の内容が読み込まれます。

解決策: Slash Commands

Slash Commands とは

Slash Commands は、.claude/commands/ ディレクトリに配置した Markdown ファイルを、/コマンド名 で呼び出す機能です。

.claude/commands/
├── review.md      → /review で呼び出し
├── research.md    → /research で呼び出し
└── plan.md        → /plan で呼び出し

なぜ「確実に発火する」のか

Slash Commands が確実な理由は単純です:

  1. ユーザーが明示的に入力: /review と入力 = 意図が明確
  2. 即座に読み込み: コマンドファイルの内容が即座にプロンプトに追加
  3. モデル判断なし: Skills のような「使うかどうか」の判断がない
Skills の場合:
ユーザー入力 → モデルが判断 → Skill を使う/使わない

Slash Commands の場合:
ユーザー入力 /review → review.md を読み込み → 実行

Slash Commands のファイル構造

---
description: コマンドの説明(/help で表示される)
allowed-tools: Read, Task, AskUserQuestion
argument-hint: [ファイルパス]
---

# コマンドの指示内容

ここに Claude への指示を記述します。
$ARGUMENTS で引数を受け取れます。

YAML Frontmatter のフィールド:

フィールド必須説明
description任意/help で表示される説明
allowed-tools任意使用を許可するツール
argument-hint任意引数のヒント
model任意使用するモデル(haiku, sonnet など)

移行事例

実際に僕が Skills/CLAUDE.md から Slash Commands に移行した事例を紹介します。

事例1: CLAUDE.md → /review

Before: CLAUDE.md にワークフロー記載

# CLAUDE.md

## レビューワークフロー

記事のレビューを依頼された場合は、以下のエージェントを使い分けてください:

1. technical-accuracy-reviewer: 技術的正確性とセキュリティ
2. content-reviewer: コンテンツ品質の反復改善
3. blog-reviewer: 公開前の包括的評価
4. seo-title-generator: タイトルとメタディスクリプション

### 推奨フロー
1. まず technical-accuracy-reviewer で技術チェック
2. content-reviewer で品質改善(必要に応じて複数回)
3. blog-reviewer で最終確認

問題点:

  • 「レビューして」と言っても、このフローが適用されない
  • エージェント名を明示しないと使われない
  • 複数エージェントの連携が実行されない

After: /review コマンド

---
description: ブログ記事のレビューを実施。技術的正確性チェック、コンテンツ品質改善、SEO最適化、タイトル生成を支援します。
allowed-tools: Read, Task, AskUserQuestion
---

# Article Review Command

ブログ記事のレビューを実施します。ユーザーの目的や状況に応じて、最適なエージェントを選択・実行します。

## Usage

/review [ファイルパス]

## Available Review Agents

### 1. technical-accuracy-reviewer
**特化領域**: 技術的正確性 + セキュリティ

**こんな時に使う**:
- 初稿が完成した時
- 技術的な内容が正しいか心配
- セキュリティリスクがないか確認したい

### 2. content-reviewer
**特化領域**: コンテンツ品質(反復改善用)

**こんな時に使う**:
- 執筆中で何度も改善したい
- 可読性を向上させたい

### 3. blog-reviewer
**特化領域**: 包括的評価(最終確認用)

**こんな時に使う**:
- 公開前の最終確認
- コンテンツとSEOの両方を評価したい

## Execution Flow

### Step 1: 記事ファイルの確認
ユーザーがファイルパスを提供している場合、Read ツールで記事内容を確認。

### Step 2: ユーザーの意図判断
AskUserQuestion ツールを使用して、ユーザーに選択肢を提示。

### Step 3: エージェントの実行
選択に基づいて、適切なエージェントを Task ツールで実行。

改善点:

  • /review と入力すれば 確実に このワークフローが開始
  • AskUserQuestion でユーザーの意図を確認
  • 複数エージェントの連携が保証される

事例2: Skills → /research

Before: Skills として登録

# .claude/skills/research.md

---
name: research
description: Web調査を実施し、技術トピックについて調査します。
---

## When to Use

- ユーザーが「調べて」「調査して」と依頼した場合
- 技術トピックについて情報収集が必要な場合

## Commands

WebSearch と WebFetch を使用して調査を実施します。

問題点:

  • 「調べて」と言っても、簡易検索で終わることがある
  • 調査深度の確認なしに実行される
  • 調査結果の保存形式が統一されない

After: /research コマンド

---
description: Web調査を実施し、結果を docs/research に保存。技術トピック、公式ドキュメント、最新動向などを調査します。
argument-hint: [調査トピック]
allowed-tools: WebSearch, WebFetch, Read, Write, AskUserQuestion
---

# Research Command

## Workflow

### Step 1: Clarify Research Scope

Before starting research, use AskUserQuestion to clarify:

- 調査の深さ(クイック概要 / 標準調査 / ディープダイブ)
- 情報源の信頼性要件(高:公式のみ / 中:推奨 / 低:幅広く)

### Step 2: Conduct Research

Use WebSearch and WebFetch to gather information.

### Step 3: Save Results

Save the research document to docs/research/ with format:
YYYY-MM-DD-{topic-slug}.md

改善点:

  • /research トピック と入力すれば 確実に スコープ確認から開始
  • 調査深度をユーザーが選択できる
  • 結果が統一されたフォーマットで保存される

各要素の住み分け

ここまでの内容を踏まえて、Claude Code の各拡張機能の住み分けを整理します。

呼び出し方式による分類

呼び出し方式機能確実性適したユースケース
イベント駆動Hooks◎ 100%決定的処理(フォーマット、権限制御)
ユーザー明示的Slash Commands◎ 100%確実に発火させたいワークフロー
モデル自動判定Skills, Agents△ 不確実自動適用してほしい知識・処理
常時読み込みCLAUDE.md△ 埋もれるプロジェクト全体の指針

選択フローチャート

タスクを自動化したい
│
├── LLMに依存しない決定的処理?
│   └── Yes → Hooks
│       ├── ツール実行前後 → PreToolUse / PostToolUse
│       └── 権限制御 → PermissionRequest
│
├── 確実に発火させたい?
│   └── Yes → Slash Commands
│       └── /review, /research など
│
├── 自動で判断して適用してほしい?
│   └── Yes → Skills / Agents
│       └── トリガーワードで自動認識
│
└── プロジェクト全体に適用?
    └── Yes → CLAUDE.md
        └── 開発ガイドライン、アーキテクチャ情報
タスクを自動化したい
│
├── LLMに依存しない決定的処理?
│   └── Yes → Hooks
│       ├── ツール実行前後 → PreToolUse / PostToolUse
│       └── 権限制御 → PermissionRequest
│
├── 確実に発火させたい?
│   └── Yes → Slash Commands
│       └── /review, /research など
│
├── 自動で判断して適用してほしい?
│   └── Yes → Skills / Agents
│       └── トリガーワードで自動認識
│
└── プロジェクト全体に適用?
    └── Yes → CLAUDE.md
        └── 開発ガイドライン、アーキテクチャ情報

具体的な使い分け例

ユースケース推奨機能理由
記事レビュー/review複雑なワークフロー、確実に実行したい
Web調査/researchスコープ確認が必須、結果を統一フォーマットで保存
ブログスクレイピングSkillsURL を渡せば自動で判断してほしい
自動フォーマットHooks (PostToolUse)ファイル編集後に必ず実行
コーディング規約CLAUDE.md常に意識してほしい全体ルール

ベストプラクティス

1. 「確実性」が必要かで判断する

Slash Commands を選ぶべきケース:

  • 複数ステップのワークフロー
  • ユーザーへの確認が必須のプロセス
  • 結果のフォーマットを統一したい処理
  • 「毎回同じように実行してほしい」処理

Skills のままでよいケース:

  • 単純なツール呼び出し
  • トリガーワードが明確で誤認識がない
  • 「自動で判断してくれればOK」な処理

2. AskUserQuestion を活用する

Slash Commands では、AskUserQuestion ツールを使ってユーザーの意図を確認できます。

## Step 1: ユーザーの意図確認

AskUserQuestion を使用して、以下を確認してください:

- 記事の現在の状態(初稿/執筆中/公開前)
- 実行したいレビュー項目(技術チェック/コンテンツ/SEO)

これにより、曖昧な指示でも適切な処理を実行できます。

3. allowed-tools で安全性を確保

---
allowed-tools: Read, Task, AskUserQuestion
---

コマンドで使用するツールを制限することで、意図しない操作を防げます。

4. 段階的に移行する

一度にすべてを移行する必要はありません:

  1. まず 問題が起きているワークフロー を Slash Commands に移行
  2. 効果を確認してから、他のワークフローも検討
  3. Skills で問題なく動いているものは、そのまま

まとめ

この記事では、Claude Code Skills の「発火しない」問題と、その解決策としての Slash Commands を紹介しました。

結論: 確実性で選ぶ

確実性機能使いどころ
◎ 100%Hooks決定的処理(フォーマット等)
◎ 100%Slash Commands確実に発火させたいワークフロー
△ 不確実Skills / Agents自動判断でOKな処理
△ 埋もれるCLAUDE.mdプロジェクト全体の指針

前回記事との関係

  • 前回: CLAUDE.md → Skills への移行で「自動認識」を実現
  • 今回: Skills → Slash Commands への移行で「確実な発火」を実現

どちらが優れているという話ではなく、適材適所で使い分けることが重要です。

次のステップ

  1. 「発火しない」問題が起きているワークフローを特定
  2. そのワークフローを Slash Commands に移行
  3. 効果を確認し、必要に応じて他も移行

参考リンク

公式ドキュメント

関連記事


ここまで読んでいただき、ありがとうございました!

Skills と Slash Commands、それぞれの特性を理解して使い分けることで、Claude Code との協業がさらにスムーズになります。ぜひ、この記事を参考に、あなたのプロジェクトでも実践してみてください。

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です