はじめに
みなさん、生成AIを活用できていますか?ChatGPTが登場してから、生成AIが私たちの生活と仕事にどんどん浸透してきました。特に私たちデベロッパーは、その恩恵をたっぷり受けていますよね。
そんな中、2024年12月にリリースされた「Claude Code」を、実際に業務で使い倒してみました!この記事では、使ってみて分かった便利さと課題、そしてその解決策をシェアします。
そもそもClaude Codeとは?
Claude CodeはAnthropicが提供するターミナルベースのAIコーディングアシスタントです。コマンドラインから直接Claudeにコーディングタスクを依頼できる、新しいタイプのツールなんです。
従来のChatベースとの違い
WebブラウザやアプリでChatGPTやClaudeを使う場合、こんな流れでしたよね:
- AIにコードを生成してもらう
- 生成されたコードをコピー
- 自分でファイルに貼り付けて保存
これが結構面倒だった...
一方、Claude Codeはここが違います:
- ファイル操作を自動化:コードの生成からファイルの作成・編集まで一気通貫!
- 既存プロジェクトとの統合:プロジェクトのコンテキストを理解した上でコード生成
- 繰り返し作業に強い:複数ファイルの一括編集や、段階的な機能追加がスムーズ
つまり、「AIに指示したら、勝手にコードを書いてファイルまで作ってくれる」というわけです。ボイラープレートコードの生成、リファクタリング、ドキュメント生成など、面倒だけど必要な作業を自動化できるのが最大の魅力です
使ってみて分かった「ここが惜しい!」ポイント
実際に業務でClaude Codeを使ってみると、確かに便利なんですが...いくつか「おっと」という場面に遭遇しました。特に大きな問題は以下の3点です。
1. いらない・想定外のものを勝手に作っちゃう
Claude Codeは「良かれと思って」いろいろやってくれるのですが、それが時に余計なお世話になることも...😅
よくあるパターン:
- 必要ないコードを勝手に生成
- 頼んでもいない機能まで実装してくれちゃう
- プロジェクトの既存構成を無視して、独自の構造で作ってしまう
実例:「既存のAPIクライアントにエンドポイントを1つ追加して」と頼んだだけなのに...
- ❌ 新しいクライアントクラスを別ファイルで作成
- ❌ 既存のエラーハンドリング方式を無視して独自実装
- ❌ 使わないユーティリティ関数まで追加
- ❌ 型定義ファイルを勝手に生成
「いや、既存のコードに1メソッド追加するだけで良かったのに...😓」
結局、不要な部分を削除したり、既存の実装方針に合わせて修正したりする手間が発生してしまいます。
2. トークン消費が激しすぎる
Claude Codeは動作の過程で、想像以上にトークンを消費します。これが結構な課題なんです。
トークン消費が大きい理由:
- プロジェクト全体のファイルをコンテキストとして読み込む
- コード生成→確認→修正のサイクルでトークンを使う
- 関連ファイルを次々と読み込んでいく
実例:中規模のPythonプロジェクト(数十ファイル)で「FastAPIのエンドポイントに新しいパラメータを1つ追加」という小さなタスクを依頼したところ...
- プロジェクト全体の構造を解析
- 関連するPydanticモデルファイルを複数読み込み
- 依存関係にある他のエンドポイントまでチェック
結果、1つのパラメータ追加だけで想定の3〜4倍のトークンを消費!💸
Claude Pro(月額20ドル)でも、こういった使い方をしていると制限にすぐ到達してしまいます。API経由で使う場合は、コストが予想以上にかさむことも...
3. Compactによる情報忘れ
Claude Codeは会話が長くなると、自動的に過去のやり取りを「Compact(圧縮)」します。これがまた厄介なんです...
何が起きるのか:
長時間のコーディングセッションで、Claude Codeとあれこれやり取りしていると、突然こんなことが起きます:
- さっき説明したプロジェクトの仕様を忘れる
- 「このファイルは触らないで」と指示したのに触り始める
- 既に修正済みの箇所を再度修正しようとする
- 前回の実装方針と矛盾したコードを生成
実例:認証機能の実装を段階的に進めていた時のこと
- 最初に「JWT認証を使う」と指示
- ログイン機能を実装してもらう ✅
- ミドルウェアを追加してもらう ✅
- さらに保護されたエンドポイントを追加しようとしたら...
- 💥 突然「Session認証で実装しますね」と言い出す
- 💥 「このプロジェクトの認証方式は?」と聞き返される
「いや、さっきまでJWTで作ってたじゃん!」となるわけです😅
なぜ起きるのか:
Compactは会話履歴を要約して圧縮するのですが、その過程で:
- 細かい指示や制約条件が抜け落ちる
- プロジェクト固有のルールやコンテキストが失われる
- 「なぜそう実装したか」という背景情報が消える
結果として、Claude Codeは「記憶喪失」状態になり、最初から説明し直さなければならなくなります。これはトークンの無駄遣いにもつながるんです。
惜しいポイントを解決する実践テクニック
さて、ここからが本題です!先ほどの3つの課題、実は適切なテクニックを使えばかなり改善できるんです。実際に効果があった方法を紹介していきます。
Plan Modeで実装前に計画を確認
「いらないものを勝手に作っちゃう問題」に特に効果的なのが Plan Mode です。
Plan Modeとは?
Claude Codeには複数の実行モードがあります。Plan Modeでは、実際にコードを書く前に「何をするか」の計画を立ててくれて、それを確認してから実装に進めるんです。
指示文の例
claude-code > "既存のFastAPIアプリにユーザー情報取得エンドポイントを追加"
すると、こんな感じの計画が出てきます:
実行計画:
1. src/api/main.py を確認
2. GET /api/user/me エンドポイントを追加
3. schemas/user.py に UserResponse モデルを作成
この計画で進めますか? (y/n)
ここで「ちょっと待った!」ができるわけです:
claude-code > いいえ。UserResponseモデルは既存の schemas/models.py に追加してください。新しいファイルは作らないでください。
効果
- ✅ 不要なファイル生成を事前に防げる
- ✅ 実装方針のズレを修正できる
- ✅ トークンの無駄遣いを減らせる
実際、Plan Modeを使うようになってから、「え、これいらないんだけど...」という場面が激減しました!
概念・論理設計をインプットとしよう
トークン消費と情報忘れの両方に効く方法がこれです。
問題の本質
Claude Codeは毎回プロジェクト全体を理解しようとするので、トークンを大量消費します。しかも、会話が長くなると重要な情報を忘れてしまう...
解決策:設計ドキュメントを事前に用意する
プロジェクトに以下のようなドキュメントファイルを用意しておきます:
project/
├── docs/
│ ├── concept.md # 概念設計
│ ├── logic.md # 論理設計
│ └── constraints.md # 制約事項
指示文の例
claude-code > "docs/concept.md, docs/logic.md, docs/constraints.md を参照して、ユーザー情報取得機能を実装してください"
効果
- ✅ プロジェクト全体を探索する必要がなくなる → トークン削減
- ✅ 実装の方向性がブレない
- ✅ Compactで情報が失われても、ドキュメントファイルを参照し直せる
- ✅ 設計ドキュメントとして残るので、チーム内で共有可能
Compactの前にclaude.mdを更新しよう
長時間のコーディングセッションでは、Compactによる情報忘れが避けられません。でも、事前に対策できます!
やり方:claude.mdを実装リファレンスとして更新してもらう
会話が長くなってきたら、Compactが起きる前にこう指示します:
claude-code > "Update the claude.md as your implement reference"
すると、Claude Codeが今回のセッションで決めた方針やパターンを claude.md に記録してくれます:
## アーキテクチャ
- FastAPI + SQLAlchemy + Pydantic
- レイヤー構成:Route → Service → Repository → Model
## 認証関連
- JWT認証を使用
- トークン検証は utils/auth.py の get_current_user を使用
- 保護されたエンドポイントには Depends(get_current_user) を適用
## API実装パターン
```python
# エラーハンドリングパターン
@router.get("/endpoint")
async def get_data(current_user: User = Depends(get_current_user)):
try:
result = await service.get_data()
return result
except ValueError as e:
raise HTTPException(status_code=400, detail=str(e))
except Exception as e:
raise HTTPException(status_code=500, detail="Internal server error")
## スキーマ定義
- 新しいスキーマは schemas/models.py に追加
- レスポンススキーマには Response サフィックスをつける
- from_attributes = True を設定(ORMモード対応)
## データベース操作
- 非同期処理を使用(async/await)
- トランザクションは Session の commit/rollback で管理
タイミング
- 新しい実装方針を決めた直後
- 会話が長くなってきた時(20往復くらい)
- セッションを終える前
効果
- ✅ Compactで忘れても、claude.mdを参照して同じパターンで実装できる
- ✅ 次回のセッションでも一貫した実装が可能
- ✅ プロジェクトの実装リファレンスが自然に蓄積される
この習慣をつけてから、Compact後も迷わず実装を続けられるようになりました!
最後に:Claude Codeと上手く付き合うコツ
Claude Codeは確かに便利なツールですが、使い方次第で効率が大きく変わります。
**この記事で紹介したテクニックのまとめ:**
- Plan Mode で実装前に計画を確認
- 設計ドキュメント を用意してインプット
- claude.md を定期的に更新
これらを組み合わせることで、Claude Codeを「使える相棒」にすることができます。
最初は戸惑うこともあるかもしれませんが、適切な使い方を身につければ、確実に開発効率が上がります。ぜひ試してみてください!
この記事が、みなさんのClaude Code活用の参考になれば嬉しいです。Happy Coding! 🚀