WithCodeMedia-1-pc
previous arrowprevious arrow
next arrownext arrow

WithCodeMedia-1-sp
previous arrowprevious arrow
next arrownext arrow

Claude Codeで実務コードを書かせてわかった「得意・不得意」全記録|プロンプト付き

生徒

Claude Codeって実際どんなことが得意で、どんなことが苦手なんですか?使ってみたいけど、どこから始めればいいかわからなくて。

ペン博士

正直に言おう。Claude Codeには明確な「得意」と「苦手」がある。今日はそれを全部記録したものを見せる。プロンプトも全部載せてあるから、そのまま試せる。

Claude Codeはエージェント型のAIコーディングツールであり、補完型とは根本的に異なります。「自律的にファイルを読み・書き・実行する」という性質上、得意なタスクと苦手なタスクがはっきりしています。

本記事では、実務で200以上のタスクをClaude Codeに依頼した経験から、カテゴリ別に「得意なタスク」「苦手なタスク」を整理しました。さらに、効果的なプロンプトのパターンと、失敗したときの対処法も具体例付きで紹介します。

AIツールを使いこなすには、道具の特性を正確に理解することが重要です。「何でもできる魔法のツール」として期待過多で使うと失望し、「使えないツール」という誤った評価に至ります。本記事で正確な期待値を設定してください。


目次

Claude Codeが得意なタスク一覧

【得意①】リファクタリング:コードの構造改善

Claude Codeが最も力を発揮するのは既存コードのリファクタリングです。コードを読んで、意図を理解し、動作を変えずに構造を改善します。「この関数を分割して」「重複を削除して」「命名を統一して」といった指示が特に有効です。

# 効果的なリファクタリングプロンプト例
「src/utils/validation.js の全関数をリファクタしてください。

条件:
- 各関数は単一責任の原則に従う(1関数1責任)
- 共通ロジックは切り出してヘルパー関数にする
- 関数名は「動詞 + 対象」の命名規則に統一する
- JSDocコメントを全関数に追加する
- 既存のテスト(validation.test.js)が全て通ること

変更したファイルと変更内容の概要を最後に教えてください。」

このプロンプトのポイントは「条件」を箇条書きにして曖昧さをなくしていることです。「良い感じにリファクタして」では何を重視するか解釈がばらつきますが、条件を明示することでアウトプットが安定します。

// Claude Code が生成したリファクタリング結果の例
// Before: 複雑な条件が1関数に混在
function validate(data) {
  if (!data.email || !data.email.includes('@')) return false;
  if (!data.password || data.password.length < 8) return false;
  if (!data.name || data.name.trim() === '') return false;
  return true;
}

// After: Claude Code によるリファクタ結果
/**
 * メールアドレスの形式を検証する
 * @param {string} email - 検証対象のメールアドレス
 * @returns {boolean} 有効なメールアドレス形式かどうか
 */
const isValidEmail = (email) => {
  if (!email) return false;
  const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
  return emailRegex.test(email);
};

/**
 * パスワードの強度を検証する
 * @param {string} password - 検証対象のパスワード
 * @returns {boolean} パスワードが要件を満たすかどうか
 */
const isValidPassword = (password) => {
  if (!password) return false;
  return password.length >= 8;
};

/**
 * ユーザー名の有効性を検証する
 * @param {string} name - 検証対象のユーザー名
 * @returns {boolean} 有効なユーザー名かどうか
 */
const isValidName = (name) => {
  if (!name) return false;
  return name.trim().length > 0;
};

/**
 * ユーザー登録フォームのバリデーション
 * @param {Object} data - 検証対象のデータ
 * @returns {boolean} 全フィールドが有効かどうか
 */
const validateUserRegistration = (data) => {
  return isValidEmail(data.email) &&
         isValidPassword(data.password) &&
         isValidName(data.name);
};

【得意②】テスト生成:ユニットテストの自動作成

テストを書くのは重要だが時間がかかる——そんな悩みを解決するのがテスト生成タスクです。Claude Codeは実装コードを読んでエッジケースを含むテストを生成します。

# テスト生成プロンプト例
「src/utils/date.ts のユニットテストを書いてください。

使用フレームワーク: Jest + TypeScript
対象ファイル: src/utils/date.ts(既に存在します)

