AI駆動開発 ～ここ1か月AIにほぼすべてのコードを書かせていて感じたこと～

# AI駆動開発 ～ここ1か月AIにほぼすべてのコードを書かせていて感じたこと～

## はじめに

こんにちは！ヘリンです！
これはIwaken Lab. Advent Calendar 2024の4日目の記事です。遅れてしまいました…

私は最近、AIを活用してプログラムのほぼ全てのコードを書かせる開発方法を自分なりのやり方で取り組んでいます。この記事では、実際に1ヶ月間でいくつかのプロジェクトを作ってみた経験から、AIを使った開発の実践的なコツや自作ツールの紹介をしていきます。あくまで個人開発やハッカソンの規模での取り組みですが、AI駆動開発の可能性について考えるきっかけになれば幸いです。

## AIモデルの選定とプロジェクト事例

### なぜClaude 3.5 Sonnetを選んだのか

現在、私が主に使用しているのはClaude 3.5 Sonnetです。その理由は主に以下の点にあります：

- 10万トークンまでの入力に対応しており、プロジェクト全体のコードを一度に解析できる
- 長文でも文脈を正確に理解し、一貫性のある出力が得られる
- ChatGPTはトークンの制限が早く、さらに長文の解釈が不安定
- Geminiは入力トークン数や長文の理解は優れているものの、応答速度とエラー頻度に課題がある
- LLMのベンチマークではGeminiやgpt-4oよりスコアが低いですが、体感ではコーディング能力はClaudeが最も高く感じています

### 実際に作成したプロジェクト

この方法で1ヶ月の間に、以下のようなプロジェクトを作成しました：

1. **TOAGI FLOW**（Web開発）
   - Reactベースのビジュアルプログラミングツール
   - LLMをデータ変換器として活用する革新的なアプローチ
   - [詳細記事は近日公開予定]

https://x.com/herring101426/status/1855975361386803400

2. **VR卓球ゲーム**（Unity開発）
   - 物理演算システムをAIが全面的に実装
   - テスト設計も含め全てAIに任せた

3. **リズムジオメトリー**（ゲームジャム作品）
   - 2日間8人チームでの共同開発
   - AIを活用した素早いプロトタイピング

![リズムジオメトリーのプレイ画面1](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1262570/e3542cd9-2424-e0bb-fea1-3b22ca331a33.png)
![リズムジオメトリーのプレイ画面2](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1262570/ea861e6d-8b87-d32d-d6a5-e376bc33203c.png)
https://gamejam-god.itch.io/god

## 実際の開発の進め方

### 1. プロジェクトの設計

最初は、AIと対話しながらプロジェクトの設計を固めていきます。ここで大事なのは、プロジェクトの要件や構成をきちんと文書に残すこと。

![AIとの設計相談の例](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1262570/9608e996-45c8-5bcc-8e9d-b35182cb4249.png)
↑ AIとの設計相談では、基本的な要件から技術選定まで相談しています

例えば、最近取り組んだプロジェクトでは、こんな感じでドキュメントを整理しました：

基本的なドキュメント：
- README.md：プロジェクトの概要
- system-architectures.md：設計の全体像
- user-flow.md：ユーザーの動線
- data-models.md：データの設計
- api-spec.md：APIの仕様

このプロジェクトでは、LLMを使う関係で以下も必要でした：
- prompt-system.md：プロンプトの設計方針
- integrations.md：外部APIとの連携方法
- function-call-spec.md：Function Callの仕様
- gemini-context-cache.md：コンテキストキャッシュの設計

これはあくまで一例で、プロジェクトによって必要な文書は変わってきます。

### 2. 実装の流れ

#### 最初の実装：基本機能を作る

まずは基本機能が動く状態までを作ります。ここで気をつけているのは：

1. **AIとの対話設定を整える**
   - プロジェクトの目的や方針を最初に明確に伝える
   - コーディングスタイルや命名規則を決めておく
   ![Claudeのプロンプトジェネレーター画面1](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1262570/01521ebe-a1ab-7b3c-e409-7b3b04b5b3fb.png)
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1262570/52d33796-1150-ac2d-f7f1-c232e385cb74.png)
   ↑ Claudeのプロンプトジェネレーターでプロジェクト用の設定を作成
      ![システムプロンプトの使用例](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1262570/16c158c8-349f-16b4-2523-c6eab3e4a200.png)
   ↑ 実際の使用例：毎回同じような返答で思考の連鎖・一貫したコーディングスタイルで開発できます。

