Claude Codeのカスタムスラッシュコマンドをマスターして開発効率を上げよう

こんにちは!クラスター株式会社でソフトウェアエンジニアをしている@TAAT626です。

最近クラスターの開発チームで行っているAI勉強会で「カスタムスラッシュコマンドをマスターして開発効率を上げよう」という発表をしましたので、その発表資料を共有しながらClaude Codeのカスタムスラッシュコマンドについて紹介したいと思います。

発表資料はこちら

speakerdeck.com

スラッシュコマンドとは?

スラッシュコマンドとは、Claude Codeのインタラクティブセッション中に、/で始まるコマンドを入力することで、特定の機能を素早く実行できる仕組みです。公式の組み込みのスラッシュコマンドも多く用意されています。

/add-dir /agents /bug /clear /compact /config /cost 
/doctor /help /init /login /logout /mcp /memory /model 
/permissions /pr_comments /review /status 
/terminal-setup /vim

組み込みスラッシュコマンド

/agents

専門的なタスク用のサブエージェントを作成・管理するコマンドで、対話的に進めていくとサブエージェントを作成できます。

/clear

会話履歴(コンテキストウィンドウ)をクリアするコマンド。作業の精度を上げる・パフォーマンス低下を防ぐためにも、タスクごとにクリアさせると良いでしょう。

/compact

会話を圧縮するコマンドで、引数でフォーカスする内容を指定できます。

/mcp

MCPサーバー接続とOAuth認証を管理するコマンド

/memory

ProjectやUserのCLAUDE.mdメモリファイルを編集するコマンドで、直接メモリファイルを開いてくれるので便利です。 また、インポートしているmdファイルもリストアップしてくれます。

カスタムスラッシュコマンドを作る

.claude/commands/にMarkdownファイルを配置することで、個人やプロジェクトで使える独自のコマンドを作成できます。よく使うプロンプトをカスタムスラッシュコマンドにすることで、作業効率を向上させることができます。

構文

/<command-name> [arguments]

# <command-name>: Markdownファイル名から派生した名前(.md拡張子なし)
# [arguments]: コマンドに渡されるオプション引数

プロジェクトコマンド

リポジトリに保存され、チームと共有されるコマンドで、.claude/commands/に配置します。
※コマンドの補完や/helpでリストされる時、コマンド説明の後に(project)と表示される

個人コマンド

すべてのプロジェクトで利用可能なコマンドで、~/.claude/commands/に配置します。
※コマンドの補完や/helpでリストされる時、コマンド説明の後に(user)と表示される

※(user)と表示されるはずですが、発表時点ではuserではなくproject, gitignoredと表示されていて、関連issueも上がっていました

引数

$ARGUMENTS

$ARGUMENTSプレースホルダーは、コマンドに渡された全ての引数をキャプチャするので、そのまま$ARGUMENTSで参照できます。

# test.md
以下の内容を出力してください
引数は $ARGUMENTS です

> /test 123 high-priority
引数は 123 high-priority です

$1, $2

シェルスクリプトと同じような位置パラメータを使って、特定の引数に個別にアクセスできます。ただし、引数の順番を間違えると違う引数を参照してしまうことに注意が必要です。

# test.md
以下の内容を出力してください
number: $1
priority: $2
assignee: $3

> /test 123 high TAAT
number: 123
priority: high
assignee: TAAT

プロンプトテンプレート

スラッシュコマンドのページには明確に記載されていませんが、プロンプトテンプレートの変数を使った方法でも、Key-Value形式で引数を受け取れそうです。

以下の通り、number:123のようなKey-Value形式で引数を与えて、プロンプト内で{{ number }}のようにプロンプトテンプレートで参照すれば、Key-Valueの順番に関係なく引数を参照することができます。

# test.md
以下の内容を出力してください
number: {{ number }}
priority: {{ priority }}
assignee: {{ assignee }}

> /test priority:high number:123 assignee:TAAT
number: 123
priority: high
assignee: TAAT

Bashコマンド実行

!プレフィックスを使って、スラッシュコマンドが実行される前にbashコマンドを実行でき、出力はコマンドコンテキストに含まれるので、その出力をもとにさらに作業させることができます。

以下は公式ドキュメントにあるgit commitを作成するスラッシュコマンドの例ですが、!プレフィックスでgit diffでファイル差分をチェックしたり、git logで直近のコミットをチェックして、それらの情報をもとにコミットを作成しています。

---
allowed-tools: Bash(git add:*), Bash(git status:*), Bash(git commit:*)
description: Create a git commit
---

## Context

- Current git status: !`git status`
- Current git diff (staged and unstaged changes): !`git diff HEAD`
- Current branch: !`git branch --show-current`
- Recent commits: !`git log --oneline -10`

## Your task

