レシピ#4-1: Claude Codeを使った効率的な開発ワークフロー

はじめに

Section 3では、AIを使った基本的な開発プロセスを学びました。このセクションでは、より実践的に、Claude Codeを使った効率的な開発方法を学びます。

ここで紹介する「AIに任せやすい設計」は、ビルダーが一人で開発を回し、作ったものを人に届けるまでのスピードを落とさないための秘伝でもあります。

Claude Codeでの開発フロー

1. プロジェクトで起動する

# プロジェクトディレクトリに移動
cd ~/Development/ai-x-flutter/my_app

# Claude Codeを起動
claude

ターミナルに対話画面が開きます。以後は日本語で指示するだけで、Claude Codeがファイルを読み、編集し、flutter run などのコマンドも実行してくれます。

2. AIモデルを選択

Claude Codeでは /model コマンドでモデルを切り替えられます。

使い分けの目安: - Opus — 設計判断・大きな実装・難しいバグ調査 - Sonnet — 日常の実装・小さな修正(高速で安定)

避けるべき: コード生成を他社の不安定なモデルに任せること(書き換えが大きい、依存関係を壊しやすい)

3. 効果的なプロンプトの書き方

❌ 悪い例

TODOアプリを作って

✅ 良い例

StatefulWidgetを使ったシンプルなTODOアプリを作ってください。

要件:
- TODOの追加(TextFieldとボタン)
- TODOリストの表示(ListView)
- 完了/未完了の切り替え(Checkbox)
- TODOの削除(スワイプまたはボタン)

状態管理:
- Riverpodなどの外部パッケージは使わない
- StatefulWidgetで状態を管理
- データ構造はシンプルなListで

ファイル構成:
- lib/main.dart に全て記述
- 後で分割しやすい構造にする

4. コードレビューをAIに依頼

生成されたコードを必ず確認します:

このコードをレビューしてください:

1. Flutter 3.27のベストプラクティスに従っているか
2. 不要な複雑さはないか
3. パフォーマンス上の問題はないか
4. より良い書き方があれば提案してください

5. エラー修正の依頼

エラーが出たら、エラーメッセージをそのまま貼り付けます:

以下のエラーを修正してください:

[エラーメッセージ全文をコピペ]

このエラーが発生した状況:
- ◯◯の機能を追加しようとした
- △△のボタンを押したら発生

Claude Code自身が flutter analyzeflutter test を実行してエラーを確認しながら直せるのが、エディタ型ツールとの大きな違いです。

Claude Codeの便利な機能

1. ファイル名で参照

ファイル名を書くだけで、そのファイルを読んで作業してくれます。

main.dart のコードと一貫性を保ちながら、
新しい設定画面 lib/screens/settings_page.dart を作成してください

2. コマンドの実行まで任せる

flutter test を実行して、失敗したテストがあれば直してください

編集 → 実行 → 確認 → 修正のループを、Claude Codeが一人で回します。

3. CLAUDE.md: プロジェクトの約束事を覚えさせる

プロジェクト直下に CLAUDE.md を置くと、起動のたびに自動で読み込まれます。

# CLAUDE.md
- Flutter 3.27 / Dart 3.6 / Material Design 3
- 状態管理は StatefulWidget(Riverpod等は使わない)
- 小さな自己完結型Widgetパターンで書く

毎回同じ前提を伝え直す必要がなくなります。

4. /clear: 話題を切り替える

一つのタスクが終わったら /clear で会話を新しくします。長い会話を引きずらないことが、精度とコスト(トークン)の両方に効きます。

5. Gitもそのまま頼める

ここまでの変更をコミットしてください。メッセージは日本語で。

実践的なワークフロー例

Step 1: アプリのアイデアを整理

まずWeb版Claudeなどで設計を相談:

個人開発で、Flutterを使って以下のアプリを作りたいです:
- シンプルな家計簿アプリ
- 収入/支出の記録
- カテゴリ別の集計
- グラフ表示

個人開発なので、できるだけシンプルな構成にしたいです。
アーキテクチャの提案をお願いします。