テストの方針:
- 正常系・異常系・境界値をカバーする
- describe でカテゴリを分ける
- 各テストケースに日本語のコメントで何をテストしているか書く
- モックが必要な場合は jest.mock() を使う

出力先: src/utils/date.test.ts」
// Claude Code が生成したテストの例
import { formatDate, parseDate, isValidDate, getDaysBetween } from './date';

describe('formatDate', () => {
  test('Dateオブジェクトを YYYY-MM-DD 形式にフォーマットする', () => {
    const date = new Date('2026-07-10T00:00:00Z');
    expect(formatDate(date)).toBe('2026-07-10');
  });

  test('月・日が1桁の場合に0埋めされる', () => {
    const date = new Date('2026-01-05T00:00:00Z');
    expect(formatDate(date)).toBe('2026-01-05');
  });

  test('null を渡した場合は空文字を返す', () => {
    expect(formatDate(null)).toBe('');
  });
});

describe('isValidDate', () => {
  test('有効な日付文字列でtrueを返す', () => {
    expect(isValidDate('2026-07-10')).toBe(true);
  });

  test('存在しない日付(2月30日)でfalseを返す', () => {
    expect(isValidDate('2026-02-30')).toBe(false);
  });

  test('空文字でfalseを返す', () => {
    expect(isValidDate('')).toBe(false);
  });
});

describe('getDaysBetween', () => {
  test('2日間の差を正しく計算する', () => {
    const from = new Date('2026-07-01');
    const to = new Date('2026-07-03');
    expect(getDaysBetween(from, to)).toBe(2);
  });

  test('同じ日付の差は0を返す', () => {
    const date = new Date('2026-07-10');
    expect(getDaysBetween(date, date)).toBe(0);
  });
});

【得意③】型定義の追加・修正(TypeScript)

JavaScriptからTypeScriptへの移行、anyの排除、型定義の追加——TypeScriptの型周りの作業はClaude Codeが非常に得意とするカテゴリです。

# 型定義追加プロンプト例
「src/api/users.js の TypeScript 化を行ってください。

手順:
1. .js を .ts にリネーム
2. 全関数の引数・戻り値に型を付ける
3. any は使わない
4. API レスポンスの型は src/types/api.ts に定義する(新規作成)
5. 既存のインポートを壊さない

特に注意: getUserById の戻り値は User | null 型にすること」

【得意④】ドキュメント生成:JSDoc・READMEの自動生成

コードのドキュメントを書くのは後回しになりがちです。Claude Codeにコードを読ませてJSDocやREADMEを生成させるタスクは高い精度で動作します。

# JSDoc 生成プロンプト例
「src/services/ ディレクトリ内の全ファイルに
 JSDocコメントを追加してください。

追加するコメントの要件:
- @param: 各引数の型・説明
- @returns: 戻り値の型・説明
- @throws: エラーをスローする条件
- @example: 使用例(各関数に1つ以上)

既存のコメントは上書きせずに補完する形で追加してください。」

【得意⑤】バグ修正:エラーメッセージを起点とした修正

エラーメッセージとスタックトレースをそのまま渡すと、Claude Codeはエラーの原因を特定して修正します。エラーの文脈(どの操作をしたときに起きたか)を一緒に伝えると精度が上がります。

# バグ修正プロンプト例
「以下のエラーが本番で発生しています。修正してください。

エラーメッセージ:
TypeError: Cannot read properties of undefined (reading 'name')
    at UserCard (/src/components/UserCard.tsx:23:30)
    at renderWithHooks
    ...

発生条件: ユーザーがログアウト後にダッシュボードにアクセスしたとき

確認済みのこと: user オブジェクトがログアウト後に undefined になる

修正の方針: オプショナルチェーン(?.)でガードするか、
user が undefined の場合に早期returnするかで判断してください。」

Claude Codeが苦手なタスク一覧

【苦手①】UI/UXの美しさを判断する作業

Claude Codeは「見た目が美しいかどうか」を判断できません。CSSを生成させることはできますが、デザインの審美性(余白のバランス、色の調和、視覚的なヒエラルキー)を評価する能力はありません。

実際に起きた失敗例:「デザインをモダンにして」と指示したところ、機能的には問題ないが視覚的に整っていないCSSが生成されました。UIの美しさはデザイナーの目で確認する必要があります。

対処法:CSSの変更後は必ずブラウザで確認する。デザインの指示は「font-size: 2rem にして」など数値で指定する。フィグマデザインを参照させる(画像入力対応モデルの場合)。