Based on the above changes, create a single git commit.

フロントマター

コマンドファイルはYAML Front Matterをサポートしていて、コマンドのメタデータを記述できます。これらを書いておくと、コマンドの補完や/helpでリストされる時にコマンドの説明が表示されたり、引数として何を渡せばいいのかがわかるので便利です。

  • allowed-tools: コマンドが使用できるツールのリスト(デフォルトでは会話から継承)
  • argument-hint: コマンドに渡す引数、コマンドの自動補完で表示される
  • description: コマンドの簡潔な説明(デフォルトではプロンプトの最初の行)
  • model: 指定するモデル(デフォルトでは会話から継承)
---
allowed-tools: Bash(git add:*), Bash(git status:*), Bash(git commit:*)
argument-hint: [message]
description: Create a git commit
model: claude-3-5-haiku-20241022
---

Create a git commit with message: $ARGUMENTS

カスタムスラッシュコマンドの活用例

実際に活用している便利なカスタムスラッシュコマンドについて紹介します。

  • Draft PRを作る
  • セッションの内容をもとに調査レポートを作る
  • ビルド&実行(iOS)
  • Renovateによるライブラリ更新の妥当性チェック

Draft PRを作る

クラスターの開発ではJIRAを使って課題を管理しており、そのJIRAチケットの番号やURL、ベースブランチを指定して、PRテンプレートを参考にDraft PRを作るコマンドです。
引数の指定がない場合も考慮してデフォルト値を設定しているため、柔軟にPRを作ることができ、とても便利です。

---
argument-hint: [JIRA number of URL] [Base branch name]
description: Create a Draft PR
---

## Context

- JIRAチケット: $1を参照
    - JIRA number: <Your Project Key>-XXX
    - JIRA URL: https://<Your JIRA Domain>/browse/<Your Project Key>-XXX
- ベースブランチ: $2 があれば参照し、なければ`master`とする
- PRタイトル
    - $1 がない場合: `NON-ISSUE PRタイトル`のフォーマットとする
    - $1 がある場合: JIRAチケットの情報を入力しないこと

## Task

現在のブランチとベースブランチとの変更内容を整理して、`.github/pull_request_template.md`を参考にDraft PRを作成してください

セッションの内容をもとに調査レポートを作る

AIで調査した技術知識を忘れないようにObsidianに自動でまとめ直すという記事を参考に、セッションでのコード調査内容をもとに、調査レポートを作成させてObsidianに保存させるコマンドです。

ポイントとしては、図の作成ではMermaid記法を使うように指示していて、いい感じのチャートやシーケンス図を作ってくれるので、処理の流れや呼び出し関係を理解するのにとても役立っています。

---
description: Create a research report based on current session
---

## 役割
あなたはベテランの技術系編集者です。
セッション内の内容を整理して、**Markdownファイル**として調査レポートをまとめることが目標です。

### ファイル名
- `<YYYYMMDD>-<slug>.md`
    - 日付は **必ず** `date +%Y%m%d` で取得してファイル名に使う
- `<slug>` はタイトルを自動生成する。ファイル名に使えない文字は`-`に置換する。必ず日本語を使う。

## 出力仕様(各ファイルの本文)
- 以下のセクションを**必ずこの順で**書く(テクニカル知識の既定構成)

1. 背景
   - 何の文脈で必要になる知識かを1–2文
2. 要点
   - 再利用に必要なポイントを3–7項
3. 詳細
   - 知識の詳細を書く
   - 図やサンプルコードがある方がわかりやすい場合、積極的に利用する
4. 落とし穴 / アンチパターン
   - よくある誤りと対策
5. 判断基準
   - いつ使うか / 使わないか
6. 参考文献一覧
   - URLも記載した参考文献一覧
   
## 図の作成
図を作成する場合、**Mermaid記法**を使って作成する

## 実行フロー
1) このセッションの内容を整理し、**タイトル**・**本文**・**ファイル名**を決めて、Markdownを作成する。この時Web検索などで一次情報を参照し**必ず正当性の再チェックをすること**
2) **今回のセッション内での重要度(5点満点)**、**技術的な正確さ(5点満点)**を作成
3) 作成したMarkdownファイルを **Obsidian/Research**配下に保存する

ビルド&実行(iOS)

iOS開発で利用可能なデバイス(実機 or シミュレータ)を自動で判定してビルド・実行するコマンドです。

XcodeBuildMCPなどのMCPサーバーもありますが、うまく実機やシミュレータを自動判定してくれなかったので、Claude CodeでiOS開発 - 実機とシミュレータを自動判別してビルド&実行させるという記事でも紹介したBuildAndRun.mdを自前で用意しています。

---
description: Build and run the App
---