Step 2: プロジェクト作成とClaude Code起動

flutter create kakeibo_app
cd kakeibo_app
claude

Step 3: データ構造を決める

Claude Codeで以下のようにプロンプト:

家計簿アプリのデータ構造を設計してください。

必要な情報:
- 日付
- 金額
- カテゴリ(食費、交通費など)
- 収入/支出の区別
- メモ(任意)

以下の形式で提案してください:
1. Dartのクラス定義
2. JSONシリアライゼーション(必要なら)
3. サンプルデータ

注意: できるだけシンプルに。freezedなどの複雑なパッケージは避ける。

Step 4: 画面を作る

先ほど定義したデータ構造を使って、
メイン画面を作成してください。

画面構成:
- AppBar: タイトルと追加ボタン
- Body: 取引リスト(新しい順)
- BottomNavigationBar: ホーム/統計/設定

状態管理: StatefulWidget
データ保存: まずはメモリ内のListで(後でSharedPreferences化)

Step 5: 機能を追加

段階的に機能を追加していきます:

取引の追加機能を実装してください。

1. FloatingActionButtonを押すとダイアログ表示
2. ダイアログの内容:
   - 金額入力(数値キーボード)
   - カテゴリ選択(ドロップダウン)
   - 収入/支出の切り替え(Switch)
   - メモ入力(TextField)
3. 保存ボタンでリストに追加
4. リストを更新して表示

Step 6: リファクタリング

現在のコードを以下の方針でリファクタリングしてください:

1. ファイル分割
   - lib/models/transaction.dart
   - lib/screens/home_screen.dart
   - lib/widgets/transaction_list_item.dart

2. コードの整理
   - 不要なコメント削除
   - マジックナンバーを定数化
   - 重複コードの削減

3. 一貫性の確保
   - 命名規則の統一
   - インデントの統一

ベストプラクティス

1. 小さく始める

最初から完璧を目指さず、まず動くものを作ります。

✅ まず: 基本機能だけの動くアプリ
❌ 最初から: 完璧な設計 + 全機能

2. 段階的に改善

Step 1: メモリ内のデータ
Step 2: SharedPreferencesで永続化
Step 3: SQLiteで高度な検索

3. AIにレビューを依頼

このコードの問題点を指摘してください:
1. バグの可能性
2. パフォーマンス問題
3. 保守性の問題
4. Flutter/Dartのベストプラクティス違反

4. バージョンを明示

このプロジェクトは以下の環境を前提にしてください:
- Flutter 3.27
- Dart 3.6
- Material Design 3

前提はプロンプトに書くより、CLAUDE.md に書いておくのが確実です。

よくある問題と解決策

問題1: AIが古い書き方を提案

解決策:

Flutter 3.27 の最新の書き方で書き直してください。
特に以下に注意:
- Material Design 3
- 最新のナビゲーション
- 非推奨APIを使わない

問題2: 不要な複雑さ

解決策:

このコードをシンプルにしてください。
- 不要な抽象化を削除
- 使われていないクラス/メソッドを削除
- より直感的な実装に変更

問題3: 依存関係の問題

解決策:

pubspec.yamlの依存関係を最小限にしてください。
本当に必要なパッケージだけを残し、
不要なものは標準ライブラリで代替してください。

まとめ

Claude Codeでの開発フロー:

  1. アイデア整理 - Web版Claudeで設計相談
  2. プロジェクト作成 - flutter create + claude 起動
  3. データ構造設計 - シンプルなクラス定義
  4. 画面作成 - 段階的に機能追加
  5. リファクタリング - コードの整理と分割
  6. レビュー - AIに問題点を指摘してもらう

重要な原則: - 小さく始める - 段階的に改善 - 外部パッケージは最小限 - 前提は CLAUDE.md に書く - AIを信頼しすぎない(必ず確認)

次のレシピでは、なぜRiverpodなどの複雑な状態管理ライブラリを避けるべきかを解説します。

➡️ 次のレシピへ: 02_why_avoid_riverpod.md