【苦手②】曖昧な仕様からの実装

「いい感じのダッシュボードを作って」「使いやすいフォームにして」といった曖昧な指示では精度が落ちます。Claude Codeは仕様が明確であるほど精度が上がります。

# 曖昧なプロンプト(非推奨)
「ダッシュボードをもっとよくして」
→ 何をどう変えるか不明のため、当たり障りのない修正しか得られない

# 具体的なプロンプト(推奨)
「ダッシュボードの以下を修正してください:
1. KPIカードを横並び3列に変更(現在は縦積み)
2. 各カードに前月比の変化率(%)を追加
3. 変化率がマイナスの場合は赤字、プラスの場合は緑字
4. レスポンシブ: 768px以下では1列に変更
使用スタックは既存の Tailwind CSS を使ってください。」

【苦手③】外部APIの最新仕様への対応

Claude Codeの学習データには時間的な制限があります。2024年以降にリリースされた外部APIの最新仕様を正確に実装することが難しい場合があります。

実際に起きた失敗例:Stripe APIのv2系エンドポイントを実装させたところ、学習データに含まれていない新しいパラメータを古いv1系の書き方で実装してしまいました。

対処法:APIリファレンスの最新版を自分でコピーしてプロンプトに貼り付ける。「以下のドキュメントを参考にして実装して」と一次情報を直接提供する。

# 外部API実装時の推奨プロンプトパターン
「以下のAPIドキュメントを参考に実装してください。
ドキュメントの内容を最優先にし、学習データより新しい場合は
ドキュメントの仕様に従ってください。

--- APIドキュメント ---
POST /v2/payment_intents

Request body:
  amount: integer (required) - Amount in smallest currency unit
  currency: string (required) - Three-letter ISO currency code
  payment_method_types: array - ['card', 'bank_transfer']
  metadata: object - Set of key-value pairs

Response:
  id: string
  status: 'requires_payment_method' | 'succeeded' | 'canceled'
---

実装タスク: カード決済の intent を作成し、
3D Secure が必要な場合のハンドリングも追加してください。」

【苦手④】ビジネスロジックの設計判断

「このシステムのアーキテクチャをどうすべきか」「このビジネスルールの例外処理をどう実装すべきか」といった設計判断は、Claude Codeには難しい領域です。コードを書く前の設計段階の判断はChatGPTやClaude.aiとの対話型セッションで行い、実装段階をClaude Codeに任せるのが効果的です。

【苦手⑤】デバッグ情報なしでのバグ特定

「なんかバグがある」という情報だけでは正確な原因特定が難しいです。どの操作で・どんなエラーが・どの環境で発生したかを具体的に伝えることが必要です。

理想的なバグ報告の要素:エラーメッセージ全文・スタックトレース・再現手順・期待する動作・実際の動作・環境情報(Node.jsバージョン、ブラウザ等)。

効くプロンプト設計のパターン集

パターン①:「条件箇条書き+完了条件」型

最も汎用性が高いのが条件を箇条書きにし、完了条件を明記するパターンです。「何を変えてほしいか」「どうなれば完了か」を分離して伝えます。

# テンプレート
「[対象ファイル/ディレクトリ] の [処理内容] を行ってください。

条件:
- 条件1
- 条件2
- 条件3

完了条件:
- 既存のテストが全て通ること
- 変更したファイルの一覧を報告すること
- [追加の確認事項]」

# 実際の使用例
「src/hooks/ 内の全カスタムフックをリファクタしてください。

条件:
- TypeScript の型を全て明示する(any禁止)
- useEffect の依存配列を正確に記述する
- 各フックに JSDoc コメントを追加する

完了条件:
- yarn test が全てパスすること
- 変更したファイルと変更内容の要約を最後に教えること」

パターン②:「禁止事項明示」型

何をしてほしくないかを明示することで、不意の副作用を防ぎます。特に「他のファイルは触らない」「このパッケージは使わない」という制約を伝えると安全です。

# 禁止事項を明示したプロンプト例
「src/components/Modal.tsx に アニメーションを追加してください。

追加するアニメーション:
- 開くとき: 下からフェードイン(0.3秒)
- 閉じるとき: 上にフェードアウト(0.2秒)

