1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

プロジェクト規模のAIコード生成では「ドキュメント化」が必須

Posted at

Gemini_Generated_Image_ladml0ladml0ladm.png

非エンジニアである私が、1万行を超えるコードをAIで生成してこちらのアプリを個人開発した時に、どのようにAIを活用したのかを記載します。

使用モデル

この記事は、基本的に ChatGPT 及び Gemini を使用した時の経験に基づいて記載しています。両方とも月額数十ドルの有料版(ChatGPT Plus、Gemini AI Pro)を使用し、モデル名で言うと、ChatGPT 4o と、Gemini 2.5 Pro になります。また時期的には、2025年5~7月頃の使用に基づいた記事です。

結論

1タスク=1チャットを徹底し、新しいチャットを始めるたびにこれまでの経緯を書いたドキュメントをAIに渡す、という運用を徹底しました。下記に詳細をまとめます。

まとめ

  1. チャットは長くなる前に切り上げる
  2. 新規チャットへの移行方法
  3. ドキュメントの具体例

1. チャットは長くなる前に切り上げる

AIはチャットが長くなると回答の精度が落ちます。「長い」とは、個人的な経験上、複数日に渡って合計10時間を超える時間をAIとチャットし、数で言うと往復100回くらいメッセージ(コードやドキュメント生成など)をやり取りしていると、回答が徐々に怪しくなってくる感覚です。

技術的には下記2点が背景にあるようです。

  1. コンテキストウィンドウ(Context Window)の限界
  2. アテンション(Attention)機構の特性

1. コンテキストウィンドウ(Context Window)の限界

コンテキストウィンドウとは、AIが一度に処理し、記憶を保持できる情報量の上限のことです。2025年7月現在、Gemini 2.5 Pro では1チャットにつき100万トークンが上限で、これを超えてしまうと、同じチャット内でも過去のやり取りが削除されてしまうようです。

そしてこれは現在の仕組みでは「サイレントに削除される:scream: ようで、ユーザーはAIが過去のやり取りを忘れてしまっている事に気付かないまま、AIの回答精度が落ちます。

具体的には、数日前に修正済みのエラーの事に関して、修正済みだという事を忘れてしまい、新たなエラーが発生していると勘違いしてしまうような事は何度か経験しました。

ちなみに、100万トークンはおおよそ以下の情報量のようです。

  • 一般的な書籍: 約8冊分(平均的な長さの英語小説の場合)
  • ページ数: 約1,500〜2,500ページ
  • 文字数(英語): 約400万文字
  • 単語数(英語): 約75万語
  • コード: 約5万行

後述する私のドキュメントは調べると約3万トークンほどでした。これをコードファイルと共に最初のメッセージで添付して、その後何日もやり取りをし、新たなコードやドキュメントを生成してもらったりしていると、100万トークンはそんなに潤沢ではない事が分かります。何より「サイレントに削除される」のが怖いですね。。

2. アテンション(Attention)機構の特性

またAIは、メッセージの往復回数が多くなり「やっぱりこうしよう」「やはりAではなくBでお願いします」など、情報が紆余曲折するのが苦手です。

AIは、文脈全体の中でどの単語や文が現在の回答を生成するために重要かを判断し、そこに重点的に「注意(Attention)」を向けるようです。会話が何度も往復し指示が紆余曲折すると、AIが「結局、どの指示が最新で最も重要なのか」を判断する「注意力」が散漫になってしまうことがあるようです。その結果、少し前の指示を優先してしまったり、複数の指示を矛盾した形で解釈してしまったりして、回答の精度が落ちるようです。これを、『アテンション(Attention)機構の特性』と呼ぶそうです。

Gemini_Generated_Image_inc8ltinc8ltinc8.png

2. 新規チャットへの移行方法

前述した、特に「アテンション(Attention)機構の特性」に沿って、チャットの一番最初に全ての情報を渡しておくと、情報が紆余曲折せずにスムーズにタスクをこなしてくれます。


そこで、下記のような運営を徹底しました。
  • 1タスク=1チャットを徹底。タスクが1つ完了したら新規チャットに移行する
  • チャットの最後に、AIに「このチャットで完了した事をドキュメントにまとめて」もらう
  • 新規チャットに移行した際、最初のメッセージでドキュメントをAIに渡す
  • またその際、今回のタスクに関連するコードも渡す

これにより、AIは常にプロジェクトの全体像を把握した上で、最適なコードを生成してくれます。

💡 ちなみに、仕様決めと、コード生成は、別チャットで実施した方が良いです。


前述の通り、AIは情報が紆余曲折するのが非常に苦手。仕様決め(アイデア出し)ではどうしても紆余曲折してしまうので、最後に決まった事をドキュメントにまとめてもらい、「新規チャットで実装だけをする」というのが良いです。(ここで手を抜いて、そのまま同じチャット内で実装までしようとすると、エラーだらけのコードを生成されていつまで経っても実装完了できない、というのが何度もありました)

3. ドキュメントの具体例

ドキュメントは具体的には、下記のようなものが記載されているものを都度AIに生成してもらいました。

  • 開発しているアプリの概要(ターゲット層、アプリの主な機能 など)
  • 技術仕様(使用言語と使用中のパッケージ一覧、クラウド含む環境)
  • ファイル構成
  • データベース構成
  • アプリ内の画面仕様

今回、個人開発したアプリ「Read」の場合、最終的にGoogleドキュメントで約20ページくらいのドキュメントです。新しいチャットで何か1つタスクを完了する度に、このドキュメントをAIに更新してもらうイメージです。

実際に使っていたドキュメントの例①
image.png

実際に使っていたドキュメントの例②
image.png

(古い仕様書のため、製品版とは仕様が異なる部分があります)


ちなみに Gemini の場合、1つのメッセージで添付できるドキュメントは10個までです(これは「コンテキストウィンドウ」100万トークンとは別です)。仕様書や関連コードを添付すると、すぐに上限に達してしまうので、その場合は下記のように、複数のメッセージに分けてでも、必要なものを最初にきちんと渡してやると、情報が紆余曲折せずにスムーズにAIがタスクに専念してくれます。

image.png

さいごに

最初は随分と苦労したのですが、本記事の内容を徹底することで、非エンジニアの私が今回のアプリの個人開発で、合計1万行のコードをほぼ全てAIに生成してもらう事ができました。

今更ですが、AIは「天才新卒」👨‍🎓 だと思って接してます。


1000行のコードや20ページのドキュメントを、ほんの数秒で読んでくれる一方、明確な指示が無いとトンチンカンな回答をする事も。人間と接する時と同様に、プロジェクトの背景や、目標・目的、AIの役割、そして私の役割などなど、丁寧に説明してあげれば、とても優秀な同僚になってくれました。

さて前回に続き今回も、私の個人的な経験からのざっくりとした記事になりましたが、何かの参考になれば幸いです。

ご意見、ご指摘など、何でもコメントください。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?