Claude Codeのカスタムスラッシュコマンドを実装する——繰り返し作業を1コマンドに圧縮する技術

Claude Codeのカスタムスラッシュコマンドを実装する——繰り返し作業を1コマンドに圧縮する技術

Claude Codeのカスタムスラッシュコマンド(/.claude/commands/)の実装方法を解説。ブログ記事生成・SEO分析・定型コードレビューをスラッシュコマンド化した実例を公開。引数の使い方・サブディレクトリ構造・ネストコマンドの設計パターンまで含む実践ガイド。

エンジニアのゆとです。

Claude Codeには「カスタムスラッシュコマンド」という機能がある。Slackのコマンドに近いイメージで、/blog-draft と打つだけで「下書きを作成するための複雑な指示」が実行される。

毎回同じプロンプトを書き直すのは非効率だ。しかも書き方がブレると結果の品質もブレる。カスタムスラッシュコマンドはこの問題を一発で解決する。


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

Claude Codeには組み込みのスラッシュコマンドがある(/compact/clear/cost など)。

カスタムスラッシュコマンドはこれらに加えて、自分で定義できる独自コマンドだ。

ファイルの場所:

~/.claude/commands/          # グローバル(全プロジェクトで使える)
.claude/commands/            # プロジェクト固有

ファイル形式: Markdownファイル(.md

ファイル名がそのままコマンド名になる。

.claude/commands/blog-draft.md  →  /blog-draft
.claude/commands/seo-check.md   →  /seo-check

最小構成の実装

# .claude/commands/blog-draft.md

SEO記事の下書きを作成します。

## 手順
1. `src/content/blog/` の既存記事を5本読む(トピック重複回避)
2. 以下の構成で記事を作成する
3. `src/content/blog/` にmdxファイルとして保存する

## 必須要件
- タイトル: 具体的な数字か「正直な話」系
- 冒頭: 読者の課題提示 → ゆと自身の体験
- 本文: h2見出し5〜7個
- まとめ: 箇条書きで要点を整理
- 内部リンク: PostCardLinkで2〜3本

## frontmatter
- draft: true
- pubDate: 今日の日付
- tags: テーマに合ったもの

これを実行するとき:

/blog-draft

コマンド名だけ入力すれば、Markdownに書いた指示がそのまま実行される。


$ARGUMENTS で引数を渡す

コマンドに引数を渡したい場合は $ARGUMENTS を使う。

# .claude/commands/seo-snipe.md

GSCデータを分析してSEOスナイプ記事を作成します。

対象キーワード: $ARGUMENTS

## 手順
1. `$ARGUMENTS` の競合記事をリサーチ
2. 差別化ポイントを3つ特定
3. 記事アウトラインを作成(承認後に本文執筆)

実行時:

/seo-snipe claude code 使い方 料金

$ARGUMENTS の部分が claude code 使い方 料金 に置換されて実行される。


実際に使っているコマンド集

/session-start

# .claude/commands/session-start.md

セッション開始処理を行います。

## 手順
1. `memory/session_logs/` の直近3ファイルを確認
2. 最新ログのSummaryセクションを読む
3. `memory/MEMORY.md` を読む
4. 今日のRELEASE_SCHEDULE.jsonを確認
5. 実行するタスクの優先順位を提示

## 報告形式
- 前回セッションの決定事項
- 今日公開予定の記事(draft:falseでpushが必要なもの)
- ストック数と警告(残3以下で黄色警告、残1以下で赤色警告)
- 今日着手すべきタスクTop3

/thumbgen

# .claude/commands/thumbgen.md

記事のサムネイルを生成します。

対象スラッグ: $ARGUMENTS

## 手順
1. `RELEASE_SCHEDULE.json` から `$ARGUMENTS` のエントリを確認してタイトルを取得
2. `scripts/gen_thumb_gpt.py` のMOTIFS dictに `$ARGUMENTS` 用のエントリを追加
   - motif: 記事テーマを視覚的に表現するビジュアルモチーフ(英語)
   - style: 画像スタイル
   - palette: カラーパレット
   - composition: 構図(タイトル配置用の暗い領域を必ず確保)
3. スクリプトを実行: `python3 scripts/gen_thumb_gpt.py --slug $ARGUMENTS --title "<タイトル>"`
4. 生成されたファイルパスを確認

## 注意
- MOTIFSにないスラッグはフォールバックで汎用プロンプトが使われる
- テキスト埋め込みはしない(`--with-title` は使わない)

/release-check

# .claude/commands/release-check.md

公開準備の最終チェックを実行します。

対象スラッグ: $ARGUMENTS

## チェック項目
1. `src/content/blog/$ARGUMENTS.mdx` が存在するか
2. frontmatterを確認:
   - title、descriptionが設定されているか
   - heroImageとcardImageが設定されているか
   - draft: trueになっているか(公開はauto_publishが実行)
3. heroImage・cardImageのファイルが `src/assets/` に存在するか
4. ExternalLinkCardのURLがプレースホルダーになっていないか
5. RELEASE_SCHEDULE.jsonに登録されているか・scheduled_atが正しいか

## 完了後
問題がなければ「公開準備OK」と報告。
問題があれば何を修正すべきか具体的に指示。

/affiliate-check

# .claude/commands/affiliate-check.md

アフィリエイト記事のコンプライアンスチェックを実行します。

対象ファイル: $ARGUMENTS

## チェック項目
1. 冒頭に `#PR` または `#広告` の記載があるか
2. 「使ってみた」「実際に使って」という表現があれば、実体験がない場合は削除・修正
3. 料金情報に「最新の公式サイトを確認してください」の注記があるか
4. ExternalLinkCardのURLが設定されているか(プレースホルダーのままでないか)
5. draft: trueになっているか

## 報告
問題点を箇条書きで列挙。問題なければ「コンプライアンスチェック: クリア」と報告。

サブディレクトリでコマンドを整理する

コマンドが増えてきたら、サブディレクトリで整理できる。

.claude/commands/
├── blog/
│   ├── draft.md      →  /blog/draft または /blog-draft
│   ├── publish.md    →  /blog/publish
│   └── seo-check.md  →  /blog/seo-check
├── x/
│   ├── post.md       →  /x/post
│   └── reply.md      →  /x/reply
└── session-start.md  →  /session-start

ただし実際の呼び出し方はClaude Codeのバージョンによって異なる( /blog-draft/blog/draft か)。現時点(2026年4月)では 命名規則にハイフンを使ってフラット管理 が確実に動く。


コマンドの中でスクリプトを実行する

スラッシュコマンドのMarkdownからBashを指示することで、スクリプトの実行も含めた複合操作が一本化できる。

# .claude/commands/morning-check.md

朝のシステム状態確認を実行します。

## 実行手順
以下のコマンドを順に実行して結果を報告してください:

1. `launchctl list | grep moruhanda` — LaunchAgentの稼働確認
2. `python3 scripts/check_schedule.py` — 今日の公開スケジュール確認
3. `ls src/content/blog/*.mdx | wc -l` — 記事総数確認
4. `git log --oneline -5` — 直近のgit history確認

## 報告形式
LaunchAgent状態、今日の公開予定、記事数、最終push日時をサマリで報告。
異常があれば具体的に指摘。

グローバルとプロジェクト固有の使い分け

~/.claude/commands/
├── session-start.md  # どのプロジェクトでも使う
├── session-end.md
└── morning-check.md

.claude/commands/         # プロジェクト固有
├── blog-draft.md
├── thumbgen.md
├── release-check.md
└── affiliate-check.md

汎用的な作業フロー(セッション管理)はグローバル、プロジェクト固有の作業(記事生成・サムネ)はプロジェクト設定、という分け方が整理しやすい。


よくある設計ミス

ミス1: コマンドに処理を詰め込みすぎる

1コマンドで「リサーチ → 記事生成 → サムネ生成 → RELEASE_SCHEDULEへの登録」をすべてやろうとすると、途中で止まったときに何が完了していたか分からなくなる。

ステップを分けて /blog-research/blog-draft/thumbgen の3ステップにした方が確認しやすい。

ミス2: $ARGUMENTSを使わず汎用すぎるコマンドを作る

/blog-draft だけで記事のテーマを指定できないと、実行するたびにコマンドの後ろにプロンプトを追加書きすることになる。/blog-draft $ARGUMENTS の形式でテーマを渡せるようにしておく。

ミス3: コマンドの前提条件を書かない

「このコマンドを実行する前に◯◯を確認してください」という前提をMarkdownに書いておかないと、コマンドが途中でコンテキスト不足になる。


まとめ

カスタムスラッシュコマンドは「繰り返しやることを定義しておく仕組み」だ。

  • .claude/commands/ にMarkdownファイルを置くだけで使える
  • $ARGUMENTS で引数渡し
  • グローバルとプロジェクト固有を使い分ける
  • ステップを分けてコマンドを小さく保つ

プロンプトを毎回手打ちするのは、コードで同じ処理を毎回コピペするのと同じだ。一度定義すれば品質が安定して再現性も上がる。


記事が見つかりません:

記事が見つかりません:

記事が見つかりません:

← 記事一覧に戻る