禁止事項:
- framer-motion や他のアニメーションライブラリを追加しない
- CSS Modules は使わない(Tailwind CSS のみ使用)
- Modal.test.tsx は変更しない
- Modal.tsx 以外のファイルは変更しない」

パターン③:「段階的確認」型

大きなタスクを一度に依頼すると失敗リスクが高まります。段階的に確認しながら進めるパターンが安全です。

# 段階的確認プロンプトの例
「データベースのマイグレーションを行います。
まずファイルの変更点だけを教えてください(まだ変更しないでください)。

変更内容:
- users テーブルに profile_image_url カラム(VARCHAR(500))を追加
- posts テーブルに view_count カラム(INT DEFAULT 0)を追加
- マイグレーションファイルを migrations/ に作成

確認できたら「実行してください」と言います。」

# 続けて確認後に実行
「わかりました。実行してください。
ただし、マイグレーションの実行はしないでください。
ファイルを作成するだけで止めてください。」

パターン④:「ロール指定」型

「あなたはセキュリティの専門家として」などロールを指定するプロンプトは、特定の視点でレビューさせたい場合に有効です。

# ロール指定プロンプト例
「セキュリティエンジニアとして、以下のAPIエンドポイントを
 セキュリティ観点でレビューしてください。

特に以下の観点でチェックしてください:
- SQLインジェクション
- XSSの可能性
- 認証・認可の抜け穴
- レート制限の欠如
- センシティブな情報の露出

```javascript
app.post('/api/login', async (req, res) => {
  const { email, password } = req.body;
  const user = await db.query(
    `SELECT * FROM users WHERE email = '${email}'`
  );
  if (user && user.password === password) {
    res.json({ token: generateToken(user.id) });
  }
});
```

問題点を指摘し、修正コードも提示してください。」

失敗例と対処法

失敗例①:コンテキスト不足で的外れな修正をされた

プロジェクトの全体像を伝えずに「このファイルを修正して」と指示した結果、プロジェクトの設計方針と矛盾する実装が生成されました。

対処法:CLAUDE.mdにプロジェクトの設計方針・使用スタック・コーディング規約を書く。「このプロジェクトはReact + TypeScript + Tailwind CSSを使っています」という前提を毎回伝えるより、CLAUDE.mdに書いておく方が効率的です。

# CLAUDE.md の推奨記載内容
# プロジェクト概要
Reactを使ったECサイトのフロントエンド。

# 技術スタック
- React 19 + TypeScript
- Tailwind CSS(CSS Modulesは使わない)
- React Query(SWRは使わない)
- Zod(yupは使わない)
- Vitest(Jestは使わない)

# コーディング規約
- 関数コンポーネントのみ(クラスコンポーネント禁止)
- any型禁止
- console.logをコミットに含めない
- コメントは日本語で書く

# ディレクトリ構成
src/
  components/  # 再利用可能なコンポーネント
  pages/       # ページコンポーネント
  hooks/       # カスタムフック
  types/       # 型定義

失敗例②:テストが通らないコードを生成された

新機能を実装させたところ、既存のテストを破壊するコードが生成されました。テストファイルの存在を伝えていなかったことが原因です。

対処法:「既存のテストが通ること」を完了条件に必ず含める。また、テスト実行コマンドを明示する(「npm test で確認してください」)。

# テスト通過を担保するプロンプト例
「src/utils/price.ts に税込価格計算関数を追加してください。

関数仕様:
- 関数名: calcPriceWithTax
- 引数: price: number (税抜価格), taxRate: number (税率、例: 0.1)
- 戻り値: number(小数点以下は切り捨て)

完了条件:
- yarn test で全テストがパスすること
- 追加した関数の単体テストも src/utils/price.test.ts に追加すること
- console.log は残さないこと」

失敗例③:不要なパッケージを追加された

シンプルな日付フォーマット処理を依頼したところ、不要なdate-fnsが追加されました。日付処理ならnative JavaScriptで十分な場面でした。

対処法:「追加のnpmパッケージは使わない」を明示する。または「既存の依存パッケージのみ使用」と指定する。

# パッケージ追加を防ぐプロンプト
「日付のフォーマット関数を実装してください。

仕様: Date → "YYYY年MM月DD日" 形式の文字列に変換

制約:
- 新しいnpmパッケージは追加しない
- ネイティブのDateオブジェクトAPIのみ使用する
- date-fns, moment, dayjs 等のライブラリは使わない」

