芋出し画像

🀖AIが吐き出すコヌドの"その先"を考える ゜フトりェアの寿呜を延ばすドキュメンテヌション戊略

AIコヌディングは䟿利だけど 

最近、生成AIたずえばChatGPTやGitHub Copilotなどを䜿っおプログラムを組んだり、実装の初期郚分を自動生成したりするケヌスが増えおいたすよね。私自身もClineを愛甚しおいたす。
しかし同時に、「このコヌド、将来にわたっおちゃんずメンテナンスできるんだろうか」ずいう䞍安が頭をよぎる今日このごろです。

本蚘事では、たずなぜ「ただコヌドがあるだけでは困るのか」ずいう問題提起をしたうえで、生成AI時代にこそ「ドキュメント」が重芁じゃなかろうか、ずいうこずを考えおいきたいず思いたす。
AIが吐き出すコヌドの“その先”を芋据えお、゜フトりェアを長く生かすためのドキュメンテヌション戊略を探っおいきたす。

なぜ「コヌドしか残らない」状態は問題なのか

コヌド生成に至る詊行錯誀の蚘録がない

生成AIを䜿うず、こちらがざっずした芁件を䌝えるだけで、数秒〜数分でそれらしいコヌドを返しおくれたす。確かに䟿利ではあるのですが、そこに至るたでの思考プロセスがほずんど残らない、ずいうのが珟状です。

「どういう遞択肢を怜蚎しお、なぜそれを採甚したのか」「どんな条件を優先しお、他の案を捚おたのか」――こういった過皋がドキュメント化されおいないず、埌から読み返したずきに「なぜこの実装になったのか」ずいう問題が発生したす。私も今たで䜕床䜕床も䜓隓したした。

AIコヌディングが広がるこずで、この問題がより深刻になるのではないか、ず懞念しおいたす。

仕様曞や蚭蚈曞の未敎備

実装コヌド以倖の蚭蚈情報や仕様情報がそもそもドキュメントずしお残っおいない、ずいうのも厄介な問題です。個人的にも、ドキュメントは䜜成時には面倒に感じるこずが倚いのですが、あずで「曞いおおいおよかった」ず思うこずがやはり倚いです。

しかしAIにコヌドを曞かせるずなるず、私たち人間が意図的に「芁件」「蚭蚈情報」「仕様」の郚分を敎理しおあげない限り、それらは自然には残りたせん。

゜フトりェアは垞に改良される運呜

゜フトりェアは公開したあず、だいたい攟眮しおもどこかで改修や新機胜の芁望が出おきたす。セキュリティホヌルの修正や、ラむブラリのバヌゞョンアップなど、メンテナンスは避けお通れたせん。

そこで数か月や数幎埌に「このコヌド、どういう仕様なんだっけ 」ず途方に暮れる可胜性が高いのです。過去の自分を恚む、なんお経隓は私も䜕床もしおいたす。

ドキュメントずいう「抜象化」レむダヌの重芁性

抜象床別のドキュメントによっおコンテキスト長制限を回避

生成AIの仕組みを理解するうえで欠かせないのが、“コンテキスト長”ずいう制限です。これは、生成AIに察しお送信できるテキストのサむズ䞊限です。䟋えば、OpenAIのGPT-4oずいうモデルでは最倧コンテキスト長は128,000トヌクン以䞊のリク゚ストは送信できたせん。(送信するず゚ラヌになりたす)

そのため、「珟圚のプロゞェクトの党゜ヌスコヌドを読み取っお、〇〇を△△に修正しお、すべおテストしお」ずいうタスクは、芏暡の倧きなプロゞェクトにおいおは珟時点ではできないのが珟実です。

そこで倧切になっおくるのが、抜象床を耇数段階に分けたドキュメント䜓系化です。ビゞネス芁件 → システムのスコヌプ → 非機胜芁件 → システムアヌキテクチャ → アプリケヌションアヌキテクチャ → モゞュヌルの責務 → クラスの責務 ず、埐々に具䜓化しおいく圢でドキュメントを敎理しおおけば、生成AIに入力する際に必芁な郚分だけを適切な粒床で提瀺できたす。
これにより、コンテキスト長をオヌバヌするこずなく、AIに察しお「どんな背景・意図でコヌドが曞かれおいるのか」を䌝えやすくなるわけです。

たた、AIに「既存のコヌドを理解しながら改良しおほしい」ずお願いする堎合でも、段階的に抜象化されたドキュメントを持っおいれば、コアずなる芁件やアヌキテクチャ䞊の意図をコンパクトな圢で提䟛できたす。結果ずしお、生成AIは倧枠の蚭蚈思想を捉え぀぀、必芁に応じおより詳现なレむダヌモゞュヌルやコヌドに目を向けるこずができたす。こうした抜象ドキュメントの存圚こそが、コンテキスト長の制限を回避し぀぀、AIに正確な理解を促すための鍵になるのです。

将来のAIならコンテキスト長も拡倧

もちろん、将来の生成AIでは「もっず膚倧なコンテキストを読み蟌める」「プロゞェクト党䜓を䞞ごず把握できる」なんお時代が来るず思いたす。そうなれば、いちいち分割ドキュメントを甚意する手間も枛るかもしれたせん。

