はじめに
一種の Vibe Coding をしてみたという「やってみた」記事なのです。
「テキスト指示によるコーディング」としたのは、この一年で Vibe Coding の含意も変わっていると思っているからです。そこで、ここでは生成AI ツールとの対話モード (私が利用しているツールでは「Ask モード」と記載されている例が多いように思います)を利用した開発を「テキスト指示によるコーディング」として記載していきます。
結論、費用面と環境周りの手間を考えて少なくとも個人利用の範囲ではスーパーコードスニペットとして使うことになりそうです。
お題
新規に運用用の CLI を作ってみるのに使ってみました。今回やってみたのは以下の2つです。
- 設定ファイルのコードでの検証
- 既存運用スクリプトのリライト
設定ファイルのコードでの検証
諸事情で設定ファイルのレビューが増えていていて、負担が大きくなっています。OPA/Rego , conftest を使ってレビューしたい観点をテキストで与えたらコードができればいいなという実験的な話です。
既存運用スクリプトのリライト
業務で利用しているAWS が Jump アカウント構成 + Switch Role 構成で、厳密に管理されている IAM Role の信頼関係ポリシーのチェックツールを作ってみることにしました。
シェルスクリプト(bash)で似た要件のものは作っていました。しかし、あまり現代的な書き方でもないのでテスト書くのも難しくという状態でした。特にレスポンスを jq で頑張って加工しているのにやや限界を感じていました。機能追加したい要望もあったのでテキスト指示によるコーディングをしてみました。
課題
廃止された仕様で出力される
これは設定ファイルのコードでの検証の方でハマりました。
- モデルの学習データのカットオフ期間後にメジャーバージョンアップがあった
- リストされてるプロダクトの最新仕様を取ってくる MCP を使ってはいたが、当時リストされてなかった
- 自分もあまり詳しくなかったので、古い仕様で出力されていることに気がつくのが遅かった
今年上半期だったと思いますが、古い仕様を出力するので、公式の情報を与えたら混在した変なコードを生成するというハマりに合いました。新旧仕様混在で動いてるものは結構注意が必要そうですね。
今だと公式の仕様を与えた時点でモデルの学習期間に含まれてない旨伝えてくれそうな気もしますが、この辺りの時系列を考えないといけないのかとは思いました。
費用面
モデルが新しくなるにつれて実質的な値上げになっている印象です。
元がシェア奪取のために安くしていた面もあると思いますが、価格変更のペースや、サイレント変更(下位プランのディフォルトモデルが精度悪いものに変わっていたり)などが繰り返し行われている印象で、安定継続して使うのに不安があります。
料金がリクエスト回数と、リクエスト時のデータ量での従量課金になるのはそうなのですが、「なんだかよく分からないけど結構コストかかったな」というリクエストが多くなると「それはちょっと……」という気持ちになって、個人用途では精神衛生にあまり良くないと思いました。リクエストレート/モデルに制限があるが、固定額キャップがある方がいいのかもしれませんが、漏れなく値上げ+円安でうなってしまっています。
会社で使うときでも割とモデルややり取りを気にして、料金ダッシュボードを見ながらでも$100/月に納まりませんでした(気を使わないと数百ドルかかるんじゃないかなぁ)。組織の取り組み度や利用人数にはよりますが、企業セキュリティ含めて本運用割とハードルあるかもなと思いました。
動いてはいるけれど……
これも当時のモデルで私の利用歴も浅い頃の話で、今は変わってるかもしれません。その前置きの上で、機能追加に対してのコード変更(単純追加/削除ではなく)が多いなという印象でした。私のプロンプトでの説明がうまくないのかなとも思いますが。
具体的には運用スクリプトの方で diff の出力フォーマットを将来的に複数提供する必要がある前提で作るようにプロンプトしたので複数メソッドや生成部分の if-else ではなく、デザインパターンを使った構造にしておいて欲しかったのですが、そうはなりませんでした。まだその時期ではないと判断されたのかもしれません。早すぎる最適化だと考えているとすると逆にやるな、というところなのかもしれませんが。
おわりに
結局、ある程度自分でデータ構造/クラス設計をして、「こここういう風にしたいけど書くのめんどくさいな/どう書くんだったっけ」というところをコメントで書いておいてそこを生成AI に聞いて埋めるみたいな使い方をしてました。これが冒頭で書いた「スーパーコードスニペット」という件ですね。年末のモデルで試してないですが、今のモデルだとあまりよくない使い方なのだろうなと思ってます。
それにしても Conftest (OPA/Rego) のコードがうまく出てこないのは学習データのカットオフ問題以外にも何かありそうなくらいどのモデルも割と動かないものを返してきがちなのは何なのでしょうか。私のプロンプトが悪いのかもしれないので、この辺も引き続き調べて行きたい追うと思います。