失敗例④:複数ファイルの変更が途中で止まった

大規模なリファクタを一度に依頼したところ、コンテキストウィンドウの制限で途中で処理が止まったことがありました。

対処法:大きなタスクをサブタスクに分割して依頼する。あるいは/compactで会話を圧縮してから再開する。

# 大規模タスクの分割例
# 一度に全部依頼(避けるべき)
「プロジェクト全体を TypeScript に移行して」

# 分割して依頼(推奨)
# ステップ1
「まず src/utils/ 配下の .js を .ts にして型付けして」
# 完了確認後

# ステップ2
「次に src/hooks/ 配下を TypeScript 化して」
# 完了確認後

# ステップ3
「src/components/ 配下を TypeScript 化して」

Claude Codeを使いこなすための環境設定

CLAUDE.mdで一貫した指示を自動化する

プロジェクトルートにCLAUDE.mdを置くと、Claude Codeが毎回のセッション開始時に自動で読み込みます。プロジェクトの技術スタック・コーディング規約・禁止事項を書いておくことで、毎回前提を伝える手間が省けます。

# CLAUDE.md の効果的な構成テンプレート
# このプロジェクトについて
[プロジェクトの概要を2〜3行で]

# 技術スタック(バージョン含む)
- [フレームワーク+バージョン]
- [状態管理ライブラリ]
- [テストフレームワーク]

# コーディング規約
- [命名規則]
- [禁止事項]
- [コメントの言語]

# よく使うコマンド
- テスト実行: [コマンド]
- ビルド: [コマンド]
- リント: [コマンド]

# 重要な注意事項
- [触ってほしくないファイル/ディレクトリ]
- [APIキー等の取り扱い]

コンテキスト節約のための.claudeignore設定

.claudeignoreを設定することで、不要なファイルをコンテキストから除外し、トークン消費を抑えつつ精度を高められます。

# .claudeignore の推奨設定
# ビルド成果物
dist/
build/
.next/
out/

# 依存パッケージ(大量のファイルがありノイズになる)
node_modules/

# 圧縮・マップファイル
*.min.js
*.min.css
*.map

# ログ・一時ファイル
*.log
.DS_Store
coverage/

# 大きなアセット
*.png
*.jpg
*.mp4
*.zip

/compact でコンテキストを定期的にリセット

長時間作業でコンテキストが蓄積したら/compact コマンドを使います。これにより会話履歴が要約・圧縮され、トークン消費を抑えながら作業を継続できます。

# 会話をコンパクト化する
/compact

# コンパクト化後の推奨メッセージ
「ここまでの作業: src/middleware/auth.js に JWT 認証を追加しました。
次のタスク: src/routes/admin.js にロールベースのアクセス制御を追加してください。
ロール: admin, editor, viewer の3種類。
admin のみ DELETE メソッドを許可。」

実務タスク別:プロンプトと出力例のカタログ

Reactカスタムフックの生成

Reactアプリ開発で頻出するカスタムフック生成はClaude Codeが得意とするタスクです。要件を具体的に伝えれば、テスト済みの完成度の高いフックを生成します。

# プロンプト例
「src/hooks/useLocalStorage.ts を新規作成してください。

仕様:
- ローカルストレージを React state のように扱えるフック
- 型パラメータで保存する値の型を指定できる(ジェネリクス)
- 初期値を引数で受け取る
- JSON.stringify / JSON.parse でシリアライズ
- ストレージが利用できない場合はメモリ上のみで動作(SSR対応)
- Vitest でのユニットテストも src/hooks/useLocalStorage.test.ts に作成

TypeScript の型は厳格に。any 禁止。」
// Claude Code が生成した useLocalStorage.ts
import { useState, useEffect, useCallback } from 'react';

type SetValue<T> = (value: T | ((prev: T) => T)) => void;