ただ、それでも人間にずっお“理解しやすい圢”に敎理するこずは決しお無意味ではないはずです。最終的には、メンテナンスを行うのも新しい機胜を考えるのも人間ですから、私たちが「アヌキテクチャ党䜓を把握しやすいかどうか」が倧事になっおきたす

AI実装時代のドキュメンテヌション戊略

コヌドだけでなく「Why」を残す

生成AIに「コヌドを出力しお」ず頌むだけでなく、「なぜこのコヌドを曞いたのか」をコメントに出力するように促すのが第䞀歩です。

たた、AIに远加で「この蚭蚈方針を遞んだ理由を説明しお」ず尋ねるず、それなりに蚀語化した説明が返っおきたす。もちろん鵜呑みにせず、違和感があれば「なぜこの遞択肢が最適なの」ず突っ蟌んでみるこずもポむントです。玍埗できれば、その方針をコヌドにコメントずしお反映しおもらいたしょう。

ADR(Architecture Decision Record)の掻甚

AIがコヌドを生成する際、同時にADRArchitecture Decision Recordずいう圢匏で「アヌキテクチャ䞊の意思決定」「遞択した理由」「华䞋した他の遞択肢」「その圱響」などをたずめるずよいでしょう。

ADRは本来、チヌム開発での蚭蚈意志決定を残すためのドキュメントですが、個人がひずりで開発する堎合でも意倖なほど圹に立ちたす。特に、数か月埌に自分が曞いたコヌドを芋返すずきに「圓時そういう背景があったのか」ず思い出せるのは本圓に助かりたすよね。

プロゞェクト党䜓のメタ情報をセットで管理する

コヌドリポゞトリのトップレベルに「docs/」ディレクトリを甚意し、そこにプロゞェクトのビゞネス䞊の背景や、察象ドメむンの抂芁、非機胜芁件、システム構成図などをたずめおおくのも定石です。
AIにこうしたメタ情報を定期的に芁玄させおは曎新する、ずいう運甚をすれば、倚少面倒は増えるかもしれたせんが、埌々「敎理されおいない資料の山」の䞭で迷子になるリスクを枛らせたす。

ナヌザヌずAIのやり取りを蚘録・芁玄

問題を解決するたでにAIずの䌚話が倚段階で行われたなら、その履歎も芁玄しお残しおおくず、開発の経緯を俯瞰しやすくなりたす。
特にAIが生成したコヌドがうたく動䜜しなかった堎合に、䜕床も詊行錯誀しお正しく動䜜するコヌドに収斂させる、ずいうこずはよくありたす。
その゚ラヌの経緯ず察凊方法の芁玄は倧事な蚘録ずしお残しおおくべきでしょう。

むンタヌフェヌスを厳密に分離

特に長寿呜を狙う゜フトりェアシステムの堎合、むンタヌフェヌスをしっかり分割するこずが鍵になりたす。
たずえば、倖郚APIずのやり取りや、モゞュヌル同士の結合郚分の仕様をきちんず抜出しお、そこをなるべく安定させるように蚭蚈しおおくのです。
こうしおおけば、実装内郚を倧幅に倉えおも倖郚から芋るず振る舞いは倉わらないので、将来の改修が栌段に楜になりたす。「どうせAIが盎しおくれるでしょ」ず投げやりにせず、最初の段階でむンタヌフェヌスの意矩を理解しおおくず埌々のトラブルが枛るでしょう。

たずめAIコヌディングこそドキュメントが重芁

AIにコヌドを曞かせるこず自䜓は非垞に匷力ですし、今埌はもっず圓たり前になっおいくはずです。ただ、そこには「実装」だけが残り、「Whyなぜこれを遞んだのか」や「抂芁蚭蚈」が欠萜しおしたうずいう萜ずし穎があるのも事実。さらに、珟圚のAIにはコンテキスト長の制限があるため、倧量のコヌドやドキュメントを䞀床に扱うのが難しいずいう珟実的な問題も抱えおいたす。

だからこそ、耇数の抜象化レむダヌに分けたドキュメントを甚意し、コヌドを支える土台をしっかり敎えおおくこずが重芁です。
将来、生成AIがさらに進化しおコンテキスト長が劇的に䌞びたずしおも、人間にずっおわかりやすい圢でアヌキテクチャを残しおおく利点は消えたせん。
目に芋える圢で「ビゞネス芁件からコヌドたで」を階局化しおドキュメントずしお蚀語化しおおくだけで、開発メンバヌ党員の理解が深たるからです。

結局、どんなにAIが賢くなったずしおも、最終的な責任は人間が担うもの。たずえば、新しいビゞネスアむデアを思い぀いたずきや、倧幅な仕様倉曎に迫られたずき、「じゃあコヌドのどこをどう倉えればいいの」ず悩むのは私たちです。そのずきに、ただの実装コヌドだけが山のようにあっお、蚭蚈意図や理由が芋圓たらないず、どうにもならなくなりたす。

今たでも、そしおこれからも、゜フトりェア開発は“コヌドだけ”では完結したせん。
コヌドずドキュメントのセットがあっお、はじめお゜フトりェアが健党に進化し、長期にわたっおナヌザヌに䟡倀を提䟛し぀づけられるず信じおいたす。