この記事について
Claude Codeで「カスタムスラッシュコマンド」を作る手順を、実際に動かした例つきでまとめます。あわせてSkills(SKILL.md)との違い・使い分けも紹介します。
カスタムスラッシュコマンドとは
/コマンド名 と入力すると、あらかじめ用意しておいたMarkdownファイルの内容がClaudeへの指示として渡される機能です。定型的な指示を毎回書き直さずに呼び出せます。
配置場所
| スコープ | パス | 用途 |
|---|---|---|
| プロジェクト用 | <プロジェクト>/.claude/commands/コマンド名.md |
そのリポジトリだけで使う |
| ユーザー全体用 | ~/.claude/commands/コマンド名.md |
全プロジェクト共通で使う |
サブディレクトリを切ると /カテゴリ:コマンド名 のように名前空間化できます(例: .claude/commands/docker/ps.md → /docker:ps)。
手順1: 最小サンプルを作る(/greet <name>)
.claude/commands/greet.md を新規作成し、以下の内容を書きます。
---
description: 指定した名前に挨拶する(スラッシュコマンドの動作確認用サンプル)
argument-hint: [name]
---
$ARGUMENTS さんに、元気か尋ねる短い挨拶メッセージを日本語で書いてください。
保存するだけで完了です。Claude Code自体の再起動は不要で、次にセッションを開始するか/メニューを開いた時点で自動認識されます。
動作確認
/greet 太郎 と入力すると、$ARGUMENTS の部分が「太郎」に置換された指示文がClaudeに渡り、次のように挨拶メッセージが返ってきます。
太郎さん、こんにちは!お元気ですか?最近どうお過ごしですか?
手順2: 実用サンプルを作る(/dockps)
コマンド実行結果を埋め込む例として、Dockerコンテナの稼働状況を確認するコマンドを作ります。
.claude/commands/dockps.md
---
description: 現在のDockerコンテナ稼働状況を確認する
allowed-tools: Bash(docker compose ps:*)
---
以下は現在のDockerコンテナ状況です。
!\`docker compose ps\`
異常終了しているコンテナがあれば指摘してください。
!\command` と書いた部分は、コマンドを実行してその出力結果を本文に埋め込む記法です。allowed-tools` で使ってよいBashコマンドの範囲を事前指定しておくことで、実行のたびに許可プロンプトが出るのを防げます。
frontmatterで指定できる主なフィールド
| フィールド | 内容 |
|---|---|
description |
コマンドの説明。/help一覧やClaudeの自動判断材料に使われる |
argument-hint |
ユーザーへの引数ヒント表示(例: [name]) |
allowed-tools |
このコマンド実行時に無許可で使えるツール |
model |
このコマンド専用にモデルを指定 |
disable-model-invocation |
trueにすると、Claudeが自律的に呼ぶことを禁止し、ユーザーが手動で/と打った時だけ動く |
本文中で使える特殊記法
-
$ARGUMENTS… 引数全体を渡す -
$1,$2… 位置引数(bashの$1と同様の考え方) -
!`bashコマンド`… コマンドを実行し、その出力結果を埋め込む -
@ファイルパス… 指定したファイルの内容を参照・埋め込む
Skills(SKILL.md)との違い
| 観点 | スラッシュコマンド | Skills |
|---|---|---|
| ファイル形式 |
.claude/commands/name.md の単一Markdown |
.claude/skills/name/SKILL.md を含むディレクトリ(補助スクリプトや参照ファイルを同梱できる) |
| 呼び出し方 | ユーザーが明示的に /name と入力した時のみ |
ユーザーの/name呼び出しに加えて、Claudeが会話の文脈からdescriptionを見て自律的に判断して呼ぶ |
| 得意なこと | 定型的な短い指示。確実に同じ動作をさせたい処理 | 複雑な手順、複数ファイルの参照、条件分岐を伴う判断が必要な処理 |
| 実行の確実性 | 高い(人間が明示的に起動するので誤発火しない) |
descriptionの書き方次第で発火精度が変わる |
実装上はほぼ同一の機構で、.claude/commands/*.md に置いたファイルはSkillとしても認識されます(今回作成したgreet/dockpsもSkill一覧に表示されました)。主な違いは「ユーザーが明示的に呼ぶか」「Claudeが文脈から自動判断して呼ぶか」という発火条件の違いです。
メリット・デメリット
スラッシュコマンド
- 良い点: シンプルで見通しが良い、誤動作しない、すぐ作れる
- 弱い点: 自動発火はしない(毎回
/で呼ぶ必要がある)、複雑な多段階ロジックには不向き
Skills
- 良い点: 会話の流れから自動的に呼ばれる、補助ファイル(スクリプト・参照資料)を同梱できる、複雑な判断ロジックを書ける
- 弱い点:
descriptionの精度が発火の質を左右する(曖昧だと誤って呼ばれたり、逆に呼ばれるべき時に呼ばれなかったりする)
使い分けの目安
- 毎回自分で明示的に打つ短い定型処理 → スラッシュコマンド(例:
docker compose ps確認、git status確認など) - 文脈に応じてClaudeに自動判断させたい/複数ファイルや手順書を伴う複雑な処理 → Skills
まずはスラッシュコマンドで小さく試して、内容が複雑化・自動化したくなったらSkillsに昇格させる、という流れが無理がないと思います。
動作反映・確認方法
-
.claude/commands/配下にMarkdownファイルを保存する - Claude Code自体の再起動は不要
-
/とだけ入力するとコマンド一覧が表示されるので、そこで存在確認できる -
/コマンド名 引数の形で実行する
不要になった場合はファイルを削除するだけで、コマンド/Skill一覧からも消えます。
まとめ
カスタムスラッシュコマンドは、Markdownファイル1つで定型処理を/nameから呼び出せる手軽な仕組みです。自動判断させたい複雑な処理はSkillsに任せつつ、確実に自分で呼びたい処理はスラッシュコマンドとして切り出す、という使い分けがおすすめです。