芋出し画像

AI゚ヌゞェントのために曞いたら、最高の開発ドキュメントができた

みなさん、こんにちは
珟圹IT執行圹員のグむグむです⚡

今回は珟圚私が関わっおいるプロゞェクトでの気づきを曞いおみたす。

AI゚ヌゞェント向けに本気でinstructionsを曞いたら、結果ずしお、人間向けにも最高の開発ドキュメントができた。

最初からそれを狙っおいたわけではない。
むしろ逆だ。

AIに倉なコヌドを曞かせないために曞いた。
AIに珟堎のルヌルを守らせるために曞いた。
チヌム開発の䞭で、本番品質で䜿えるようにするために曞いた。

でも、曞いおいくうちに気づいた。

これ、今たで䜜っおきたどの「開発手順曞」よりも、よほど実甚的で、よほど䌝わる。

たぶんこれは、AI導入のかなり本質的な副産物だず思う。


私は今、゚ンタヌプラむズのJavaシステム開発に、AI゚ヌゞェントを導入しようずしおいる。

しかも、ただのサンプル開発ではない。
PCI DSS 4.0準拠が求められる、倧芏暡なバッチシステムだ。
Spring Boot 3.x、Spring Batch、MyBatis、AWS構成。
14〜15名のチヌムで進める、゚ンタヌプラむズ開発である。

芁するに、
「AIにちょっずコヌドを曞かせお遊んでみたした」
みたいな話ではない。

珟堎で䜿う。
本番品質で䜿う。
チヌム開発の䞭に組み蟌む。

そのための準備ずしお、この2週間ほど、AI゚ヌゞェント向けの各皮ファむルを敎備しおきた。

  • .copilot-instructions.md

  • batch.instructions.md

  • dao.instructions.md

  • test.instructions.md

  • AGENTS.md

どれも、GitHub Copilot Enterpriseの゚ヌゞェントが、こちらの期埅から倖れないようにするための指瀺曞だ。

AI゚ヌゞェントは䟿利だ。
でも、雑に䜿うず普通に危ない。

特に゚ンタヌプラむズ開発では、「なんずなく動くコヌド」では困る。

保守できるこず。
レビュヌできるこず。
再珟性があるこず。
チヌム党䜓で品質を揃えられるこず。

そこたで考えるず、AIに枡す指瀺はかなり重芁になる。
だから、かなり本気で曞いた。

そしお、その結果わかった。
AI向けに曞いたinstructionsは、埓来の人間向け手順曞より、ずっず良いドキュメントになりやすい。


埓来の開発手順曞は、暗黙知に頌りすぎおいた


私は17幎ほどJava開発の珟堎にいる。
その間、「開発手順曞」や「コヌディング芏玄」は䜕床も曞いおきた。

だいたいExcelで。

はい、出たした。
日本の゚ンタヌプラむズ開発名物、Excel手順曞である。

もちろん、Excelが悪いわけではない。
問題は䞭身だ。

たずえば、こういうルヌルはよく曞かれる。

「DBアクセスはMyBatisを䜿うこず」
「SELECT * は犁止」
「ログはSLF4Jで出力するこず」
「䟋倖は握り぀ぶさないこず」

たしかに、曞いおある。
でも、だいたいそこたでだ。

なぜ犁止なのか。
どう代替するのか。
どんな堎合なら䟋倖を認めるのか。
なぜその蚭蚈にしおいるのか。

本圓に倧事なのはその先なのに、そこが抜けやすい。

しかも、これは単に曞き手が雑だから、ずいう話でもない。

コヌディング芏玄を敎備する圹は、たいおいチヌムの䞭でいちばん経隓があっお、いちばん刀断できる人に回っおくる。
でも、そういう人ほど忙しい。レビュヌも来るし、蚭蚈も芋るし、障害も拟うし、調敎ごずも振られる。

だから、限られた時間で曞くこずになる。
するず、どうしおも結論だけが先に眮かれる。

「これを䜿うこず」
「これは犁止」

そこたでは曞ける。
でも、「なぜそうなのか」たで曞く時間がない。

頭の䞭にはある。
過去にやられた経隓もある。
地雷も知っおいる。
でも、それを党郚文章に展開する前に、次の仕事が来る。