2. **会話の管理方法**
   - 1つの会話は20往復くらいを目安に区切る
   - 大きな変更があったら新しい会話を始める
   - 次の会話では、決まったことを最初に説明する

#### 修正と機能追加

ここで便利なのが、自作の2つのツールです：

##### Unityプロジェクト解析ツール
![Unityツールの実行画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1262570/b5084b4d-6973-3a1c-6bec-1ec217017f03.png)
↑ シーンの階層とコンポーネント情報を自動で解析している様子

![生成されたMarkdown出力例](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1262570/419c6cb5-49d2-428c-1b52-943d19dcca12.png)
↑ AIに渡せる形式に整形された出力例

![Claudeとの実際の対話](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1262570/fa6b736d-5fd5-db99-03e9-629a83d45710.png)

```
# こんなことができます
- シーンの構造を一覧できる
- コンポーネントの設定を取得
- 不要な情報は除外できる
- AIに渡しやすいMarkdown形式で出力

# 使い方
1. Unityで開発中のシーンを開く
2. ツールを実行
3. 出力されたテキストをAIに渡す
```

##### Webプロジェクト解析ツール
![Webプロジェクト解析の実行例](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1262570/2553a310-8b35-1cd9-fb33-0f8128a062d3.png)
↑ .llmignoreを使ったプロジェクト解析の実行画面

```
# こんなことができます
- プロジェクトの構造を見やすく表示
- .llmignoreで除外設定ができる
- ファイルの中身を整形して出力
- トークン制限に合わせて出力を調整

# 使い方
1. .llmignoreで除外したいファイルを設定
2. ツールを実行
3. 出力された内容をAIに渡す
```

#### 開発のサイクル

このツールを使って、こんな感じで開発を進めます：

1. **プロジェクトの現状を把握**
   - ツールで今の状態を文書化
   - 次に何を変更するか決める

2. **AIに依頼して実装**
   - プロジェクトの今の状態を説明
   - 欲しい変更を具体的に伝える
   - AIの提案を実装してみる

3. **会話を続ける**
   - 10往復くらいまでは同じ会話を続ける
   - 新機能を追加するときは新しい会話を始める
   - 新しい会話のときは最新の状態を説明し直す

![全体](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1262570/ea6d469f-d6ea-16f6-d366-6f87d5e039a0.png)
↑このように①システムプロンプト②ドキュメント③ツールで作成したプロジェクト情報④作成・修正依頼内容

このサイクルを繰り返すことで、少しずつプロジェクトを進められます。特に、AIに今の状態をきちんと伝えることで、一貫性のある開発ができています。

## まとめ：AI駆動開発の可能性と今後

この1ヶ月間、AIに主導的に開発を任せることで、いくつかの重要な発見がありました：

### 開発効率の大幅な向上
- プロジェクトの立ち上げから実装までの時間が劇的に短縮
- プロトタイプをClaudeのArtifact機能で作成することで、完成品のイメージを共有しやすい

### AIとの効果的な協業のコツ
- プロジェクト情報の正確な伝達が最重要
- 適切なツールとプロンプトの活用で一貫性のある開発が可能
- 人間による設計の理解と管理は必須

### その他
- 複雑なアルゴリズムや新しい知識が必要な場所など、どうしてもAIには何度やらせても正しいコードが書けない場面もごくごくまれに存在する。そこを見極めて人間が手を入れることも重要
- 意外な収穫として、AIが提案したコードを見て、人間が「これはなぜこうなるのか？」と疑問を持つことで、自分の知識の不足や誤解に気づくこともある。新たな知識を得る機会になるため、AIとの協業は自己成長にもつながる。

AI駆動開発は、単なる「コードを書かせる」というレベルを超えて、開発プロセス全体を革新する可能性を秘めています。まだまだ発展途上の分野ですが、今後も実践と改良を重ねていきたいと思います。

最後に、この記事で紹介した自作ツールは近日中にGitHubで公開予定です。皆さんもAI駆動開発を試してみませんか？

[GitHub リポジトリへのリンク予定]

明日はさん[@tksht261さん](https://qiita.com/tksht261)の「HCI系ドイツ短期留学記」記事です！お楽しみに！