function useLocalStorage<T>(key: string, initialValue: T): [T, SetValue<T>] {
  const [storedValue, setStoredValue] = useState<T>(() => {
    if (typeof window === 'undefined') {
      return initialValue;
    }
    try {
      const item = window.localStorage.getItem(key);
      return item ? (JSON.parse(item) as T) : initialValue;
    } catch (error) {
      console.warn(`useLocalStorage: key "${key}" の読み込みに失敗`, error);
      return initialValue;
    }
  });

  const setValue: SetValue<T> = useCallback(
    (value) => {
      try {
        const valueToStore =
          value instanceof Function ? value(storedValue) : value;
        setStoredValue(valueToStore);
        if (typeof window !== 'undefined') {
          window.localStorage.setItem(key, JSON.stringify(valueToStore));
        }
      } catch (error) {
        console.warn(`useLocalStorage: key "${key}" の書き込みに失敗`, error);
      }
    },
    [key, storedValue]
  );

  useEffect(() => {
    const handleStorageChange = (e: StorageEvent) => {
      if (e.key === key && e.newValue !== null) {
        setStoredValue(JSON.parse(e.newValue) as T);
      }
    };
    window.addEventListener('storage', handleStorageChange);
    return () => window.removeEventListener('storage', handleStorageChange);
  }, [key]);

  return [storedValue, setValue];
}

export default useLocalStorage;

SSR対応(`typeof window === ‘undefined’`チェック)やStorageイベントの購読まで指定していないのに自動追加されました。ベストプラクティスを自律的に組み込む点がClaude Codeの強みです。

Express APIエンドポイントのバリデーション追加

既存のExpressエンドポイントにzodを使った入力バリデーションを追加するタスクです。既存コードを壊さずに横断的な修正を行う典型例です。

# プロンプト例
「src/routes/api.ts の全 POST/PUT エンドポイントに
 zod を使ったリクエストバリデーションを追加してください。

バリデーション失敗時: 400 を返し、{ errors: ZodError[] } 形式で詳細を返す
共通ミドルウェアとして切り出す(各ルートに直接書かない)
zod は既にインストール済み(package.json 参照)
既存テストが全て通ること(yarn test で確認)」
// 生成されたバリデーションミドルウェア
import { Request, Response, NextFunction } from 'express';
import { ZodSchema, ZodError } from 'zod';

export function validate<T>(schema: ZodSchema<T>) {
  return (req: Request, res: Response, next: NextFunction): void => {
    const result = schema.safeParse(req.body);
    if (!result.success) {
      res.status(400).json({
        errors: result.error.errors.map((e) => ({
          field: e.path.join('.'),
          message: e.message,
          code: e.code,
        })),
      });
      return;
    }
    req.body = result.data;
    next();
  };
}

// 各ルートへの適用例(Claude Code が自動で追加)
const createUserSchema = z.object({
  name: z.string().min(1).max(100),
  email: z.string().email(),
  password: z.string().min(8),
});

router.post('/users', validate(createUserSchema), createUserHandler);

Pythonスクリプトのリファクタリング

Claude CodeはPythonにも対応しています。データ処理スクリプトの改善は特に得意です。

# プロンプト例
「scripts/process_data.py をリファクタしてください。

現状の問題:
- 1つの main() 関数に全処理が詰め込まれている(300行)
- グローバル変数を多用している
- エラーハンドリングがない
- ログ出力がない

修正方針:
- 責任ごとに関数に分割する
- グローバル変数を排除し、関数の引数/戻り値で渡す
- try/except でエラーハンドリングを追加する
- logging モジュールで INFO/ERROR レベルのログを追加する
- 型アノテーションを追加する(Python 3.10+)

既存の出力結果(output.csv)が変わらないこと。」

SQLクエリの最適化

実行速度の遅いSQLをインデックス追加やクエリ書き換えで最適化するタスクです。EXPLAINの結果を貼り付けると精度が上がります。

# プロンプト例
「以下のSQLクエリが遅いです(実行時間: 約3秒)。
EXPLAINの結果と合わせて最適化してください。

-- 現在のクエリ
SELECT u.name, COUNT(p.id) AS post_count, MAX(p.created_at) AS last_post
FROM users u
LEFT JOIN posts p ON p.user_id = u.id
WHERE u.created_at >= '2025-01-01'
GROUP BY u.id, u.name
HAVING COUNT(p.id) > 0
ORDER BY last_post DESC
LIMIT 50;

-- EXPLAIN 結果(抜粋)
type: ALL (full table scan on users)
rows: 84,201
Extra: Using filesort

最適化の方針:
1. 適切なインデックスを提案する(ALTER TABLE 文で)
2. クエリ自体の書き換えが有効なら修正する
3. 期待される改善効果を説明する」
-- Claude Code の最適化提案

-- 1. インデックスの追加
ALTER TABLE users ADD INDEX idx_users_created_at (created_at);
ALTER TABLE posts ADD INDEX idx_posts_user_created (user_id, created_at);

