🤢

ただ変換したかっただけ

に公開

ComicFestaでエンジニアをしてますピラフです。ここ数年ホットなAI周りにディープに携わったので備忘録として書き残します。殴り書きなので読みにくいことは目をつぶってください。

背景と課題

ComicFestaのテストはminitestとrpsecが混在しています、言い方を変えれば負債ですね。
本当なら統一するためにリソースを割くのが理想ですが、現実問題そうもいきません(どこの現場もそんなもんだと思いますが)
そこで自動化すればいいんじゃない?という事で白羽の矢が立ったのがAIエージェントです。
そんなこんなで既存のminitestをrspecに変換するエージェントを開発することになりました。

ちなみにその時の私のAIに対する耐性はこんな感じ

知っている事

前PJや日々の業務である程度使用しているので仕様駆動開発ってこうだよね。プロンプトエンジニアリングってこうだよね。ウンウン便利便利

知らない事

LLMの内部構造、MCPって実際なんなの?RAGってなにこれ. といった感じです

開発で感じた辛み

  1. コーディング規約
    これは例えばAGENTS.mdみたいなルールを敷くものを指し示しています。
    最近ではここのあたりがかなりフォーカスされてきて重要視されてますが、本当にここは重要でなんでかっていうとただしいルールがないと普通に詰みます。だってコードリーディングできないくらい馬鹿でかコードだったりあり得ない数のファイルを生成するんですもの
    あとある程度の大きさのものを作るってなる場合は何百行以内でとかは、後から修正の余地がなくなるので破綻します。

  2. 結局プロンプトゲー・コンテキストゲー
    当たり前ですがエージェント開発で一番時間を使うのは、インフラを組む事でもコーディングをする事でもなく(この辺りは最近のAIがちょちょっとやってくれるので)とにかくプロンプトだったりコンテキストの抽出どうすればいいのってところです。
    今回のケースでいえば、そもそもプロンプトを英語にした方がいいのか?日本語にした方がいいのかから始まりました。英語にするってサラッと書きましたが私自身英語は全くできないので日本語でプロンプトを書いてDeepLで翻訳してっていう作業を繰り返してました(本当に手間の塊)。

  3. 気を遣う
    前述した通りプロンプト命なので少し表現を変えたりするとそれだけで今までOKだった箇所がすぐにNGとなります。今回の場合rubocopというリンターを掻い潜るコードを生成しなくてはいけないのでその周りの指導はかなり手を焼きました。結果的に完全なものはできなかったんですけどね。
    また、テストの変換なのでテストデータの作成もドメイン知識モリモリなのでコンテキストの範囲を絞ったり広げたり色々な試行錯誤をしましたが完璧には程遠い結果となりました。

結局どうだったの?

結果だけ申しますと、

変換されたテスト数 381
変換成功数(基準を満たしたもの)91
成功率 24%

といったなんとも言い難い結果でした。

伝えたいこと

私の意見ですがAIはとても便利なものです、しかし万能ではありません。

ですが、この現代社会を生きていくには大小関係なく一回深くまでAIに触れてみるのは良い経験だと思います。そうすると「AIってこんなもんなんだ」「期待しすぎも良くないな」という、AIとの正しい距離感が掴めると思います。まずは手を動かして、肌感を得ることから始めてみてはいかがでしょうか?

wwwave's Techblog

Discussion