ただ変換したかっただけ
ComicFestaでエンジニアをしてますピラフです。ここ数年ホットなAI周りにディープに携わったので備忘録として書き残します。殴り書きなので読みにくいことは目をつぶってください。
背景と課題
ComicFestaのテストはminitestとrpsecが混在しています、言い方を変えれば負債ですね。
本当なら統一するためにリソースを割くのが理想ですが、現実問題そうもいきません(どこの現場もそんなもんだと思いますが)
そこで自動化すればいいんじゃない?という事で白羽の矢が立ったのがAIエージェントです。
そんなこんなで既存のminitestをrspecに変換するエージェントを開発することになりました。
開発で感じた辛み
-
コーディング規約
これは例えばAGENTS.mdみたいなルールを敷くものを指し示しています。
最近ではここのあたりがかなりフォーカスされてきて重要視されてますが、本当にここは重要でなんでかっていうとただしいルールがないと普通に詰みます。だってコードリーディングできないくらい馬鹿でかコードだったりあり得ない数のファイルを生成するんですもの
あとある程度の大きさのものを作るってなる場合は何百行以内でとかは、後から修正の余地がなくなるので破綻します。 -
結局プロンプトゲー・コンテキストゲー
当たり前ですがエージェント開発で一番時間を使うのは、インフラを組む事でもコーディングをする事でもなく(この辺りは最近のAIがちょちょっとやってくれるので)とにかくプロンプトだったりコンテキストの抽出どうすればいいのってところです。
今回のケースでいえば、そもそもプロンプトを英語にした方がいいのか?日本語にした方がいいのかから始まりました。英語にするってサラッと書きましたが私自身英語は全くできないので日本語でプロンプトを書いてDeepLで翻訳してっていう作業を繰り返してました(本当に手間の塊)。 -
気を遣う
前述した通りプロンプト命なので少し表現を変えたりするとそれだけで今までOKだった箇所がすぐにNGとなります。今回の場合rubocopというリンターを掻い潜るコードを生成しなくてはいけないのでその周りの指導はかなり手を焼きました。結果的に完全なものはできなかったんですけどね。
また、テストの変換なのでテストデータの作成もドメイン知識モリモリなのでコンテキストの範囲を絞ったり広げたり色々な試行錯誤をしましたが完璧には程遠い結果となりました。
結局どうだったの?
結果だけ申しますと、
変換されたテスト数 381
変換成功数(基準を満たしたもの)91
成功率 24%
といったなんとも言い難い結果でした。
伝えたいこと
この経験を通じてAI周りのキャッチアップやAI駆動開発に関して学びを深めることができました。
ここからはここ1年爆発的にAIというものに触れてきた自分としての話です。
AIにはあくまでタスクを投げるものだと感じました。自分の中ではっきりとした意思決定があった上で最後作るの面倒だなってものを投げる、そうすれば並列化して開発を進められ効率化できる費用対効果が得られるなと。
AIと壁打ちするのも良いと思います。思考の整理になるのでですが最後に意思決定をするのはいつまで経っても(しばらくは)人間であると思うので各々自分自身の「ものさし」を磨いていく必要はありそれは、「AIが」「AIを」「AIの」といったAIを主語としたものではなく自分自身にフォーカスした基礎的なエンジニアとして技術者としてスペシャリストであり続けるために必要なものといった意味です。
つらつらと生意気なことを言いましたが、自分自身が一番この辺りの前提が足りないと痛感した人間です。
Discussion