AIコーディング 2026.04.18

Claude Codeのコンテキスト設定【3つのステップで効率化】

タグ:Claude Code / 効率化 / コンテキスト管理 / プロンプト設計

Step 1: CLAUDE.mdでプロジェクトを永続定義する

# CLAUDE.md(プロジェクトルートに配置)
# Claude Codeが毎セッション自動で読み込む設定ファイル

## プロジェクト概要
Next.js 14 + TypeScript + Prisma + PostgreSQLのECサイト
(Vercelデプロイ)

## 技術スタック
- Frontend: Next.js 14 (App Router) + Tailwind CSS + shadcn/ui
- Backend: Server Actions + Prisma ORM
- DB: PostgreSQL (Vercel Postgres)
- 認証: Auth.js (NextAuth v5)

## コーディングルール
- `any` 型は禁止、不明な型は `unknown` を使う
- Server Actionsは認証チェックを先頭に書く
- 全入力はZodでバリデーションする
- `<img>` → next/image、`<a>` → next/link を使う

## 禁止操作
- `git push --force` は実行しない
- `.env`ファイルにシークレットを直書きしない
- `npm install -g` はユーザーに確認してから実行する

Step 2: セッション開始プロンプトを標準化する

毎セッションの最初のメッセージテンプレート:

「前回の作業状況:
- 完了: ユーザー認証の実装(Auth.js設定済み)
- 次のタスク: 商品一覧ページ(/products)の実装
- 現在のブロッカー: なし

今日は商品一覧ページのGetStaticPropsとUIコンポーネントを作ってください。
Prismaスキーマは prisma/schema.prisma に、既存のコンポーネントは src/components/ にあります。」

Step 3: Prompt Cachingでコンテキストをキャッシュする

# cached_context.py
# 長いシステムプロンプトをキャッシュして繰り返し利用のコストを削減する

import anthropic
from pathlib import Path

client = anthropic.Anthropic()

def load_claude_md() -> str:
    """CLAUDE.mdを読み込む"""
    claude_md = Path("CLAUDE.md")
    if not claude_md.exists():
        return "CLAUDE.md not found"
    return claude_md.read_text()

PROJECT_CONTEXT = load_claude_md()

def ask_with_cached_context(question: str) -> str:
    """プロジェクトコンテキストをキャッシュして作業する(コスト90%削減)"""
    response = client.messages.create(
        model="claude-sonnet-4-5",
        max_tokens=2048,
        system=[{
            "type": "text",
            "text": PROJECT_CONTEXT,
            "cache_control": {"type": "ephemeral"}  # ← 5分間キャッシュ有効
        }],
        messages=[{"role": "user", "content": question}]
    )
    
    # キャッシュ効果の確認
    cached = getattr(response.usage, "cache_read_input_tokens", 0)
    inp = response.usage.input_tokens
    out = response.usage.output_tokens
    
    if cached > 0:
        saved = (cached * 3.00 * 0.9) / 1_000_000  # 90%オフで節約した分
        print(f"✅ キャッシュHIT: {cached}トークン節約 (${saved:.4f}節約)")
    else:
        print(f"💾 キャッシュ書き込み: {inp}トークン")
    
    return response.content[0].text

# セッション中は同じコンテキストをキャッシュ再利用
result1 = ask_with_cached_context("Productモデルの一覧取得関数を実装してください")
result2 = ask_with_cached_context("ProductCardコンポーネントを作ってください")
# ← result2の時点でキャッシュHITしてコスト90%削減

print(result1)

コンテキスト設定の効果比較

設定なし (Before):
  - セッション開始時に毎回3〜5分のプロジェクト説明
  - 「TypeScriptを使ってください」「Prismaで書いて」を毎回指示
  - 担当者が変わると引き継ぎに時間がかかる

CLAUDE.md設定あり (After):
  - セッション開始即座に開発開始
  - コーディングルールが自動適用
  - 新メンバーが CLAUDE.md を読めばプロジェクトを理解できる
  - Prompt Cachingで繰り返し利用のAPIコスト90%削減

あわせて読みたい

参考ソース