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ヶ月の間に、以下のようなプロジェクトを作成しました:
-
TOAGI FLOW(Web開発)
- Reactベースのビジュアルプログラミングツール
- LLMをデータ変換器として活用する革新的なアプローチ
- [詳細記事は近日公開予定]
-
VR卓球ゲーム(Unity開発)
- 物理演算システムをAIが全面的に実装
- テスト設計も含め全てAIに任せた
-
リズムジオメトリー(ゲームジャム作品)
- 2日間8人チームでの共同開発
- AIを活用した素早いプロトタイピング
https://gamejam-god.itch.io/god
実際の開発の進め方
1. プロジェクトの設計
最初は、AIと対話しながらプロジェクトの設計を固めていきます。ここで大事なのは、プロジェクトの要件や構成をきちんと文書に残すこと。
↑ 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. 実装の流れ
最初の実装:基本機能を作る
まずは基本機能が動く状態までを作ります。ここで気をつけているのは:
-
AIとの対話設定を整える
-
会話の管理方法
- 1つの会話は20往復くらいを目安に区切る
- 大きな変更があったら新しい会話を始める
- 次の会話では、決まったことを最初に説明する
修正と機能追加
ここで便利なのが、自作の2つのツールです:
Unityプロジェクト解析ツール
↑ シーンの階層とコンポーネント情報を自動で解析している様子
# こんなことができます
- シーンの構造を一覧できる
- コンポーネントの設定を取得
- 不要な情報は除外できる
- AIに渡しやすいMarkdown形式で出力
# 使い方
1. Unityで開発中のシーンを開く
2. ツールを実行
3. 出力されたテキストをAIに渡す
Webプロジェクト解析ツール
# こんなことができます
- プロジェクトの構造を見やすく表示
- .llmignoreで除外設定ができる
- ファイルの中身を整形して出力
- トークン制限に合わせて出力を調整
# 使い方
1. .llmignoreで除外したいファイルを設定
2. ツールを実行
3. 出力された内容をAIに渡す
開発のサイクル
このツールを使って、こんな感じで開発を進めます:
-
プロジェクトの現状を把握
- ツールで今の状態を文書化
- 次に何を変更するか決める
-
AIに依頼して実装
- プロジェクトの今の状態を説明
- 欲しい変更を具体的に伝える
- AIの提案を実装してみる
-
会話を続ける
- 10往復くらいまでは同じ会話を続ける
- 新機能を追加するときは新しい会話を始める
- 新しい会話のときは最新の状態を説明し直す
↑このように①システムプロンプト②ドキュメント③ツールで作成したプロジェクト情報④作成・修正依頼内容
このサイクルを繰り返すことで、少しずつプロジェクトを進められます。特に、AIに今の状態をきちんと伝えることで、一貫性のある開発ができています。
まとめ:AI駆動開発の可能性と今後
この1ヶ月間、AIに主導的に開発を任せることで、いくつかの重要な発見がありました:
開発効率の大幅な向上
- プロジェクトの立ち上げから実装までの時間が劇的に短縮
- プロトタイプをClaudeのArtifact機能で作成することで、完成品のイメージを共有しやすい
AIとの効果的な協業のコツ
- プロジェクト情報の正確な伝達が最重要
- 適切なツールとプロンプトの活用で一貫性のある開発が可能
- 人間による設計の理解と管理は必須
その他
- 複雑なアルゴリズムや新しい知識が必要な場所など、どうしてもAIには何度やらせても正しいコードが書けない場面もごくごくまれに存在する。そこを見極めて人間が手を入れることも重要
- 意外な収穫として、AIが提案したコードを見て、人間が「これはなぜこうなるのか?」と疑問を持つことで、自分の知識の不足や誤解に気づくこともある。新たな知識を得る機会になるため、AIとの協業は自己成長にもつながる。
AI駆動開発は、単なる「コードを書かせる」というレベルを超えて、開発プロセス全体を革新する可能性を秘めています。まだまだ発展途上の分野ですが、今後も実践と改良を重ねていきたいと思います。
最後に、この記事で紹介した自作ツールは近日中にGitHubで公開予定です。皆さんもAI駆動開発を試してみませんか?
[GitHub リポジトリへのリンク予定]
明日はさん@tksht261さんの「HCI系ドイツ短期留学記」記事です!お楽しみに!