はじめに

Claude Codeの真価は、自然言語で要件を伝えるだけで、プロジェクトの規約に沿った高品質なコードを生成できる点にあります。公式サイトでは、この機能について以下のように説明されています。

Build features from descriptions: Tell Claude what you want to build in plain English. It will make a plan, write the code, and ensure it works.

本記事では、Claude Codeを使って効率的にコードを生成するための実践的なテクニックを解説します。この記事を読むことで、以下のことができるようになります。

  • 機能要件を自然言語で伝え、実装コードを生成する
  • 既存のコードパターンや規約に沿った新規コードを作成する
  • 複数ファイルにまたがる大規模な編集を一度に行う
  • 生成されたコードをレビューし、効果的に修正を依頼する

実行環境

  • オペレーティングシステム: macOS 10.15以上、Ubuntu 20.04以上/Debian 10以上、Windows 10以上(WSL 1/2またはGit for Windows)
  • ハードウェア: 4GB以上のRAM
  • Node.js 18以上(npmインストールの場合のみ必要)
  • インターネット接続(認証およびAI処理に必要)
  • シェル環境: Bash、Zsh、またはFish推奨

前提条件

  • コマンドライン操作の基礎知識
  • Gitの基本操作(clone、commit、push等)
  • プログラミングの基礎知識(言語は問わない)
  • Claude.aiまたはAnthropic Consoleアカウント
  • Claude Codeのインストールと認証が完了していること

コード生成の基本ワークフロー

Claude Codeでコードを生成する際の基本的な流れを理解しましょう。

flowchart TD
    A[要件を自然言語で記述] --> B[Claude Codeが計画を立案]
    B --> C[コードの生成と提案]
    C --> D{承認?}
    D -->|Yes| E[ファイルに適用]
    D -->|No| F[修正を依頼]
    F --> C
    E --> G[動作確認とテスト]
    G --> H{問題あり?}
    H -->|Yes| I[追加の修正を依頼]
    I --> C
    H -->|No| J[完了]

このワークフローの特徴は、人間が常に最終的な判断権を持つ点です。Claude Codeはファイルを編集する前に必ず承認を求めるため、意図しない変更が適用されることはありません。

機能要件からのコード生成

自然言語で機能要件を伝え、実装コードを生成する方法を解説します。

基本的なコード生成の依頼

最もシンプルな形式は、何を実装したいかを直接伝えることです。

1
> ユーザー認証のためのJWTトークンを生成する関数を作成して

Claude Codeは、プロジェクトの技術スタックを自動的に認識し、適切な実装を提案します。例えば、Node.jsプロジェクトであればjsonwebtokenパッケージを使用し、PythonプロジェクトであればPyJWTを使用した実装を生成します。

詳細な要件を含めた依頼

より具体的な要件を含めることで、期待通りの実装を得られる確率が高まります。

1
2
3
4
5
6
7
> ユーザー認証のためのJWTトークンを生成する関数を作成して。
> 以下の要件を満たすこと:
> - アクセストークンの有効期限は15分
> - リフレッシュトークンの有効期限は7日
> - ペイロードにはユーザーID、メールアドレス、ロールを含める
> - シークレットキーは環境変数から取得
> - TypeScriptの型定義を含める

入出力を明示した依頼

関数の入出力を明示することで、Claude Codeはより正確な実装を生成できます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
> 以下の仕様でパスワードバリデーション関数を作成して:
> 
> 入力: パスワード文字列
> 出力: { isValid: boolean, errors: string[] }
> 
> バリデーションルール:
> - 8文字以上
> - 大文字を1文字以上含む
> - 小文字を1文字以上含む
> - 数字を1文字以上含む
> - 特殊文字を1文字以上含む

エラーハンドリングを含めた依頼

実運用を見据えた堅牢なコードを生成するには、エラーハンドリングの要件も伝えます。

1
2
3
4
5
6
> ファイルアップロードAPIエンドポイントを実装して。
> エラーハンドリングとして以下を含めること:
> - ファイルサイズ制限(最大5MB)のチェック
> - 許可されるファイル形式(jpg, png, pdf)の検証
> - ウイルススキャン失敗時の処理
> - 適切なHTTPステータスコードとエラーメッセージの返却

既存コードパターンに沿った新規実装