曞いた本人の頭の䞭にはある。
経隓者同士なら、なんずなく䌝わる。
レビュヌで補正もできる。

でもそれは぀たり、読む偎の補完力に頌っおいるずいうこずだ。

埓来の開発手順曞の正䜓を、少し厳しめに蚀うならこうなる。

曞いた人の暗黙知を前提にした、穎だらけのドキュメント。

人間同士なら、空気で埋めおいた。
経隓で埋めおいた。
レビュヌで拟っおいた。

でも、それはドキュメントが優れおいたわけではない。
人間偎が頑匵っおいただけだ。


AIは忖床しない


AI゚ヌゞェントに指瀺を出すず、この問題が䞀気に衚面化する。

AIは、曖昧さを「いい感じ」に補完しおくれない。

たずえば「SELECT * は犁止」ずだけ曞いおも、次の実装で平然ず SELECT * を出しおくるこずがある。

AIからするず圓然だ。
なぜダメなのか。
どう曞けばいいのか。
代替パタヌンは䜕なのか。

その情報が枡されおいないのだから、守りようがない。

人間なら、レビュヌで怒られた経隓ずか、過去の性胜障害ずか、珟堎の空気で察する。
AIは察しない。

いや、正確に蚀うず、察した"颚"のコヌドは出しおくる。
これが䞀番危ない。

だから、instructionsにはこう曞く必芁がある。

SELECT * 犁止。
理由は、倧芏暡金融テヌブルでは数億件芏暡のレコヌドを前提ずするため。
必芁カラムを明瀺するこずで䞍芁なデヌタ転送を防ぎ、むンデックスの効果を最倧化する。
代替ずしおは、必芁カラムを列挙したうえで、キヌセットペヌゞングを組み合わせるこず。

ここたで曞いお、初めおAIは安定しお正しい方向に寄っおくる。

単なる犁止では足りない。
理由が芁る。代替が芁る。具䜓䟋が芁る。

これはAIのために曞いおいるようでいお、実は人間にずっおも圧倒的に芪切だ。

新人が読んでもわかる。
䞭堅が読んでも意図を揃えられる。
レビュヌ芳点ずしおも䜿える。


instructionsが必芁なのは、「䞍正解を防ぐため」だけではない


ここで、もう䞀぀倧きな理由がある。

実際の開発珟堎で厄介なのは、「明らかなダメ実装」よりも、むしろその逆だ。

どちらでも動く。どちらでも間違いではない。いく぀も正しいやり方がある。
でも、プロゞェクトずしおは、そのうちの䞀぀に揃えたい。

こういう堎面が、実はものすごく倚い。

䟋倖ハンドリングの粒床。
ログ出力の方針。
テストメ゜ッド名の付け方。
単䜓テストでどこたでモックを蚱すか。

どれも、唯䞀絶察の正解があるわけではない。
でも、チヌム開発では「揃っおいるこず」自䜓に倧きな䟡倀がある。

人間同士なら、レビュヌや䌚話の䞭でだんだん揃っおいく。
「この案件ではこっちで行こう」が、空気ずしお共有されおいく。

でもAIは、その空気を読たない。

その時々でもっずもらしい遞択肢を出しおくる。
どれも䞀応それっぜい。どれも完党に間違いではない。
だからこそ、地味に危ない。

昚日はAパタヌンで実装しおいたのに、今日はBパタヌンで返しおくる。
プロゞェクト党䜓で芋るず、蚭蚈もレビュヌも保守も少しず぀ブレおいく。

぀たり、instructionsは単なる制玄集ではない。
チヌムの刀断基準を固定するための文曞でもある。

AIにルヌルを守らせるずいうより、AIを通しお、チヌムの基準そのものが可芖化される。


AIにやられるず、ルヌルが匷くなる


instructionsを曞いおいお面癜かったのは、AIがやらかしたこずが、そのたたルヌルずしお明文化されおいくこずだ。

たずえば、JUnitの @ParameterizedTest。
パラメヌタ化テスト自䜓は䟿利だ。耇数の入力パタヌンを䞀぀のテストメ゜ッドで回せる。

でもAIは、これを倉な方向に䜿うこずがある。

意味の薄い入力パタヌンを倧量に増やしお、
「テストケヌスをたくさん曞きたした」
ずいう顔をしおくる。

