目次
要約
- Claude Codeを効率的に利用する上で必ず押さえておきたい機能やTIPSを解説
- スラッシュコマンド、スキル、Model Context Protocol(MCP)による外部サービス連携について
- スラッシュコマンド、スキル、MCPの違いと使い分けについて
- フック機能とその活用事例を多数紹介
この記事は、Claude Codeのベストプラクティス、公式ドキュメント、著者自身のClaude Maxプランでの利用体験に基づいています。
この記事を読むことで得られるメリット
- スラッシュコマンド、スキル、MCPそれぞれの実用的な使い方、各機能の違いと使い分けが理解できる
- フック機能の基本と設定方法が理解できる
この記事を読むのにかかる時間
約15〜20分
環境
- OS: MacOS Apple M4 Max Sequoia 15.1
- Node.js: v18以上
- Claude Code バージョン: 2.0.14
スラッシュコマンド
claude起動コマンドを実行した後に、/(スラッシュ)を入力することで、あらかじめ割り当てられたコマンドを使用できる。これはスラッシュコマンドと呼ばれている- スラッシュコマンドにはデフォルトで利用できるものと、ユーザーが定義できるカスタムスラッシュコマンドがある
使用イメージ
──────────────────────────────────────────────────────────────────────────────────
> /
──────────────────────────────────────────────────────────────────────────────────
/add-dir Add a new working directory
/agents Manage agent configurations
/bashes List and manage background tasks
/clear (reset, new) Clear conversation history and free up
context
/compact Clear conversation history but keep a summary
in context. Optional: /compact [instructions
for summarization]
/config (theme)主なスラッシュコマンド
/clear - コンテキストウィンドウのクリア
同じセッションで何度もやりとりしていると、Claudeのコンテキストウィンドウは無関係な会話やファイル内容、コマンドで埋まってしまうことがある。
これはパフォーマンスを低下させ、時にClaudeの注意を散漫にさせる可能性がある。タスクの合間(区切り)には適宜/clearコマンドを使い、コンテキストウィンドウをリセットすることが推奨される
/compact - コンテキストウィンドウの圧縮
- コンテキストウィンドウの内容を圧縮するコマンド
/clearが全ての会話の履歴をリセットするのに対し、/compactは内容を圧縮して以降の会話でも保持する。引数には圧縮を行う際の要約を指定可能- デフォルトの設定ではある程度コンテキストウィンドウが大きくなると、自動で
/compactが実行されるようになっている。これは後述する/configコマンドでON/OFFを切り替えることが可能。
/rewind - ロールバック
特定のチェックポイント(チャットの入力履歴)まで巻き戻しできる。意図した内容でAIがアウトプットを出してくれなかった時などに任意の履歴に戻れると安心
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Rewind
Restore the code and/or conversation to the point before…
/cost
No code changes
/pr-comments is fetching PR comments…
No code changes
❯ (current)/usage - 現在の利用量を確認
サブスクリプションでの利用時のみ実行可能だが、現在のトークンの利用量を確認できる
> /usage
───────────────────────────────────────────────────────────────────────────────────
Settings: Status Config Usage (tab to cycle)
Current session
██████ 12% used/memory - 設定ファイルの編集
すぐにCLAUDE.mdを編集できる(ユーザー、プロジェクトどちらを編集するか選択可能)
> /memory
Learn more: https://docs.claude.com/en/docs/claude-code/memory
╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ │
│ Select memory to edit: │
│ │
│ ❯ 1. Project memory Saved in ./CLAUDE.md │
│ 2. User memory Saved in ~/.claude/CLAUDE.md │
│ │
╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯/model - モデルの切り替え
使用するLLMのモデルを切り替えることができる。デフォルトはSonnet4.5なので、複雑なタスクはOpusに切り替える時はここから可能
> /model
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Select model
Switch between Claude models. Applies to this session and future Claude Code sessions. For other/previous model names, specify with --model.
❯ 1. Default (recommended) Sonnet 4.5 · Smartest model for daily use ✔
2. Opus Legacy: Opus 4.1 · Reaches usage limits faster
3. Haiku Haiku 4.5 · Fastest model for simple tasks 0% used/mcp - MCPサーバーの管理
登録済みのMCPサーバーの表示や削除、認証など
> /mcp
Manage MCP servers │
│ │
│ ❯ 1. context7 ✔ connected · Enter to view details │
│ 2. notion △ disconnected · Enter to login/resume
claude --resumeと同様に、特定の過去のセッションを再開できる。頻繁に使うわけではないが途中から再開したいことはたまにある。知っておくと便利なコマンド
> /resume
───────────────────────────────────────────────────────────────────────────────────
Resume Session
❯ YouTube概要欄生成 Chillout
17 hours ago · 117 messages · -
bgm制作したい
17 hours ago · 61 messages · -
Suno Vaporwave プロンプト作成&YouTube アップロード完了
4 days ago · 167 messages · -/config - 設定確認
利用中のモデルやテーマ設定などの現在の設定を確認できる。ここでAuto-compactの切り替え設定も可能
> /config
Configure Claude Code preferences
❯ Auto-compact true
Show tips true
Rewind code (checkpoints) true
Verbose output false
Theme Dark mode
Notifications Auto
Output style default
Editor mode normal
Model Default (recommended)
Diff tool auto
Auto-install IDE extension true/terminal-setup - CLI上での改行設定
CLI上での操作時、Shift + Enterキーで改行を挿入できるようになる。
ターミナルによって異なる。Mac標準のターミナルならOption+Enterで改行。Shift + Enterで改行できるようにしたい場合はこのコマンドを実行すること
> /terminal-setup
⎿ Configured Terminal.app settings:
- Enabled "Use Option as Meta key"
- Switched to visual bell
Option+Enter will now enter a newline.
You must restart Terminal.app for changes to take effect.カスタムスラッシュコマンド
標準で提供されているスラッシュコマンドに加え、.claude/commandsディレクトリにマークダウンファイルを作成すると、ユーザ定義のコマンドを作成することができる
コマンド実行時に引数を渡すこともでき、与えられた引数は$ARGUMENTSの変数に代入されるので、コマンドの実装側で扱うことが可能
リファクタリングコマンドの例
リファクタリングを実行するカスタムコマンドの例(※あくまでサンプルです。実際はもう少ししっかりと書くことをお勧めする)
.claude/commands/refactor.md
- $ARGUMENTSのコードをExtract Method(メソッド抽出)して責務を分割する
- 関数ではなく、オブジェクト指向でクラスを活用すること
- 条件分岐が複数発生する場合はStrategyやStateのデザインパターンを活用すること
- ポリモーフィズムは積極的に活用すること
- インスタンス生成はファクトリーパターンを積極的に活用すること
- メソッドの引数は2つまでリファクタリング前のダーティなコード
main_dirty.py
import pandas as pd
import os
# --- 設定値 (リファクタリング候補1: 設定を別ファイルに切り出す) ---
INPUT_CSV_PATH = 'sales_data.csv'
OUTPUT_CSV_PATH = 'high_value_customer_summary.csv'
PRICE_THRESHOLD = 10000
TARGET_YEAR = 2023
def main():
"""
エントリーポイントとなるメイン関数。
複数の責務(データ読み込み、加工、ビジネスロジック、出力)が混在している。
"""
# --- ダミーの入力データを作成 (本来は不要) ---
if not os.path.exists(INPUT_CSV_PATH):
print(f"'{INPUT_CSV_PATH}' が存在しないため、ダミーファイルを作成します。")
dummy_data = {
'order_id': [1, 2, 3, 4, 5, 6, 7, 8],
'customer_id': ['A-001', 'B-002', 'A-001', 'C-003', 'B-002', 'A-001', 'D-004', 'C-003'],
'product_name': ['Laptop', 'Mouse', 'Monitor', 'Keyboard', 'Webcam', 'Docking Station', 'USB Hub', 'External HDD'],
'price': [150000, 3000, 25000, 8000, 12000, 22000, None, 15000],
'order_date': ['2023-04-10', '2023-04-11', '2022-05-20', '2023-06-01', '2023-06-15', '2023-07-01', '2024-01-20', '2023-08-01'],
'unnecessary_column': [0] * 8
}
pd.DataFrame(dummy_data).to_csv(INPUT_CSV_PATH, index=False)
print("ダミーファイルを作成しました。")
# --- 1. データの読み込み ---
print(f"'{INPUT_CSV_PATH}' からデータを読み込みます...")
try:
df = pd.read_csv(INPUT_CSV_PATH)
except FileNotFoundError:
print(f"エラー: 入力ファイル '{INPUT_CSV_PATH}' が見つかりません。")
return
# --- 2. データの前処理 ---
print("データの前処理を開始します...")
if 'unnecessary_column' in df.columns:
df = df.drop(columns=['unnecessary_column'])
df.dropna(subset=['price'], inplace=True)
df['order_date'] = pd.to_datetime(df['order_date'])
print("データの前処理が完了しました。")
# --- 3. ビジネスロジック ---
print("ビジネスロジックを実行します...")
df_filtered_by_year = df[df['order_date'].dt.year == TARGET_YEAR].copy()
high_value_orders = df_filtered_by_year[df_filtered_by_year['price'] >= PRICE_THRESHOLD]
customer_summary = high_value_orders.groupby('customer_id')['price'].sum().reset_index()
customer_summary.rename(columns={'price': 'total_purchase_amount'}, inplace=True)
print("ビジネスロジックの実行が完了しました。")
# --- 4. 結果の出力 ---
print("処理結果を出力します...")
print("\n--- 高額購入顧客サマリー ---")
if customer_summary.empty:
print("該当する顧客はいませんでした。")
else:
print(customer_summary.to_string(index=False))
try:
customer_summary.to_csv(OUTPUT_CSV_PATH, index=False, encoding='utf-8-sig')
print(f"\n結果を '{OUTPUT_CSV_PATH}' に保存しました。")
except IOError:
print(f"エラー: ファイル '{OUTPUT_CSV_PATH}' への書き込みに失敗しました。")
if __name__ == '__main__':
main()
リファクタリングコマンドの実行
> /refactor main_dirty.py
⏺ コードを確認して、オブジェクト指向設計でリファクタリングします。
・・・
それでは実装を開始します。
---
⏺ リファクタリングが完了しました。main_refactored.pyを作成しました。
リファクタリング後のコード
実際に使うにはドメインの知識を入れたり等もう少し改善が必要だが、元のコードと比べると圧倒的に読みやすい。
main_refactored.py
# =============================================================================
# エントリーポイント
# =============================================================================
def main():
"""アプリケーションのエントリーポイント"""
# 設定の初期化
config = Config(
input_csv_path='sales_data.csv',
output_csv_path='high_value_customer_summary.csv',
price_threshold=10000,
target_year=2023
)
# 依存オブジェクトの生成
repository = DataRepository(config)
preprocessor = ProcessorFactory.create_preprocessor()
business_logic = ProcessorFactory.create_business_logic(config)
output_handler = ProcessorFactory.create_output_handler(repository)
# パイプラインの実行
pipeline = DataPipeline(
repository,
preprocessor,
business_logic,
output_handler
)
try:
pipeline.execute()
except (FileNotFoundError, IOError) as e:
print(f"エラー: {e}")
if __name__ == '__main__':
main()
そのほかConventional Commits形式でコミットとメッセージを生成してもらうコマンドを作ったりするのもお勧め
コマンド用ディレクトリの階層化
.claude/commands/git/pr-xxx.mdのようにcommands直下にサブディレクトリを作成しコマンドファイルを作成することもでき、この場合実行する際は/git:pr-xxxのようにコロンをつけて実行できる。
マーケットプレイス
カスタムコマンドもマーケットプレイスが存在するので、自分で作成するレパートリーがなくなったら、参考にしてみるといいかも
なお、カスラムスラッシュコマンドを使った「ビジネスシーン、開発で必要なドキュメント作成を劇的に効率化するための記事」はこちらで徹底解説している
スキル
Agent Skillについてはこちらの記事で徹底解説している。自然言語の指示で専門的かつ複数手順が必要な作業も実行でき、MCPよりもコンテキスト消費が少なく最適化されている。スラッシュコマンドとは違い、プログラム(スクリプト)を含めることができる
Model Context Protocol(MCP)
MCPとは
MCPは、Claudeが外部サービスと連携するためのプロトコルである。MCPサーバーを追加することで、Notion、Figma、Context7などの外部サービスのデータをClaude Codeから直接操作できるようになる。MCPに関しては以下2つの記事で徹底解説している
/mcp - MCPサーバー管理
/mcpコマンドでMCPサーバーを管理できる。有効なMCPサーバーがあれば、表示してくれる
> /mcp
╭────────────────────────────────────────────────────────────────────────────────╮
│ Manage MCP servers │
│ │
│ ❯ 1. context7 ✘ failed · Enter to view details │
│ 2. serena ✔ connected · Enter to view detailMCPサーバーの追加方法
Notion MCPを追加してみる
claude mcp add --transport http notion https://mcp.notion.com/mcp
これにより、/Users/<username>/.claude.jsonに以下の設定が追加される。
"mcpServers": {
"notion": {
"type": "http",
"url": "https://mcp.notion.com/mcp"
}
}
/mcpを実行すると、notionのMCPが表示される。
> /mcp
╭──────────────────────────────────────────────────────────────────────────────╮
│ Manage MCP servers │
│ │
│ ❯ 1. notion
notion MCPを選択するとブラウザが起動するのでログインして戻ってくると、Claude Codekから利用できるようになる。
Notionから記事を取得する例
> notionで記事取得したい
⏺ Notionで記事を取得する方法を説明します。
利用可能なNotion操作
このClaude Code環境では、以下のNotion操作が可能です:
1. 検索機能 (mcp__notion__notion-search)
> NotionページのID(32文字のUUID形式)
⏺ Notionページ「CLASSIC BARBER SHOP - 完全版コンテンツ」を取得しました。
取得した内容の概要
理髪店「CLASSIC BARBER SHOP」の完全なWebサイトコンテンツで、以下のセクションが含まれています:
主要コンテンツ
- 🏪 店舗基本情報 - キャッチコピー、コンセプト
...
MCPサーバーの削除
claude mcp remove notion
その他のMCPサーバー
serena MCP サーバー
コードベースの理解と操作、トークン効率を最適化してくれるサーバー
Python のパッケージマネージャーuvを使用する方法が推奨
curl -LsSf https://astral.sh/uv/install.sh | sh追加方法(MCPサーバーをプロジェクトに追加):
claude mcp add serena -s project -- uvx --from git+https://github.com/oraios/serena serena start-mcp-server --context ide-assistant --project $(pwd)プロジェクトのルートに .mcp.json ファイルが作成される。このプロジェクトでclaudeを起動するとserenaが実行される
Context7
最新のドキュメント情報を取得することでハルシネーションを防止できる、正確なAPIリファレンスを提供してくれるサーバー
追加方法:
claude mcp add --transport sse context7 -s project https://mcp.context7.com/sse
実行例:
> Laravelのeloquentの書き方を調べて
⏺ LaravelのEloquent ORMの基本的な書き方について調べて、まとめます。
⏺ context7 - resolve-library-id (MCP)(libraryName: "laravel")
⎿ Available Libraries (top matches):
Each result includes:
… +245 lines (ctrl+o to expand)
そのほか、Google Analytics MCPサーバーやFigma MCPサーバーなどがある
リクエストヘッダーを指定
MCPサーバーの中には、専用のトークンやリクエストヘッダーが必要なものがあるのでその場合の指定方法
claude mcp add --transport http server-name https://・・・/mcp --header "X-: 値"Claude Desktop からインポート
claude mcp add・・・が面倒な方で、すでに Desktop版 Claudeに追加済みの場合はそれらのMCPサーバーを一気にインポートできる
claude mcp add-from-claude-desktopスラッシュコマンド、スキル、MCPの違いと使い分け
機能 | 特徴 | 得意分野 | 実行方法 | 使用例 | こんな時に使う |
|---|---|---|---|---|---|
スラッシュコマンド | 単純作業の自動化 | 繰り返し実行する定型作業 | コマンド実行(明示的指示) | ・コードレビュー | 1コマンドでサクッと実行したい日常的な定型作業 |
スキル | 複雑な処理の自動化 | 多段階のワークフロー | 自然言語で実行可能 | ・画像から文字起こし→クリップボードコピー | MCPだと大袈裟だけど複雑な処理やプログラムが必要な時。コンテキスト使用が最適化されている |
MCP | 外部サービスとの統合 | 外部API・ツールとの連携 | 自然言語で実行可能 | ・外部APIとの連携 | Claude Codeを「ハブ」として外部サービスをシームレスに統合したい時 |
使い分けのポイント
- 単純な繰り返し作業 → スラッシュコマンド
- 複雑な多段階処理 → スキル(ベンダーロックインされる点は注意
- 外部サービスとの連携 → MCP
応用テクニック: スキルからMCPを利用することも可能🔥
注意点
MCPは入れすぎるとコンテキストを圧迫するので注意
/hooks - フック機能
Claude Codeのライフサイクルの特定のタイミングで実行できるコマンドを設定できる機能
> /hooks
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
/hooks Manage hook configurations for tool events
フックイベント
イベント | トリガータイミング | 受け取るデータ |
|---|---|---|
PreToolUse | Claudeがツールパラメータを作成後、処理前 |
|
PostToolUse | ツール実行完了直後 |
|
Notification | 権限リクエストやアイドル通知時 |
|
UserPromptSubmit | ユーザーがプロンプト送信後、Claude処理前 |
|
Stop | メインのClaude Codeエージェントが応答完了時 |
|
SubagentStop | サブエージェント(Task tool)が応答完了時 | Stopイベントと同様のデータ |
PreCompact | コンパクト操作実行前 |
|
SessionStart | セッション開始または再開時 |
|
SessionEnd | セッション終了時 |
|
ツールについては公式ドキュメントの「Claudeが利用できるツール」を参照。Bash、Read、WebFetch(Web検索)、カスタムスラッシュコマンドがある。
通知音の設定例
例えば、処理実行後にMacで通知音を鳴らしたい場合、Stopを指定する。
Select hook event:
↑ 3. Notification - When notifications are sent
4. UserPromptSubmit - When the user submits a prompt
5. SessionStart - When a new session is started
❯ 6. Stop - Right before Claude concludes its response
↓ 7. SubagentStop - Right before a subagent (Task tool call) concludes its response
「Add new hook」を選択し、Commandにafplay /System/Library/Sounds/Glass.aiffを指定する。
.claude/settings.local.jsonに以下のように追加される。
{
"permissions": {
"allow": [
"Bash(git:*)",
"Bash(ls:*)"
],
"deny": [],
"ask": []
},
"hooks": {
"Stop": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "afplay /System/Library/Sounds/Glass.aiff"
}
]
}
]
}
}
セキュリティ警告
フックを追加する際は、以下のセキュリティ警告には十分目を通すこと
- フックは、確認なしに、あなた(ユーザー)の完全な権限で任意のシェルコマンドを実行する
- フックが安全であることを保証するのは、あなた自身の責任である
- フックは、あなたのユーザーアカウントがアクセスできるすべてのファイルを変更、削除、またはアクセスできる
- 悪意のある、または不適切に作成されたフックは、回復不可能なデータの損失やシステムの損傷を引き起こす可能性がある
- Anthropicは、フックの使用に起因するいかなる損害についても、一切の保証を提供せず、一切の責任を負わない
- データ漏洩を防ぐため、信頼できるソースからのフックのみを使用すること
- タイムアウト: 60秒
そのほか、ある開発プロジェクトでコード更新→Githubにpushまでプロンプトで実行した後、処理実行後にVercelのダッシュボードを開くということもできたり、
"hooks": {
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "open https://vercel.com/・・・/deployments"
}
]
}
]
}破壊的な変更を加えた場合にCHANGELOGを生成させることも可能
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write|NotebookEdit",
"hooks": [
{
"type": "command",
"command": "./.claude/hooks/log-code-changes.sh"
}
]
}
]
},CHANGELOG.md
# Code Changes Log
このファイルには、Claude Codeによるコード変更の履歴が記録されます。
---
## 2025年11月08日
### ✏️ Edited `LinkCardReplacer.tsx` - 2025-11-08 19:24:06
**変更内容**: console.logを削除
**ファイルパス**: `src/features/LinkCard/LinkCardReplacer.tsx`
_※ 変更内容が大きいため省略_
---そのほか活用例
とにかくいろんなことができる
カテゴリ | ユースケース | 使用するフック | 実現内容 |
|---|---|---|---|
コード品質 | 自動コードフォーマット |
| ファイル作成・編集後に自動でPrettier/Black/gofmt等を実行 |
セキュリティ | 機密情報検出 |
| プロンプトにAPIキーや秘密情報、顧客情報が含まれていないかチェック、含まれていればブロック |
セキュリティ | コミット前セキュリティスキャン |
|
|
テスト自動化 | コード変更後の自動テスト |
| ソースコード編集後に関連するユニットテストを自動実行 |
ドキュメント | 自動ドキュメント生成 |
| 新規関数/クラス作成時にJSDoc/docstringを自動追加 |
権限管理 | 特定ファイルの読み取り自動許可 |
| package.json, tsconfig.json等の設定ファイルは自動承認 |
コスト管理 | トークン使用量監視 |
| 累積トークン使用量を記録し、閾値超過時に警告 |
セッション管理 | プロジェクト環境変数自動ロード |
| .envファイルや開発環境設定を自動読み込み |
Git管理 | コミットメッセージ規約チェック |
| Conventional Commits形式に従っているか検証 |
コード品質 | Lintエラー自動修正 |
| ESLint/Pylint実行し、auto-fix可能なエラーを自動修正 |
パフォーマンス | コマンド最適化提案 |
|
|
セキュリティ | 依存関係脆弱性チェック |
| npm audit/pip-audit等を実行し脆弱性を検出 |
品質管理 | 型チェック自動実行 |
| TypeScript/mypy等の型チェックを自動実行 |
タスク管理 | 完了条件の自動判定 |
| LLMで作業完了を判定し、未完了なら継続を促す |
バックアップ | 重要ファイル編集時のバックアップ |
| 編集前に自動でバックアップファイルを作成 |
統合開発 | ビルド後の動作確認 |
| ビルド成功後に軽量なスモークテストを自動実行 |
コンプライアンス | ライセンスヘッダー自動挿入 |
| 新規ファイルに会社のライセンスヘッダーを自動追加 |
デバッグ | エラー発生時の詳細ログ |
| コマンド失敗時に環境情報とスタックトレースを詳細記録 |
プロジェクト管理 | 作業時間の自動記録 |
| セッション開始・終了時刻を記録し工数管理に活用 |
コマンドで定型的な処理をするだけではなく自然言語でプロンプトを実行することも可能
{
"hooks": {
"Stop": [
{
"hooks": [
{
"type": "prompt",
"prompt": "Evaluate if Claude should stop: $ARGUMENTS. Check if all tasks are complete."
}
]
}
]
}
}まとめ
Claude Codeを効率的に活用するための完全ガイド。スラッシュコマンドによる定型作業の自動化、Agent Skillでの複雑な処理実行、MCPによる外部サービス連携、そしてフック機能による開発ワークフローの自動化について詳しく解説します。各機能の違いと使い分けのポイント、セキュリティチェックやコード品質管理の自動化など、実践的な活用例を豊富に紹介。Claude Maxプランでの実体験に基づいた、すぐに使えるベストプラクティス集です。読了時間約15〜20分で、ClaudeCodeを使いこなすための必須知識が身につきます。