プロジェクトには独自のコーディングスタイルや設計パターンがあります。Claude Codeはコードベース全体を理解し、既存のパターンに沿った実装を生成できます。

既存コンポーネントを参考にした実装

既存のコードを参照して、同じパターンで新しいコードを作成するよう依頼できます。

1
2
> @src/components/UserList.tsx を参考に、ProductListコンポーネントを作成して。
> 同じディレクトリ構造、スタイリングパターン、状態管理の方法を使用すること。

@記法でファイルを参照することで、Claude Codeはそのファイルの実装パターンを確実に認識します。

パターンの自動検出と適用

明示的に参照ファイルを指定しなくても、Claude Codeはプロジェクト全体を分析してパターンを検出できます。

1
2
> 新しいサービスクラス OrderService を作成して。
> 既存のサービスクラスと同じディレクトリ構造、命名規則、依存性注入パターンに従うこと。

Claude Codeは、既存のUserServiceProductServiceなどを分析し、同じパターンでOrderServiceを生成します。

CLAUDE.mdによるパターンの明示化

プロジェクトのコーディング規約をCLAUDE.mdに記述しておくと、Claude Codeは常にその規約に従ったコードを生成します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
## コーディング規約

### コンポーネント構造

Reactコンポーネントは以下の構造に従う:

1. import文(外部 → 内部 → スタイル)
2. 型定義(Props、State)
3. コンポーネント本体(関数コンポーネント)
4. スタイル定義

### 命名規則

- コンポーネント: PascalCase(例: UserProfile)
- カスタムフック: useプレフィックス(例: useAuth)
- ユーティリティ関数: camelCase(例: formatDate)
- 定数: UPPER_SNAKE_CASE(例: MAX_RETRY_COUNT)

### エラーハンドリング

- API呼び出しは必ずtry-catchで囲む
- エラーは統一のErrorBoundaryで処理
- ユーザー向けエラーメッセージは日本語で表示

この設定により、「新しいコンポーネントを作成して」という簡単な依頼でも、規約に沿った構造のコードが生成されます。

既存テストパターンの踏襲

テストコードも既存のパターンを踏襲させることができます。

1
2
3
> @src/tests/UserService.test.ts のテストパターンに従って、
> OrderServiceのテストを作成して。
> モック、セットアップ、アサーションの書き方を統一すること。

複数ファイルにまたがる編集

実際の開発では、1つの機能実装で複数のファイルを編集することが一般的です。Claude Codeは、公式サイトで「Make powerful edits」と呼ばれる複数ファイルの編集を得意としています。

Claude Code’s understanding of your codebase and dependencies enables it to make powerful, multi-file edits that work.

機能単位での複数ファイル生成

機能全体を一度に実装するよう依頼できます。

1
2
3
4
5
6
> ユーザーのお気に入り機能を実装して。以下のファイルを作成・編集すること:
> - APIエンドポイント(routes/favorites.ts)
> - サービスクラス(services/FavoriteService.ts)
> - リポジトリ(repositories/FavoriteRepository.ts)
> - 型定義(types/favorite.ts)
> - データベースマイグレーション

Claude Codeは、各ファイルの依存関係を理解した上で、整合性のとれたコードを生成します。

レイヤー横断の実装

クリーンアーキテクチャやレイヤードアーキテクチャを採用しているプロジェクトでは、レイヤーを横断した実装を依頼できます。

1
2
3
> 商品検索機能を追加して。
> Controller → UseCase → Repository の流れで実装し、
> 各レイヤーの責務を適切に分離すること。

関連ファイルの自動検出と編集

Claude Codeは、変更の影響範囲を自動的に検出し、関連するファイルも更新します。

1
2
> Userエンティティにプロフィール画像のフィールドを追加して。
> 関連するDTOやレスポンス型も更新すること。

この依頼により、Claude Codeは以下のファイルを自動的に検出して更新します。

  • エンティティ定義
  • DTOクラス
  • マッパー
  • APIレスポンス型
  • データベースマイグレーション
  • テストのモックデータ

変更の確認と段階的な適用

複数ファイルの編集では、変更内容を一つずつ確認しながら適用できます。