@../BuildAndRun.md の内容に従ってビルドを行い、ビルド成功したら実機デバイスまたはシミュレータでアプリを実行してください
# BuildAndRun.md

## 変数

- プロジェクト名: `YourProjectName.xcodeproj`
- スキーム名: `YourSchemeName`
- Bundle ID: `your.bundle.id`
- アプリ名: `YourAppName.app`

## 対象デバイスIDの取得

実機とシミュレータのデバイスIDは異なるため、それぞれ以下のコマンドで取得する

- 実機の場合
    - `xcrun devicectl list devices --filter 'State == "connected"'`で`connected`状態のデバイスを取得
        - `available (paired)`ではない
- シミュレータの場合
    - `xcrun simctl list devices`で`Booted`状態のデバイスを取得
        - `Shutdown`状態のデバイスしかない場合は、最新のiOSバージョンのデバイスを取得

## ビルド

**実機を優先**して、`xcodebuild`コマンドでビルドを行う

ただし、`-destination`で指定するデバイスIDは、`xcrun`で取得した対象デバイス名をもとに、`-showdestinations`で再取得して指定すること

`xcodebuild -project '${プロジェクト名}$' -scheme '${スキーム名}' -showdestinations`

### 実機の場合

`xcodebuild -project '${プロジェクト名}$' -scheme '${スキーム名}' -destination 'platform=iOS,id=${実機のデバイスID}'`

### シミュレータの場合

`xcodebuild -project '${プロジェクト名}$' -scheme '${スキーム名}' -destination 'platform=iOS Simulator,id=${シミュレータのデバイスID}'`

## インストール

ビルド成功後、アプリを対象デバイスにインストールする

### 実機の場合

`xcrun devicectl device install app --device '${実機のデバイスID}' '${アプリ名へのパス}'`

### シミュレータの場合

シミュレータが未起動の場合、`xcrun simctl boot シミュレータのデバイスID`でシミュレータを起動してからインストールを行う

`xcrun simctl install '${シミュレータのデバイスID}' '${アプリ名へのパス}'`

## 実行

### 実機の場合

`xcrun devicectl device process launch --device '${実機のデバイスID}' '${Bundle ID}'`

### シミュレータの場合

`xcrun simctl launch '${シミュレータのデバイスID}' '${Bundle ID}'`

Renovateによるライブラリ更新の妥当性チェック

Renovateが作ったライブラリ更新PRによる変更内容や影響度、ビルド結果を調査、マージしても問題ないかをチェックさせるコマンドです。

PRにも調査内容をコメント追記してくれるので、ライブラリの変更点や影響範囲を把握しやすくなり、必要に応じて人間が追加調査や動作確認をすればいいので、作業がとても楽になりました。

---
argument-hint: [PR number or URL]
description: Check the PR of library update by Renovate
---

あなたはエキスパートiOSアプリエンジニアです
../../RenovateLibraryUpdateGuide.mdを参考にライブラリのアップデートが問題ないか確認してください

1. 基本情報の収集
  - `gh pr view <PR番号>` でPR詳細とリリースノートを確認
  - 該当ライブラリのGitHubリポジトリでChangelog/Release notesを調査
  - 修正内容(bug fix, feature, breaking change)を分類
2. clusterのiOSアプリケーションへの影響調査
  - 該当ライブラリの使用箇所をコードベース全体で検索
  - 変更が影響する可能性のある機能・コンポーネントを特定
  - Breaking changesがある場合は、コード修正の必要性を評価
3. ビルド・テストの実行(iOS)
  - CLAUDE.mdの「ビルド&実行」を参考に実行する
4. 結果の記録とPullRequestへのコメント
  - 調査結果をPRにコメントで報告
  - 変更内容、影響度評価、ビルド結果を含める
  - マージ推奨/非推奨の判断根拠を明記

PR number or URL: $ARGUMENTS

まとめ

  • スラッシュコマンドは特定の機能を素早く実行できる仕組みで、組み込みのコマンドもあり、積極的に使いましょう
  • .claude/commands/にMarkdownファイルを配置すれば、カスタムスラッシュコマンドを作ることができ、よく使うプロンプトをコマンドとして素早く実行できます
  • カスタムスラッシュコマンドには、プロジェクトと個人のタイプがあり、引数も受け取れます
  • PR作成や調査レポート、ビルド実行などの便利な活用例を紹介しましたので、ぜひ導入してみてください

さいごに

今回は社内のAI勉強会で発表した「カスタムスラッシュコマンドをマスターして開発効率を上げよう」の内容を共有しました。カスタムスラッシュコマンドはプロンプトを再利用して特定の機能を素早く実行できるので、うまく活用すれば作業効率を向上させることができます。ぜひこの記事の内容や紹介した活用事例を参考にカスタムスラッシュコマンドを活用していただければと思います!