Claude CodeはAnthropicが開発したAIコーディングアシスタントのCLIツールです。ターミナルから直接Claudeを呼び出してコードの生成・編集・デバッグ・テストを行えるほか、リポジトリ全体を読み込んでコンテキストを理解した上で作業できる点が際立っています。GitHub Copilotなどのエディタ拡張とは異なり、ファイルを直接編集・コマンドを実行する自律的な動作が特徴で、「AIに一連の作業を丸ごと任せる」ワークフローを実現します。
しかし、Claude Codeの真価は設定の作り込みにあります。CLAUDE.mdでAIの振る舞いを定義し、hooksで自動化を組み込み、カスタムコマンドで繰り返し作業を1行にまとめる——この設計次第で生産性が大きく変わります。
この記事では、Claude Codeのインストールから実務レベルの活用まで一気通貫で解説します。CLAUDE.mdの階層設計・プロジェクト別テンプレート・hooks・カスタムスラッシュコマンド・MCP連携・チーム開発での運用設計まで網羅します。
- Claude Codeとは何か・他ツール(GitHub Copilot・Cursor)との違い
- インストール・初期設定・基本コマンドの使い方
CLAUDE.mdの3層設計(グローバル・プロジェクト・条件付きルール)- 言語・フレームワーク別のCLAUDE.mdテンプレート
- hooksによる自動化(コミット前チェック・テスト実行・通知)
.claude/commands/カスタムスラッシュコマンドの作り方- MCP(Model Context Protocol)でツールを拡張する方法
- チーム開発での
.claude/ディレクトリのGit管理設計
Claude Codeとは何か
Claude CodeはCLI(コマンドラインインターフェース)として動作するAIエージェントです。単なるチャットではなく、ファイルの読み書き・コマンドの実行・Gitの操作を直接行えるため、「AIがコードを書いて実行して結果を確認する」サイクルを自律的に回せます。
| 比較項目 | Claude Code | GitHub Copilot | Cursor |
|---|---|---|---|
| 形態 | CLI(ターミナル) | エディタ拡張 | AIネイティブIDE |
| ファイル操作 | 直接読み書き可能 | エディタ内のみ | エディタ内+Composer |
| コマンド実行 | シェルコマンドを直接実行 | 不可 | 不可(Composerは可) |
| コンテキスト | リポジトリ全体 | 開いているファイル中心 | リポジトリ全体 |
| 設定ファイル | CLAUDE.md | .github/copilot-instructions.md | .cursor/rules/ |
| 自律動作 | エージェントとして自律実行 | 補完・提案のみ | Composerで対応 |
| 月額 | $20/月(Pro) | $10/月 | $20/月(Pro) |
- リポジトリ全体にまたがるリファクタリング・機能追加
- テストの自動生成と実行確認
- バグの原因調査からfixまで一連の作業を任せたい
- デプロイスクリプトや設定ファイルの自動生成
- コードレビューのコメント対応を自動化したい
インストールと初期設定
# Node.js 18以上が必要 node --version # Claude Codeをグローバルインストール npm install -g @anthropic-ai/claude-code # バージョン確認 claude --version # ログイン(ブラウザが開いてAnthropicアカウントで認証) claude login
Claude Codeは
ANTHROPIC_API_KEY環境変数でも動作します。組織でのデプロイや自動化パイプラインでは環境変数を使うとよいでしょう。export ANTHROPIC_API_KEY=sk-ant-xxx と設定してからclaude を起動します。基本的なコマンド一覧
| コマンド | 説明 |
|---|---|
claude |
インタラクティブモードで起動 |
claude "指示" |
1回だけ実行して終了(non-interactiveモード) |
claude -p "指示" |
stdin/stdoutを使ったパイプライン実行 |
claude --continue |
前の会話を引き継いで再開 |
claude --resume |
会話履歴から選んで再開 |
/help |
利用可能なスラッシュコマンドを表示 |
/clear |
会話履歴をリセット |
/compact |
コンテキストを圧縮(長い会話向け) |
/cost |
現在のセッションのトークン使用量とコストを表示 |
/init |
カレントディレクトリにCLAUDE.mdを自動生成 |
# インタラクティブモードで起動してコードレビューを依頼 claude > src/api/users.py を見てセキュリティ上の問題を指摘してください # 1回だけ実行 claude "package.jsonのdependenciesを最新バージョンに更新してください" # パイプラインで使う(CI/CDでの利用例) git diff HEAD~1 | claude -p "このdiffをレビューして問題点を箇条書きで返してください" # CLAUDE.mdを自動生成 cd my-project claude /init
CLAUDE.mdの3層設計
CLAUDE.mdはClaude Codeの「行動規範」を定義するMarkdownファイルです。どう書くかによってAIの応答品質・作業の正確性・コーディングスタイルが大きく変わります。設定は3つの階層に分けて管理するのが効果的です。
| 階層 | ファイルパス | 目的 | 管理方法 |
|---|---|---|---|
| グローバル | ~/.claude/CLAUDE.md |
全プロジェクト共通の行動原則 | Gitで管理しない(個人設定) |
| プロジェクト | ./CLAUDE.md |
プロジェクト固有の規則・情報 | Gitで管理してチーム共有 |
| 条件付き | .claude/rules/xxx.md |
特定ディレクトリ・状況向けのルール | Gitで管理してチーム共有 |
グローバルCLAUDE.md(~/.claude/CLAUDE.md)
すべてのプロジェクトで適用される個人の行動原則を定義します。「確認なしで進める範囲」「応答スタイル」「守るべき習慣」などを書くと効果的です。
# グローバル行動原則 ## 自律実行の方針 - 小さな修正(typo・インポート追加・フォーマット)は確認なしで実行する - ファイル削除・本番環境への操作・外部サービスへの送信は必ず確認を取る - 複数ファイルにまたがる変更は、実行前に変更内容の概要を1〜2行で説明する ## 応答スタイル - 回答は簡潔に。実行したことを長々と説明しない(diffを見れば分かる) - 不明点があれば推測で進めず、1つだけ質問して確認する - コードの説明はインラインコメントで行い、別途の解説文は最小限にする ## コーディング規範 - 新しいファイルを作る前に既存ファイルの修正で対応できないか検討する - テストを追加する際は既存のテストスタイルに合わせる - セキュリティリスク(インジェクション・認証不備・シークレットのハードコード)は必ず指摘する ## 確認が必要な操作 - git push / git force-push - 本番DBへの直接操作 - 外部APIへの書き込み操作(メール送信・Slack通知等)
プロジェクトCLAUDE.md(./CLAUDE.md)
プロジェクト固有の情報を書きます。AIがリポジトリを初めて見るときに「まず何を知るべきか」を意識して設計するのがコツです。/initコマンドでひな形を生成してから編集するのが効率的です。
# プロジェクト概要 - **名称**: ECサイトバックエンドAPI - **技術スタック**: Python / FastAPI / PostgreSQL / Redis / Docker - **環境**: ローカル=Docker Compose, 本番=AWS ECS ## ディレクトリ構造 ``` app/ api/ # ルーター(エンドポイント定義) services/ # ビジネスロジック models/ # SQLAlchemyモデル schemas/ # Pydanticスキーマ tests/ # pytest migrations/ # Alembicマイグレーション ``` ## 開発ルール - ビジネスロジックは services/ に書く(api/ に書かない) - DBアクセスは必ずリポジトリパターンを通す(services/ から直接クエリしない) - 新しいエンドポイントには必ず対応するテストを追加する - 環境変数は app/config.py の Settings クラスで管理する(os.environ直接参照禁止) ## よく使うコマンド ```bash docker compose up -d # 開発環境起動 pytest tests/ -v # テスト実行 alembic upgrade head # マイグレーション適用 alembic revision --autogenerate -m "説明" # マイグレーション生成 ``` ## 注意事項 - migrations/ は自動生成後に必ず内容を確認してからコミットする - tests/fixtures/ にテスト用のデータファクトリがある(新規テストはこれを使う) - Redis接続は app/cache.py の get_redis() を使う
条件付きルール(.claude/rules/)
特定のディレクトリや作業内容に応じて追加で適用するルールを.claude/rules/以下のMarkdownファイルに書きます。実際にそのファイルを参照するとき・その作業をするときのみ読み込まれるため、メインのCLAUDE.mdを肥大化させずに済みます。
# データベース操作ルール このルールはDBマイグレーションや直接SQL操作を行うときに適用されます。 ## マイグレーション - DROP TABLE / DROP COLUMN は必ず人間の確認を取る - カラム追加は nullable または DEFAULT 値を持たせてゼロダウンタイムを確保する - インデックス作成は CONCURRENTLY オプションを付ける(本番DB向け) ## クエリ - N+1問題になりそうな箇所は指摘してeager loadingを提案する - 全件取得(LIMIT なし)は禁止。必ずページネーションを実装する
# フロントエンドルール(frontend/ ディレクトリ内で適用) ## コンポーネント設計 - 1ファイル1コンポーネント。200行を超えたら分割を提案する - propsの型は必ず明示する - API呼び出しはカスタムフックに分離する(コンポーネント内に直接書かない) ## アクセシビリティ - インタラクティブ要素には aria-label または aria-labelledby を付ける - img タグには必ず alt 属性を書く
hooksによる自動化
hooksはClaude Codeのイベントに応じてシェルコマンドを自動実行する仕組みです。「ファイルを編集したらlinterを自動実行」「コミット前にテストを確認」といった自動化ワークフローを設定ファイルで定義できます。
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write|MultiEdit",
"hooks": [
{
"type": "command",
"command": "echo '? ファイル編集を検出'"
}
]
}
],
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "echo '? コマンド実行前'"
}
]
}
],
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "echo '✅ Claude Codeの応答が完了しました'"
}
]
}
]
}
}
実用的なhooks設定例
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write|MultiEdit",
"hooks": [
{
"type": "command",
"command": "cd $CLAUDE_PROJECT_DIR && npm run lint --silent 2>&1 | head -20 || true"
}
]
}
],
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "echo "実行予定のコマンド: $CLAUDE_TOOL_INPUT" >> ~/.claude/command-log.txt"
}
]
}
],
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "osascript -e 'display notification "Claude Codeの応答が完了しました" with title "Claude Code"' 2>/dev/null || true"
}
]
}
]
}
}
| hookイベント | タイミング | 主な用途 |
|---|---|---|
PreToolUse |
ツール実行の直前 | ログ記録・実行の許可/拒否・事前チェック |
PostToolUse |
ツール実行の直後 | linter実行・テスト実行・フォーマット |
Notification |
Claude Codeが通知を送るとき | デスクトップ通知・Slack通知 |
Stop |
応答が完了したとき | 完了通知・後処理・ログ集計 |
hooksに渡される環境変数(
$CLAUDE_TOOL_INPUT等)にはユーザー入力が含まれる可能性があります。シェルインジェクションに注意し、外部入力をそのままコマンドに渡さないようにしてください。また、hooksが失敗してもClaude Codeの処理自体は続行されます(exit codeを無視する設計)。カスタムスラッシュコマンドの作成
カスタムスラッシュコマンドは、よく使うプロンプトを/コマンド名の形で呼び出せる機能です。.claude/commands/ディレクトリにMarkdownファイルを置くだけで登録されます。チーム全員が同じコマンドを使えるようにGit管理できるのも利点です。
.claude/
commands/
review.md # /project:review で呼び出す
test-gen.md # /project:test-gen で呼び出す
changelog.md # /project:changelog で呼び出す
deploy-check.md # /project:deploy-check で呼び出す
settings.json
rules/
database.md
--- description: コードレビューを実行して問題点をリストアップする --- 以下の観点でコードレビューを行い、問題点を重大度(critical/major/minor)付きで箇条書きにしてください。 **レビュー観点** 1. バグ・ロジックエラー(変数の未初期化・境界値の扱い・エラー処理の漏れ) 2. セキュリティ(インジェクション・認証・シークレットのハードコード) 3. パフォーマンス(N+1・無駄なループ・不要なDB呼び出し) 4. 可読性・保守性(命名・重複コード・関数の肥大化) 5. テスト(カバレッジの欠落・エッジケースの見落とし) 問題がない観点は省略し、良い点が目立つ場合は最後に「良い点」として1〜2点添えてください。 $ARGUMENTS
--- description: 指定したファイルのユニットテストを自動生成する --- $ARGUMENTS に指定されたファイルのユニットテストを生成してください。 **要件** - 既存のテストファイルがある場合は、そのスタイル・命名規則に合わせる - 正常系・異常系・エッジケースを網羅する - モック・スタブが必要な箇所は適切に設定する - テストの意図がわかるようにdescribeとitの説明文を日本語で書く まず対象ファイルを読んでから、テストを生成してください。
--- description: 直近のコミット履歴からCHANGELOGエントリを生成する --- 以下のgit logを取得して、ユーザー向けのCHANGELOGエントリを生成してください。 ```bash git log --oneline -20 ``` **フォーマット** ## [バージョン] - YYYY-MM-DD ### 追加 - 新機能の説明(ユーザー視点で) ### 変更 - 変更内容 ### 修正 - バグ修正の説明 技術的な内部実装の詳細ではなく、ユーザーやチームメンバーが理解できる言葉で書いてください。
# カスタムコマンドを呼び出す /project:review src/api/auth.py /project:test-gen src/services/payment.py /project:changelog # 引数なしで呼び出す /project:deploy-check
$ARGUMENTSはコマンド呼び出し時に渡した引数に置換されます。/project:review src/auth.pyと呼び出すと、$ARGUMENTSがsrc/auth.pyに展開されます。引数がない場合は空文字列になります。MCP(Model Context Protocol)でツールを拡張する
MCP(Model Context Protocol)はAnthropicが策定したオープン標準で、Claude CodeにDBクライアント・ブラウザ操作・外部APIなどのツールを追加できます。設定は.claude/settings.jsonまたは~/.claude/settings.jsonのmcpServersセクションに書きます。
{
"mcpServers": {
"github": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_TOKEN}"
}
},
"postgres": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres", "${DATABASE_URL}"]
},
"filesystem": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-filesystem",
"/home/user/projects"
]
},
"brave-search": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-brave-search"],
"env": {
"BRAVE_API_KEY": "${BRAVE_API_KEY}"
}
}
}
}
| MCPサーバー | パッケージ名 | できること |
|---|---|---|
| GitHub | @modelcontextprotocol/server-github |
Issue/PR操作・コード検索・リポジトリ管理 |
| PostgreSQL | @modelcontextprotocol/server-postgres |
DBスキーマ参照・SQLクエリ実行・データ確認 |
| Filesystem | @modelcontextprotocol/server-filesystem |
指定ディレクトリ外のファイル操作 |
| Brave Search | @modelcontextprotocol/server-brave-search |
リアルタイムWeb検索 |
| Slack | @modelcontextprotocol/server-slack |
チャンネル投稿・メッセージ検索 |
| Google Drive | @modelcontextprotocol/server-gdrive |
Googleドライブのファイル読み込み |
# Claude Code起動時にMCPの接続状態を確認 claude > /mcp # MCPツールを使う(自然な日本語で指示するだけ) > GitHubのissue一覧を取得して、未対応のバグ系issueを優先度順に整理してください > PostgreSQLのusersテーブルの構造を確認して、インデックスの最適化案を提案してください
チーム開発での.claude/ディレクトリ設計
チームでClaude Codeを活用する場合、.claude/ディレクトリをGitで管理することでチーム全員が同じ設定・コマンドを使えるようになります。ただし、個人のAPIキーやローカル固有の設定は含めないよう注意が必要です。
.claude/
settings.json # Git管理(MCPサーバー定義・hooks設定)
settings.local.json # .gitignore対象(個人のAPIキー・ローカル設定)
commands/
review.md
test-gen.md
changelog.md
deploy-check.md
rules/
database.md
security.md
api-design.md
CLAUDE.md # Git管理(プロジェクト概要・開発ルール)
# Claude Code個人設定(APIキー等) .claude/settings.local.json # Claude Codeのキャッシュ .claude/cache/
{
"mcpServers": {
"github": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_TOKEN}"
}
}
},
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write|MultiEdit",
"hooks": [
{
"type": "command",
"command": "cd $CLAUDE_PROJECT_DIR && npm run lint --silent 2>&1 | tail -5 || true"
}
]
}
]
},
"permissions": {
"allow": [
"Bash(npm run *)",
"Bash(git status)",
"Bash(git diff *)",
"Bash(git log *)"
],
"deny": [
"Bash(git push *)",
"Bash(rm -rf *)"
]
}
}
permissionsで操作範囲を制限する
permissions設定でClaude Codeが実行できる操作を明示的に制御できます。チーム環境では特に破壊的な操作を deny リストに入れることを推奨します。
{
"permissions": {
"allow": [
"Read(*)",
"Edit(*)",
"Write(src/**)",
"Bash(npm run *)",
"Bash(python -m pytest *)",
"Bash(git add *)",
"Bash(git commit *)",
"Bash(git status)",
"Bash(git diff *)"
],
"deny": [
"Bash(git push --force *)",
"Bash(rm -rf *)",
"Bash(DROP *)",
"WebFetch(https://internal-api.*)"
]
}
}
実践的な使い方パターン
パターン1:既存コードの一括リファクタリング
claude "src/services/ 以下のすべてのファイルを確認して、例外処理が統一されていない箇所を洗い出し、 app/exceptions.py で定義されているカスタム例外クラスを使うよう修正してください。 修正前に変更ファイルの一覧を提示してください。"
パターン2:テスト駆動での機能追加
claude "以下の仕様でAPIエンドポイントを実装してください。
まずテストを書き、テストがパスするように実装を進めてください。
仕様:
- POST /api/v1/users
- リクエスト: { name, email, role }
- メールの重複チェック(409を返す)
- roleは admin/user/viewer のいずれか(バリデーション)
- 成功時は作成したユーザーをJSONで返す(201)"
パターン3:CI/CDパイプラインでの活用
name: AI Code Review
on:
pull_request:
types: [opened, synchronize]
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install Claude Code
run: npm install -g @anthropic-ai/claude-code
- name: Run AI Review
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
git diff origin/main...HEAD > /tmp/pr-diff.txt
REVIEW=$(cat /tmp/pr-diff.txt | claude -p "このPRのdiffをレビューして、critical/majorの問題のみ箇条書きで報告してください。
問題がなければ「問題なし」とだけ返してください。")
echo "## AI Code Review" >> $GITHUB_STEP_SUMMARY
echo "$REVIEW" >> $GITHUB_STEP_SUMMARY
パターン4:ドキュメントの自動生成・更新
# コミットフックに組み込む例(.git/hooks/pre-commit) #!/bin/bash # APIエンドポイントファイルが変更された場合、ドキュメントを自動更新 if git diff --cached --name-only | grep -q "src/api/"; then echo "APIファイルの変更を検出。ドキュメントを更新します..." claude -p "src/api/ 以下の変更を確認して、docs/api-reference.md を最新の状態に更新してください。 エンドポイントの追加・変更・削除を反映してください。" --no-interactive git add docs/api-reference.md fi
まとめ
Claude Codeは設定の作り込みで大きく化けるツールです。まずCLAUDE.mdで自分のプロジェクトを正確に説明することから始め、慣れてきたらhooks・カスタムコマンド・MCPと段階的に拡張していくのがおすすめです。
| 設定項目 | 効果 | 優先度 |
|---|---|---|
| プロジェクトCLAUDE.md | AIがプロジェクトを正確に理解→指示の省略が可能に | ★★★(最優先) |
| グローバルCLAUDE.md | 全プロジェクト共通の行動原則を定義 | ★★★(最優先) |
| 条件付きルール | 特定作業でのみ適用される細かい規則を分離 | ★★(慣れてから) |
| カスタムコマンド | 繰り返し使うプロンプトを1コマンドに | ★★(慣れてから) |
| hooks | 編集→自動linter等のワークフロー自動化 | ★(必要に応じて) |
| MCP連携 | GitHub・DB等の外部ツールをClaude Codeに統合 | ★(必要に応じて) |
Claude API × TypeScript入門ではClaude APIをプログラムから直接扱う方法を解説しています。AIエージェントを自前で実装したい場合はAIエージェント完全実装ガイドも参考にしてください。
よくある質問
QClaude CodeとCursorはどちらを使えばよいですか?
A用途によります。GUIで快適にコードを書きながらAI補完も使いたい場合はCursorが向いています。ターミナル中心の作業・リポジトリ全体を横断する大規模な変更・CI/CDへの組み込みはClaude Codeが強いです。多くのエンジニアが「普段はCursor、大きな作業はClaude Code」と使い分けています。
QCLAUDE.mdはどのくらいの長さが適切ですか?
A目安は300〜800字(英語換算で200〜600トークン)です。長すぎるとコンテキストウィンドウを圧迫し、重要な指示が後半に埋もれます(Lost in the Middle問題)。最重要なルールを冒頭に置き、細かい規則は.claude/rules/に分離するのがベストプラクティスです。/initで自動生成したものを土台に削ぎ落としていくアプローチが効率的です。
Q.claude/settings.jsonとsettings.local.jsonの違いは何ですか?
Asettings.jsonはGitで管理してチームで共有するチーム共通設定です。settings.local.jsonは個人のAPIキーやローカル環境固有の設定を書くファイルで、.gitignoreに追加してGit管理から除外します。MCPサーバーの定義はチーム共有できますが、認証トークンはsettings.local.jsonか環境変数で管理してください。
QClaude Codeが意図しないファイルを編集しそうで怖いのですが、どう対処しますか?
Apermissions.denyに禁止操作を明示するのが最も確実です。また、インタラクティブモードでは各操作の前に確認プロンプトが表示されます(デフォルト動作)。自動実行モード(--dangerously-skip-permissions)は本番環境では使わないこと、CI/CDで使う場合はpermissions設定で操作範囲を最小限に絞ることを推奨します。
Qカスタムコマンドとグローバルコマンドの違いは何ですか?
A.claude/commands/に置いたコマンドは/project:コマンド名で呼び出します(プロジェクト固有)。~/.claude/commands/に置くと/user:コマンド名で呼び出せ、すべてのプロジェクトで使えます(個人共通)。「このプロジェクト専用のコマンド」はプロジェクト配下に、「どのプロジェクトでも使う汎用コマンド」はグローバルに置くと整理しやすいです。
QMCPサーバーは自作できますか?
Aはい。MCP SDKがPython・TypeScript向けに提供されており、社内APIや独自ツールをMCPサーバーとして実装できます。基本的な構成は「ツールの定義(名前・説明・入力スキーマ)」と「実行ロジック」だけで、stdio方式であればnpxやpythonコマンドで直接起動できます。公式ドキュメントにサンプルが充実しています。