-- 2. クエリの最適化(サブクエリで絞り込み先行)
SELECT u.name, p.post_count, p.last_post
FROM users u
INNER JOIN (
  SELECT user_id,
         COUNT(id) AS post_count,
         MAX(created_at) AS last_post
  FROM posts
  GROUP BY user_id
  HAVING COUNT(id) > 0
) p ON p.user_id = u.id
WHERE u.created_at >= '2025-01-01'
ORDER BY p.last_post DESC
LIMIT 50;

-- 期待効果: full scan → range scan
-- EXPLAIN type: ALL → range (created_at インデックス利用)
-- 実行時間目安: 3秒 → 0.1〜0.3秒

Claude Code を使った開発ワークフロー設計

フィーチャー開発の標準ワークフロー

Claude Codeを組み込んだフィーチャー開発の標準ワークフローを確立することで、チーム全体の生産性が上がります。以下は実務で定着したワークフローの例です。

  1. 設計フェーズ(人間):機能要件・技術方針・影響範囲を整理する。Claude.ai(Web)で設計の相談をするのも効果的。
  2. タスク分解(Claude Code):「この機能を実装するためのサブタスクを洗い出して」と依頼し、実装手順を箇条書きで得る。
  3. 実装(Claude Code):サブタスクを1つずつ依頼。各タスク完了後にテスト実行を確認。
  4. レビュー(人間):生成されたコードを読んで意図通りか確認。セキュリティ・パフォーマンスの観点でチェック。
  5. ドキュメント生成(Claude Code):「変更内容をもとにJSDocとPR説明文を書いて」と依頼。

日次タスクへの組み込み方

毎日の業務でClaude Codeを使い続けるには、起動のハードルを下げることが重要です。よく使うコマンドをエイリアスに登録し、CLAUDE.mdを充実させることで、毎回の前置きが不要になります。

# ~/.zshrc や ~/.bashrc に追加するエイリアス例
alias cc='claude'
alias ccr='claude "$(cat << EOF
以下のタスクを実行してください。
このプロジェクトは React + TypeScript + Tailwind CSS です。
any 型は使わない。テストは Vitest を使う。

EOF
)"'

# 特定プロジェクトへのクイック移動
alias myapp='cd ~/projects/myapp && claude'

# よく使うタスクのショートカット
alias cc-test='claude "既存のテストが全て通ることを確認して"'
alias cc-lint='claude "ESLint と TypeScript エラーを全て修正して"'

コードレビューのAI補助

PRを出す前にClaude Codeに自分のコードをレビューさせることで、レビュアーへの負荷を下げられます。「人間のレビュアーが指摘しそうなポイント」を事前に潰しておく作戦です。

# git diff をClaude Codeに渡してレビューさせる
git diff main...HEAD > /tmp/my_diff.txt
claude "$(cat << EOF
以下のコード差分をレビューしてください。

観点:
1. バグ・ロジックエラーがないか
2. セキュリティ上の問題(XSS, SQLインジェクション等)がないか
3. パフォーマンス上の問題がないか
4. 可読性・保守性の改善点はないか
5. テストが必要なのにないケースはないか

--- 差分 ---
$(cat /tmp/my_diff.txt)
---

問題点があれば修正コードも提示してください。
EOF
)"

AI時代の基礎力とClaude Codeの関係

Claude Codeを実務で使い倒してわかったことは、AIが生成したコードを正しく評価できるのは、コードを理解しているエンジニアだけということです。

AIがSQLインジェクションの脆弱性を含むコードを生成しても、それを見抜けない人はそのままデプロイしてしまいます。型安全でないTypeScriptコードを生成されても、型の意味を理解していなければ見逃します。

Claude Codeは強力なツールですが、「あなたが書けないコードはAIも正しく書けない」という感覚を持つことが重要です。基礎があるエンジニアにとってはAIは劇的な生産性向上ツールになりますが、基礎のないエンジニアにとっては「よく壊れる魔法」になりがちです。

指標実績調査対象・期間
案件獲得率97.9%受講生アンケート/2025年1月〜12月
受講料金完済率84.7%受講生アンケート/2025年6月〜12月
運営体制Web制作会社が直接運営現役制作会社が直接指導