sequenceDiagram
    participant User as ユーザー
    participant Claude as Claude Code
    participant File1 as routes/favorites.ts
    participant File2 as services/FavoriteService.ts
    participant File3 as types/favorite.ts

    User->>Claude: お気に入り機能を実装して
    Claude-->>User: routes/favorites.ts の変更を提案
    User->>Claude: 承認
    Claude->>File1: 変更を適用
    Claude-->>User: services/FavoriteService.ts の変更を提案
    User->>Claude: 修正を依頼
    Claude-->>User: 修正版を提案
    User->>Claude: 承認
    Claude->>File2: 変更を適用
    Claude-->>User: types/favorite.ts の変更を提案
    User->>Claude: 承認
    Claude->>File3: 変更を適用

生成コードのレビューと修正依頼

Claude Codeが生成したコードは、そのまま使用するのではなく、レビューして必要に応じて修正を依頼することが重要です。

生成されたコードの確認ポイント

Claude Codeが提案したコードを確認する際のチェックリストです。

確認項目 チェック内容
機能要件 依頼した機能が正しく実装されているか
コーディング規約 プロジェクトの規約に沿っているか
セキュリティ 脆弱性を含んでいないか
パフォーマンス 非効率な処理がないか
テスタビリティ テストしやすい設計になっているか
エラーハンドリング 適切な例外処理が含まれているか

具体的な修正の依頼方法

生成されたコードに問題がある場合、具体的に修正を依頼します。

1
2
3
4
5
> さっき生成したコードで、以下の点を修正して:
> - ログインエラー時のエラーメッセージを「認証に失敗しました」から
>   「メールアドレスまたはパスワードが正しくありません」に変更
> - リトライ処理を追加(最大3回、1秒間隔)
> - 処理時間が3秒を超えた場合のタイムアウト処理を追加

部分的な修正の依頼

コード全体ではなく、特定の部分だけを修正させることもできます。

1
2
> generateToken関数のエラーハンドリングだけを修正して。
> 現在は例外を投げているが、Result型を返すように変更すること。

理由を説明した修正依頼

修正の理由を説明することで、Claude Codeはより適切な修正を提案できます。

1
2
3
4
5
6
7
8
> このAPIレスポンスの形式を変更して。
> 現在の形式だとフロントエンドでの処理が複雑になるため、
> 以下の形式に統一したい:
> {
>   success: boolean,
>   data: T | null,
>   error: { code: string, message: string } | null
> }

代替案の要求

複数の実装方法を比較検討したい場合は、代替案を要求できます。

1
2
3
4
5
> このキャッシュ実装について、以下の3パターンを提案して:
> 1. インメモリキャッシュ(node-cache)
> 2. Redis
> 3. ファイルベースのキャッシュ
> それぞれのメリット・デメリットも説明すること。

効果的なプロンプトのテクニック

Claude Codeでより良いコードを生成するためのプロンプトテクニックを紹介します。

コンテキストの提供

背景情報を提供することで、より適切な実装を得られます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 悪い例
> ログイン機能を作って

# 良い例
> 以下の要件でログイン機能を実装して:
> - 認証方式: メールアドレス + パスワード
> - セッション管理: JWTトークン(アクセストークン + リフレッシュトークン)
> - 既存の認証ミドルウェア(@src/middleware/auth.ts)を使用
> - ログイン試行回数の制限(5回失敗でロック)
> - ログイン履歴の記録

段階的な依頼

複雑な機能は、段階的に依頼することで精度が上がります。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 最初の依頼
> 決済処理の基本設計を説明して。どのようなクラス構成になるか。

# 設計確認後
> その設計に基づいて、PaymentServiceクラスを実装して。

# サービス実装後
> PaymentServiceのテストを作成して。

# テスト作成後
> 決済エラー時のリトライ処理を追加して。

否定形での制約指定

してほしくないことを明示することも効果的です。

1
2
3
4
5
> ユーザー検索APIを実装して。
> ただし、以下は行わないこと:
> - SQLの直接実行(ORMを使用)
> - パスワードフィールドの返却
> - ページネーションなしの全件取得

ultrathinkによる深い思考の活用

複雑な実装や設計判断が必要な場合、ultrathinkキーワードを使用してClaude Codeに深く考えさせることができます。

1
2
> ultrathink: マイクロサービス間の認証・認可システムを設計して実装して。
> サービスメッシュ、OAuthフロー、トークン管理を考慮すること。

