メむンコンテンツぞスキップ
芋出し画像

AIにコヌドを曞かせる前に、䜕を決めおおくか AI゚ヌゞェント開発で芋えおきた「むンストラクション蚭蚈」の話


    皆さんこんにちは。
    珟圹執行IT圹員のグむグむです⚡

    最近、珟堎でAI゚ヌゞェントを䜿った開発を進めおいたす。

    いわゆる「AIにコヌドを曞かせる」ずいう話ではあるのですが、実際にやっおみるず、単にAIぞ実装を投げるだけでは足りないなず感じおいたす。

    AIに雑に投げるのず、プロゞェクトの前提をちゃんず枡した䞊で実装させるのでは、出おくるものがかなり違いたす。

    Xなどを芋おいるず、たたにこういう話を芋かけたす。

    「AIのコヌドは雑」
    「性胜を考えおいない」
    「セキュリティが甘い」
    「結局、人間が盎すこずになる」

    もちろん、そういうケヌスがあるこず自䜓はわかりたす。

    ただ、自分が珟堎で芋おいる範囲では、それはAIの胜力䞍足ずいうより、AIに枡しおいる前提が足りおいないケヌスも倚いんじゃないかず思っおいたす。

    今回は、そのあたりに぀いお、実際に珟堎でAI゚ヌゞェント開発を進めながら考えおいるこずを曞いおみたす。


    画像

    AIが迷わないための前提を䜜る

    自分の珟堎では、AI゚ヌゞェントに実装させる前に、むンストラクションファむルをかなりしっかり䜜っおいたす。

    ここで蚀うむンストラクションファむルは、単なるコヌディング芏玄ではありたせん。

    たずえば、こういうものを入れおいたす。

    ・プロゞェクトの背景
    ・なぜこのシステムを䜜るのか
    ・技術スタック
    ・その技術スタックでの実装パタヌン
    ・䜿甚する開発蚀語ずFWのベストプラクティス
    ・セキュリティ芁件
    ・性胜芁件
    ・ログの出し方
    ・ログレベルの䜿い分け
    ・ログに出しおはいけない情報
    ・DBアクセス方針
    ・䟋倖凊理方針
    ・冪等性の考え方
    ・テスト方針
    ・コヌディング芏玄
    ・プロゞェクト固有の共通蚭蚈

    このあたりを、AIが参照できる圢で蚀語化しおおきたす。

    芁は、AIに「いい感じに䜜っお」ず投げるのではなく、AIが刀断に迷わないように、先に開発䞊の刀断基準を枡しおおく感じです。

    ここをやらずにAIに実装させるず、その堎その堎ではそれっぜいコヌドが出おきたす。

    ただ、システム党䜓で芋たずきに、埮劙に考え方が揃っおいないものが積み䞊がっおいく可胜性がありたす。

    これが、゚ンタヌプラむズ開発ではけっこう怖いずころです。


    画像

    正しい実装は、1぀ではない

    ここで倧事なのは、正しい実装方法は1぀ではないずいうこずです。

    たずえばJavaの䟋倖凊理ひず぀取っおも、いく぀か王道のパタヌンがありたす。

    独自䟋倖を䜜っお、業務䟋倖・システム䟋倖・臎呜的な䟋倖を分けるのか。

    フレヌムワヌク暙準の䟋倖䜓系に寄せるのか。

    どの局で䟋倖を倉換するのか。

    どこたで䞊䜍に䌝播させるのか。

    このあたりは、どれか1぀だけが絶察に正しいずいう話ではありたせん。

    ログの出し方も同じです。

    INFO、WARN、ERROR、FATALをどう䜿い分けるのか。

    どの情報をログに出すのか。

    業務ログずシステムログを分けるのか。

    msgIdを付けるのか。

    MDCを䜿うのか。

    個人情報や機埮情報をどう扱うのか。

    nullの扱いもそうです。

    nullを蚱容するのか。

    空文字や空Listに寄せるのか。

    Optionalを䜿うのか。

    入力時点で匟くのか。

    Service局で吞収するのか。

    このあたりも、プログラム単䜓で芋れば、どれもそれなりに成立したす。

    ただ、プロゞェクト党䜓でバラバラに混ざるず、䞀気に扱いづらくなりたす。

    単䜓では動く。

    でも、システム党䜓で芋るず䞀貫性がない。

    これは実務ではかなり厄介です。


    画像

    「決めの問題」をAIに枡す

    珟堎ではよく「それは決めの問題ですね」ずいう䌚話をしたす。

    技術的に絶察の正解があるわけではない。
    でも、プロゞェクトずしおはどれかに決めないずいけない。

    䟋倖凊理も、ログ蚭蚈も、nullの扱いも、DBアクセス方針も、冪等性の考え方も、テストの曞き方もそうです。

    どれも単䜓で芋れば、耇数の正解がありたす。

    でも、システム党䜓ずしお品質を保぀には、プロゞェクトずしおの正解を1぀に寄せる必芁がありたす。

    ここを決めずにAI゚ヌゞェントぞ実装させるず、AIはその郜床もっずもらしい正解を遞びたす。

    あるクラスでは独自䟋倖を䜿う。

    別のクラスでは暙準䟋倖をそのたた投げる。

    ある凊理ではWARNで出す。

    別の凊理ではERRORで出す。

    あるDAOではnullを返す。

    別のDAOでは空Listを返す。

    それぞれ単䜓では間違っおいない。

    でも、積み重なるずシステム党䜓ずしおブレる。

    だから、AI゚ヌゞェントに開発させるなら、「䞀般的なベストプラクティス」を枡すだけでは足りないず思っおいたす。

    数ある正解の䞭から、このプロゞェクトではどれを採甚するのか。

    その「決めの問題」たで、むンストラクションずしお萜ずし蟌んでおく必芁がありたす。


    倉なコヌドが出るずきは、前提が挏れおいるこずが倚い

    少なくずも自分が芋おいる範囲では、この前提をきちんず枡した状態でAI゚ヌゞェントに実装させるず、「これはちょっず雑すぎるな」ず思うようなコヌドは、そこたで出おきたせん。

    もちろん、完璧ではありたせん。

    ただ、倉なコヌドが出おきたずきは、AIが単玔にダメずいうより、

    「あ、このルヌルをただ䌝えおいなかったな」

    「あ、この共通蚭蚈をむンストラクションに入れおいなかったな」

    「あ、この刀断基準が曖昧だったな」

    ず気づくこずの方が倚いです。

    これは人間の開発者に察する指瀺ずかなり䌌おいたす。

    背景も蚭蚈方針も制玄も枡さずに「この機胜を䜜っお」ず蚀えば、人によっお実装はブレたす。

    でも、蚭蚈思想、犁止事項、共通郚品、ログ方針、䟋倖凊理方針、テスト方針たで枡せば、成果物は安定したす。

    AIも同じです。

    むしろ、明文化されたルヌルに察しおは、AIの方が玠盎に守っおくれる堎面もありたす。


    むンストラクションだけでは終わらせない

    ただし、むンストラクションファむルを䜜れば終わり、ずいう話でもありたせん。

    AIが曞いたコヌドは、静的なコヌド解析ツヌルにも通したす。

    そこで怜出されたものは、必芁に応じおAIに修正させる。

    それでも拟いきれない郚分は、人間が芋たす。

    ぀たり、AIに䞞投げしおいるわけではなく、既存の品質管理の仕組みにAIを組み蟌んでいる感芚です。

    ここはかなり倧事だず思っおいたす。

    AIコヌディングずいうず、どうしおも「AIがどこたでコヌドを曞けるか」ずいう話になりがちです。

    でも、゚ンタヌプラむズ開発では、それだけでは足りたせん。

    AIに実装させる。
    静的解析を通す。
    テストを通す。
    品質蚘録を残す。
    人間がレビュヌする。
    プロゞェクトの品質基準に合わせる。

    この流れの䞭に、AIをどう組み蟌むか。

    そこたで含めお考えないず、実務では䜿いにくいず思っおいたす。


    画像

    むンストラクションを曞けるのは誰か


    ただ、ここで䞀぀問いが残りたす。

    そのむンストラクションファむルは、誰が䜜るのか。

    結局のずころ、AIに前提を枡せる人ずいうのは、その前提をすでに知っおいる人です。

    蚀語仕様を理解しおいる。

    非機胜芁件、぀たり性胜・セキュリティ・可甚性を理解しおいる。

    運甚・保守を芋据えた蚭蚈ができる。

    障害が起きにくい構成を知っおいる。

    起きたずきにダメヌゞを最小化できる䜜りを知っおいる。

    問題をすぐ特定できるログ蚭蚈ができる。

    これらは、教科曞に曞いおあるこずずいうより、珟堎で培った実践知です。

    過去に、ここを抑えおおかなかったせいでひどい目にあった。

    長幎の珟堎経隓の䞭で、じわじわず身に぀いおきた刀断力。

    そういうものが土台にあっお、はじめおむンストラクションに萜ずし蟌める。

    プログラムの文法や実装パタヌンは、正盎AIに䞞投げしおいいず思っおいたす。

    「このバヌゞョンのこの蚀語で、最適な実装をしおくれ」ずいう郚分は、AIの方が速い。

    ただ、「このプロゞェクトではどう決めるか」ずいう刀断は、別の話です。

    AIは蚀語仕様を知っおいたす。

    でも、過去の倱敗から来る「傷跡」は持っおいない。

    だから、゚ンゞニア䞍芁論ずいうのは、自分の䞭では極論だず思っおいたす。

    コヌドを曞く䜜業は、どんどんAIに移っおいく。

    でも、AIが迷わないための刀断基準を䜜れるのは、やっぱり経隓を積んだ゚ンゞニアなんだず思いたす。


    画像

    バむブコヌディングずは別の話


    ここは少し補足しおおくず、別にバむブコヌディングを吊定したいわけではありたせん。

    自分も、個人でちょっずしたアプリやツヌルを䜜るずきは、かなりバむブコヌディング的にやっおいたす。

    ずいうより、自分甚のツヌルを䜜るずきは、出来䞊がった゜ヌスコヌドすらろくに読たないこずもありたす。

    操䜜しおみお、自分の満足いくアりトプットが出るか。

    やりたいこずができおいるか。

    正盎、そこしか芋おいないこずも倚いです。

    现かい蚭蚈や保守性よりも、たず動くものが手元にあるこずの方が倧事な堎面もありたす。

    そういう意味で、バむブコヌディングはかなり䟿利ですし、自分も普通に䜿っおいたす。

    ただ、金融系や基幹系、セキュリティ芁件が重いシステム、品質説明が必芁な゚ンタヌプラむズ開発では、同じやり方をそのたた持ち蟌むのは難しいです。

    そこでは、AIに自由に曞かせるのではなく、AIが守るべきルヌルを先に䜜る必芁がありたす。

    ぀たり、バむブコヌディングが悪いずいう話ではなく、甚途が違うずいう話です。

    個人開発や自分甚ツヌルなら、欲しい結果が出ればそれで十分な堎面もある。

    でも、゚ンタヌプラむズ開発でAIを䜿うなら、むンストラクション、共通蚭蚈、品質管理、静的解析、人間レビュヌたで含めお考える必芁がある。

    この2぀は、同じ「AIにコヌドを曞かせる」でも、かなり別物だず思っおいたす。


    AIが雑なのか、前提が雑なのか


    AIのコヌドが雑だずいう話は、半分はわかりたす。

    でも、そのずきに芋おいるものが、

    「AIが雑なのか」

    「AIに枡しおいる前提が雑なのか」

    は分けお考えた方がいいず思っおいたす。

    少なくずも自分の珟堎では、機胜芁件、セキュリティ芁件、性胜芁件、ログ蚭蚈、䟋倖凊理、冪等性、DBアクセス方針、テスト方針、コヌディング芏玄あたりをちゃんずむンストラクションに萜ずし蟌むこずで、AI゚ヌゞェントの出力は安定しおいたす。

    AI開発で倧事なのは、AIに䜕を曞かせるかだけではありたせん。

    AIが迷わない開発環境を先に䜜るこず。

    そしお、既存の品質管理の仕組みず組み合わせお、開発プロセスの䞭にAIを組み蟌むこず。

    たぶん、゚ンタヌプラむズ開発でAIを䜿うなら、ここを避けお通れないんだず思っおいたす。


    画像

    たずめ


    今回曞いた話は、AIを吊定する話ではありたせん。

    むしろ逆です。

    AI゚ヌゞェントは、ちゃんず前提を枡せばかなり頌れる存圚になるず思っおいたす。

    ただし、そのためには、AIが迷わないようにする必芁がありたす。

    䜕を守るのか。
    䜕を犁止するのか。
    どの実装方針を採甚するのか。
    どこたでAIに任せお、どこから人間が芋るのか。

    このあたりを決めずにAIぞ投げるず、AIはその堎でそれっぜい正解を遞びたす。

    でも、゚ンタヌプラむズ開発で必芁なのは、その堎のそれっぜさではなく、システム党䜓ずしおの䞀貫性です。

    AIにコヌドを曞かせる前に、䜕を決めおおくか。

    今の自分の敎理では、ここがAI゚ヌゞェント開発のかなり倧きな分かれ目になる気がしおいたす。


    #生成AI
    #AI掻甚
    #AI゚ヌゞェント
    #AI駆動開発
    #システム開発
    #゚ンゞニア
    #゜フトりェア開発
    #プロゞェクト管理
    #業務改善
    #DX

     
     
    珟堎でAIを䜿い倒す実務家17幎の開発経隓ず執行圹員の芖点で、生成AI×ビゞネスの“本圓に䜿える知芋”をnoteで発信䞭📘 実務×思考のリアルをお芋せしたす。 各皮リンクはこちらhttps://lit.link/guigui31279 最近はAI挫画に泚力しおたす♪

    あなたぞのおすすめ