※受講生アンケートに基づく自社調査結果(2025年1月〜2025年12月実施)
※受講生アンケートに基づく自社調査結果(2025年6月〜2025年12月実施)

WithCodeはWeb制作会社が直接運営として、AI時代でも通用する実践的な基礎を提供しています。案件獲得率97.9%という実績は、基礎力がある人こそがAIを道具として使いこなせることを示しています。


よくある質問

Q. Claude Codeで生成したコードはそのまま本番に使えますか?

自己判断で確認することが必須です。テストを通過させることは最低条件ですが、セキュリティレビューも必ず行ってください。特に認証・決済・個人情報に関わるコードは、経験あるエンジニアがレビューすることをおすすめします。AIは意図しない脆弱性を含むコードを生成することがあります。

Q. プロンプトはどのくらい詳しく書けばいいですか?

「書きすぎ」はほぼありません。詳しいほど精度が上がります。最低限含めるべき要素は「対象ファイル」「変更内容の具体的な仕様」「禁止事項」「完了条件」の4つです。慣れてきたらこの4要素を習慣にするとよいでしょう。

Q. Claude Codeが生成したコードが動かないときの対処法は?

エラーメッセージをそのままClaude Codeに貼り付けて「修正してください」と伝えてください。多くの場合、1〜2回のやり取りで修正できます。それでも解決しない場合は、タスクをより小さく分割して再試行することをおすすめします。

Q. Claude Codeの学習に良いタスクはありますか?

最初のうちは自分がすでに答えを知っているタスクをClaude Codeに依頼してみることをおすすめします。自分で書けるコードをAIに書かせることで、アウトプットの品質を正確に評価でき、プロンプトの改善につながります。

Q. 日本語と英語、どちらでプロンプトを書くべきですか?

どちらでも動作しますが、要件の本体は英語、補足や背景は日本語で書くスタイルが実務ではバランスがよいです。関数名・クラス名・ファイルパスなど技術的な固有名詞は英語で書くと誤解が生じにくいです。

Q. Claude Codeで実装した後のコードレビューはどうすれば?

GitHub Copilot PR SummaryやChatGPTのコードレビュー機能と組み合わせると効率的です。また、Claude Code自身に「このコードのセキュリティ上の問題点を指摘して」と依頼することもできます。AIにAIのコードをレビューさせるアプローチは精度が高く、有効な補完手段です。


まとめ

Claude Codeの得意領域: リファクタ・テスト生成・型定義・ドキュメント・バグ修正(情報あり)
苦手領域: UI審美性の判断・曖昧な仕様・外部API新仕様・ビジネスロジック設計
効くプロンプト: 条件箇条書き+完了条件明示+禁止事項指定

Claude Codeは万能ではなく、特定の領域で突出した力を持つ専門家です。得意なタスクを正しく割り当て、苦手な領域は人間が補完することで、AIと人間の協働が最大の成果を生みます。本記事のプロンプトパターンをそのまま試して、まずは「得意タスク」から始めてみてください。



関連記事

WithCodeを体験できる初級コース公開中!

WithCodeを体験できる初級コース公開中!

初級コース(¥49,800)が完全無料に!

  • 期間:1週間
  • 学習内容:
    ロードマップ/基礎知識/環境構築/HTML/CSS/LP・ポートフォリオ作成
    正しい学習方法で「確かな成長」を実感できるカリキュラム。

副業・フリーランスが主流になっている今こそ、自らのスキルで稼げる人材を目指してみませんか?

未経験でも心配することはありません。初級コースを受講される方の大多数はプログラミング未経験です。まずは無料カウンセリングで、悩みや不安をお聞かせください!

この記事を書いた人

WithCodeでWeb制作を習得後、フリーランスエンジニアとして活動。HTML/CSS・JavaScript・WordPress案件を中心に年間20件以上の制作実績を持つ。「難しい技術をわかりやすく」をモットーに、初心者〜中級者向けの技術記事を執筆。副業・フリーランス独立を目指す方に向けた情報発信に注力している。

– service –WithGroupの運営サービス

  • WithCode
    - ウィズコード -

    スクール

    「未経験」から
    現場で通用する
    スキルを身に付けよう!

    詳細はこちら
  • WithFree
    - ウィズフリ -

    実案件サポート

    制作会社のサポート下で
    実務経験を積んでいこう!

    詳細はこちら

公式サイト より
今すぐ
無料カウンセリング
予約!

目次