実践的なコード生成シナリオ

実際の開発でよくあるシナリオでのコード生成例を紹介します。

シナリオ1: REST APIエンドポイントの追加

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
> 商品のCRUD APIを実装して。
> 
> エンドポイント:
> - GET /api/products - 商品一覧(ページネーション、検索、ソート対応)
> - GET /api/products/:id - 商品詳細
> - POST /api/products - 商品作成(管理者のみ)
> - PUT /api/products/:id - 商品更新(管理者のみ)
> - DELETE /api/products/:id - 商品削除(論理削除、管理者のみ)
> 
> 既存の@src/routes/users.ts のパターンに従うこと。
> 認証・認可には既存のミドルウェアを使用。

シナリオ2: データベースマイグレーションの作成

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
> 注文履歴テーブルのマイグレーションを作成して。
> 
> テーブル名: order_histories
> カラム:
> - id (UUID, PK)
> - user_id (FK to users)
> - product_id (FK to products)
> - quantity (integer, not null)
> - unit_price (decimal(10,2), not null)
> - total_amount (decimal(10,2), not null)
> - status (enum: pending, confirmed, shipped, delivered, cancelled)
> - ordered_at (timestamp)
> - created_at, updated_at (timestamps)
> 
> インデックス: user_id, product_id, status, ordered_at

シナリオ3: フロントエンドコンポーネントの作成

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
> 商品詳細ページのコンポーネントを作成して。
> 
> 機能:
> - 商品画像のカルーセル表示
> - 商品情報(名前、価格、説明、在庫状況)の表示
> - 数量選択
> - カートに追加ボタン
> - お気に入り登録ボタン
> - レビュー一覧(ページネーション付き)
> 
> 使用技術:
> - React + TypeScript
> - Tailwind CSS(既存のデザインシステムを使用)
> - React Query for データフェッチ
> - Zustand for 状態管理

シナリオ4: バッチ処理の実装

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
> 毎日深夜に実行する未払い注文のリマインダー送信バッチを作成して。
> 
> 処理内容:
> 1. 3日以上未払いの注文を抽出
> 2. 各注文のユーザーにリマインダーメールを送信
> 3. 7日以上未払いの注文は自動キャンセル
> 4. 処理結果をログとSlack通知
> 
> エラーハンドリング:
> - メール送信失敗時は3回リトライ
> - バッチ全体の失敗時はアラート
> - 部分的な失敗は続行し、最後にサマリーを報告

コード生成のベストプラクティス

1. 小さく始めて段階的に拡張する

一度に大きな機能を依頼するより、小さな単位で依頼して段階的に拡張する方が、精度の高いコードを得られます。

2. 生成されたコードは必ずレビューする

AIが生成したコードをそのまま本番環境に適用するのは危険です。必ずセキュリティ、パフォーマンス、ビジネスロジックの観点でレビューしてください。

3. テストも一緒に生成する

コードと一緒にテストを生成させることで、実装の品質を担保できます。

1
> この機能を実装して、同時にユニットテストも作成して

4. Plan Modeで計画を確認する

複雑な実装の場合、まずPlan Modeで計画を確認してから実装に移ると安全です。

1
2
# Shift+Tab でPlan Modeに切り替え
> この機能を実装する場合、どのファイルをどのように変更する必要があるか計画を立てて

5. コミットは細かく分ける

生成されたコードは、論理的な単位でコミットを分けると、後からの追跡やロールバックが容易になります。

まとめ

Claude Codeによるコード生成は、以下のポイントを押さえることで効果的に活用できます。

  • 機能要件を具体的に伝え、入出力やエラーハンドリングも明示する
  • 既存のコードパターンを@記法で参照し、プロジェクトの規約に沿った実装を得る
  • 複数ファイルにまたがる編集も一度の依頼で実行できる
  • 生成されたコードは必ずレビューし、具体的な修正を依頼する
  • 段階的に依頼することで、複雑な機能も高精度で実装できる

Claude Codeは、自然言語でのコミュニケーションを通じて、開発者の意図を理解し、プロジェクトの文脈に沿ったコードを生成する強力なパートナーです。適切なプロンプトテクニックを身につけ、効率的な開発ワークフローを構築しましょう。

参考リンク