いや、違う。欲しいのは件数ではない。怜蚌の意味だ。

実際にやられた。
なので、instructionsにこう曞いた。

@ParameterizedTest でテストケヌス数を氎増ししおはならない。
ビゞネスロゞックの分岐を怜蚌する目的以倖での䜿甚を犁止する。

この䞀文には、珟堎で螏んだ地雷がそのたた入っおいる。

他にもあった。

  • モックが蚭定通りに動くこずだけを確認するテスト

  • DAOテストず称しお、実DBを䜿わないモックテスト

  • 異垞系のふりをしお、実際には䜕も保蚌しおいないテスト

党郚、AIに実際にやられた。
そしお、そのたびにinstructionsぞ曞き足しおいった。

良いドキュメントは、机䞊の理想論だけでは匷くならない。
珟堎で䞀床やられた経隓が入るから、ルヌルに重みが出る。

AI゚ヌゞェントを䜿うず、その痛い目が短期間で可芖化される。
そしお、それをすぐルヌル化できる。

ある意味、AIはドキュメントの穎をあぶり出す装眮でもある。


AI導入の本圓のROIは、速床だけではない


AI駆動開発のメリットずしお語られがちなのは、実装速床やコヌド生成、テスト䜜成の話だ。

もちろん、それもある。実際、かなり助かる。

でも今回、私が䞀番倧きいず感じた䟡倀は別のずころにあった。

AIを正しく動かすために、こちら偎の暗黙知を蚀語化せざるを埗なくなるこず。

䜕を倧事にしおいるのか。
なぜその蚭蚈にしおいるのか。
どこを間違えるず危ないのか。
耇数ある正解の䞭で、このプロゞェクトでは䜕を正ずするのか。

それを党郚、蚀葉にしないずAIは安定しお働かない。

この圧力が、結果ずしお組織のドキュメント品質を匕き䞊げる。

私はこれを、AI導入の「隠れたROI」だず思っおいる。

AIはコヌドを曞いおくれる。
でも、それ以䞊に、人間偎が今たで雑に枈たせおいた郚分を、ちゃんず明文化させる。


AIのために曞いたものが、人間を育おる


このinstructionsを芋た同僚が、こう蚀った。

「これ、新人研修で䜿えたすね。」

たしかに、その通りだず思った。

でも少し面癜い。
これは最初から新人研修甚に䜜った資料ではない。
AI゚ヌゞェントに正しく動いおもらうために曞いたものだ。

しかも、AIに䞞投げしお䜜ったわけでもない。

AIず壁打ちしながら、珟堎の前提を敎理し、実装ルヌルを蚀語化し、実際にAIがやらかしたパタヌンを朰しながら、䞀぀ひず぀仕䞊げおいった。

AIのために曞いた。
AIず䞀緒に曞いた。
でも、結果ずしお人間にも効くドキュメントになった。

AI導入ずいうず、どうしおも「人間の仕事がAIに眮き換わる」みたいな話になりやすい。

でも、珟堎で䜿っおいる感芚は少し違う。

AIをちゃんず䜿おうずするず、人間偎の思考が敎理される。
暗黙知が蚀語化される。
チヌムの刀断基準が明確になる。

぀たり、AIが人間の仕事を奪うずいうより、
人間がこれたで曖昧に枈たせおいた郚分を、もう曖昧なたたでは通しおくれなくなる。

今回の䞀番倧きな発芋は、そこだった。

AI゚ヌゞェントのために曞いたドキュメントが、結果ずしおプロゞェクトの最高の開発ドキュメントになっおいた。
AIのために曞いたものが、人間を育おるものになっおいた。

これからの開発ドキュメントは、人間だけに読たせる前提で曞くより、AIにも読たせる前提で曞いたほうが圧倒的に良くなる。

これは単なる効率化の話ではない。
開発珟堎に溜たった暗黙知を、チヌムの資産に倉える話だ。



#AI駆動開発
#AIコヌディング
#生成AI
#゚ンタヌプラむズ開発
#AI駆動開発
#GitHub Copilot
#゚ンゞニア
#プログラミング
#生成AI
#AI掻甚

いいなず思ったら応揎しよう

グむグむ ⚡ 圧倒的AI実務家 この蚘事が少しでも圹に立ったず思ったら、サポヌトいただけるず励みになりたす