Claude Code カスタムスラッシュコマンドは何に向いてる?作ってわかった知見まとめ

経緯

今年9月から11月ごろまで、開発のほぼ全てをClaude Codeに書いてもらうということをやっていました。

その際に、「Claude Codeのセッションログ(対話ログ)から日報を作成できるのでは」と思い、カスタムスラッシュコマンドを作成しました。

本記事では、実際に作成してみてわかったカスタムスラッシュコマンドに向いているタスクの条件や、作成時の知見をまとめました。

ターゲット読者

  • カスタムスラッシュコマンドを作ろうとしている人
  • もう作り始めている人

カスタムスラッシュコマンドとは

https://code.claude.com/docs/ja/slash-commands

  • スラッシュコマンド: /loginなどの、組み込みコマンド
  • カスタムスラッシュコマンド: スラッシュコマンドを自作
    • 「レビュー用のプロンプト」など、よく使うものを登録して使います。

Tips

そもそもスラッシュコマンド化に向いているタスクかを確認する

  • スラッシュコマンドの実態はプロンプトなので、AIでやりたいことなのかを判断する必要があります(スクリプトでよければスクリプトで)
  • また、Claude Codeを従量課金で使っている場合は、従量コストを考慮する必要があります(ブラウザ版で済むことはブラウザ版で)
  • HooksやSkillsとの使い分け
    • 簡単に試せるのはスラッシュコマンド:プロンプトだけでよいが、手動実行
    • 自動実行したい場合はHooksSkills
どれを作ればいいか早見表。ちなみに、このインフォグラフィックはgoogleスライドの画像生成サポート機能で作成しました。すごすぎる。

ディレクトリ構成

名前空間のディレクトリに置く

commands/に直接置くのではなく、namespaceディレクトリを挟むことが推奨されています。

これがあると管理がしやすく、使用時もわかりやすいです。

// △これでも動くが
.claude/
└── commands/
        └── command.md              # スラッシュコマンド本体

// ◯推奨
.claude/
└── commands/
        └── namespace/
                └── command.md      # スラッシュコマンド本体

コマンド例

// 名前空間なし
/command

// 名前空間あり
/namespace:command

コマンド内で参照するファイルも名前空間ディレクトリに置く

コマンドで使用するファイルがあれば、名前空間のディレクトリ内に入れると管理が楽です。

namespace/
├── command.md
└── templates/
        └── prompt.txt # サブエージェント用の指示など
  • 例えば、ブログテンプレートなどを参照したい時など
  • 後述するサブエージェントに出す指示も別ファイルに分けておくといいと思います。
  • 拡張子は.txtなどにしておいた方が良いです。
    • commands/以下の.mdファイルは、全てスラッシュコマンドと認識されてしまうため。

~/.claude/commands/に、名前空間ディレクトリのシンボリックリンクを貼る

// 開発Dir側
my-slash-commands/ # Gitで管理するリポジトリ
├── namespace/
│     ├── command.md
│     └── templates/
│             └── prompt.txt
└── README.md

// .claude側
~/.claude/commands/
└── (namespaceのシンボリックリンクを貼る)

// シンボリックリンクのコマンド例
ln -s ~/dev/my-slash-commands/namespace ~/.claude/commands/namespace

こうすると、

  • ~/.claude/commands/ではない場所でカスタムスラッシュコマンドを開発できます。
  • さらに、~/.claude/commands/は常に最新なのですぐに試すことができます。

重い処理を行うときは、サブエージェントの使用を明示

重い処理を行う際にはClaudeが自動でサブエージェントを使う場合があります。

この時に、サブエージェントに意図しない指示をして、意図しない結果を出すことがあります。

これを回避するために、プロンプトに以下を記載します。

  1. サブエージェントを使用することを明示する。
  2. サブエージェントに出す指示を明示する。

また、サブエージェントへの指示は、戻り値をパース可能な形式で定義すると良いです。

  • 例:「RESULT: {STATUS}」など
  • メリット:サブエージェントの結果によって分岐したり、並列したサブエージェントの結果を出力したりできます。

途中で止まらないための工夫

Claude Codeが、スラッシュコマンドの途中でこちらの入力を待つことがあります。

よく使うようなコマンドでは、いちいち確認してほしくないこともあると思います。

対策は以下。

allowed-toolsを記載

  • 冒頭に「allowed-tools:◯◯」のように記載。
  • 余計なものまで書かないように注意。

スラッシュコマンド内でスラッシュコマンドを使わない

内側のスラッシュコマンドの結果出力で満足して、ユーザーの入力を待つ状態になることがあるため。

出力が安定しないときに確認すること

サブエージェントの使用有無と指示を確認

先述した通り、サブエージェントの使用有無と指示を明示することが大切です。

スクリプト作成有無を確認

  • Claude Codeがスクリプトを書いた方が良いと判断し、スクリプト作成をしている場合があります。その結果、実行するたびに精度にばらつきが出てしまいます。
  • 対処:スクリプトを使った方が精度・効率が良かったかを切り分ける必要があります。
    1. スクリプトを使った方が良かった場合は、そのスクリプトを保存して、使うように明示
    2. スクリプトを使わない方が良かった場合は、スクリプトを作成せず行うことを明示

おわりに

今回の試作を通じて、反復作業をAIに任せる仕組みづくりは、作業の効率化にとても有効だと実感しました。
簡単で楽しく作れるので、みなさんもぜひ気軽にカスタムしてみてください!

Author

麻婆豆腐でご飯3合行きます。好きな寿司は生しらす。好きなラーメンはこってり。

m-yamadaの記事一覧

新規CTA