⚙️

低コスト&爆速でコード修正!AIエージェントを実務の開発でも試してみる

2025/01/09に公開

昨今、 Cline 等の AI エージェントによる開発支援を試されている方が多いかもしれません。
Ubie でも先日から Devin をトライアルしており、生成AIによる開発生産性の向上を模索している最中です。(この様子は下記記事によく書かれています)

https://zenn.dev/ubie_dev/articles/devin-for-test

Devinはアウトプットを考えるとコストが安いとは感じますが、 Cline のようなローカルで動作するエージェントはさらに安く高速動作します。これらが Ubie の一定規模になったコードベースで動作するのか、どのようなツールが有力候補となりえるのかを軽く検証してみました。

TL;DR

ローカルで動作するAIエージェントはコスト・速度・機能においてかなり活用しうる。今回は Cursor や Roo-Cline を使用して、「一定規模のコードベース」において「テストコード追加や簡単な改修」が数十~数百円程度のコストで実現 できた。ただし現状エンジニアじゃないと活用しにくいし、落とし穴もあるし、慣れも必要。
この特性を活かし、要件に応じてAIエージェントを切り替えて活用できるようになることで、得られるインパクトが大きく変わってくる。これらを利用する成熟度が今後のソフトウェアエンジニアの働き方を分岐するように思う。

試したもの

どちらもモデルは Claude 3.5 Sonnet を使います。

また、開発対象のプロジェクトは以下記事でも触れられている Ubie 社内の生成AI Web アプリケーションである「Dev Genius」を対象としています。このプロジェクトでは生成 AI へのチャット機能はもちろん、複数の試験的な生成AIミニアプリなどを盛り込んでおり、また一年以上運用している実績もありある程度の規模のコードベースになっています。

https://zenn.dev/ubie_dev/articles/ee95c03794f47f

Cursor Composer Agent

そもそも Cursor と Composer Agent とは?

Cursor は VSCode をベースに作られた、 AI による開発支援機能がふんだんに取り込まれたエディタです。 Cursor 自体は以前から存在して、 GitHub Copilot より先進的な機能を盛り込んでいることで一躍脚光を浴びていたかと思います。(最近は GitHub Copilot の進化も目覚ましく、機能差も変わりつつありますね)
この Cursor ですが、最近エージェント関連の機能がふんだんに盛り込まれるようになりました。

まず 去年の11月にエージェント機能が追加 されています。さらに 12月にはYoloモード という、エージェントがあらかじめ許可された操作をユーザ同意を得ずに勝手に実行して処理を進めてくれるモードを獲得しました。例えば「Next.js で新規にアプリケーション立ち上げてビルド可能な状態にして」的な依頼をする時に npm install とか色んなコマンドを実行して進行する必要が多いと思いますが、これらの機能により「 npm install は勝手に実行してOK」と教えておけばコマンド実行まで自走してやってくれることになります。このあたりは Devin と違い仮想環境じゃなくて自分のPCを操作することになるので、危険なコマンドを許可するのは避けた方が良いかもしれません。

これらの設定画面は下図の通りのイメージです。僕の手元では、主に Node.js, Python, Terraform 等に関わる開発をすることが多く、ある程度関連操作を自走可能にしています。

依頼1: テストコードの追加

まずは実装からテストコードを自動で起こしてもらってみます。

プロンプトは以下のようなものです(一部情報はマスクしています)。 @hogehoge というあたりは Cursor がサポートしているシンボルであり Cursor が提供するコンテキストを明示的に盛り込める仕組みです。

@selectLlm  のテストを追加したい。

1. @selectLlm  の実装を読んでどんな処理をしているか、テストケースとしてどういった内容があると良いかの情報収集をして
2. @format.spec.ts  など既存のテストコードからこのプロジェクトのテストコードの書き方のスタイルを推測して
3. llm.spec.ts という新しいファイルを作成して、これまで得た情報を元にテストコードを記述して
4. npx jest path/to/llm.ts を実行して、テストがパスするか確認して
5. もし 4. がパスしない場合、テストコードを修正した上で 4. を再実行して

依頼通りにテストコードが記述されたようですが、ファイルが見つからないようでテスト実行に転けましたね。


ただその後、指示を与えることなく問題を検知してリトライし、最終的にはテストをパスするところまで自走してくれました。

依頼2: FE & BE にまたがるフラグの振る舞い追加

ある新機能を Dev Genius に追加したのですが、まだまだ枯れてなくて予期せぬ挙動がありそうで、強めに有効化しちゃうと誤作動しそうな状況がありました。これをユーザが明示的に有効にするフラグを追加してみようと思います。

プロンプトは以下。ある程度の規模がある既存プロジェクトの改修ってやっぱ難しい課題だし、厚めにコンテキストを渡してみます。ここで @PR (Diff with Main Branch) というシンボルが現れていますが、これは Cursor に git diff をコンテキストとして渡してもらうための指示です。

@PR (Diff with Main Branch) で新たに追加されたXXXだが、まだ不安定で意図してオンにしたユーザに対してのみ開示するアルファ版機能としたい。ユーザは画面上で「XXXを使う」ことを意図して表明して、バックエンドではそのフラグを元にXXXを使うようにしたい。
画面上の見せ方は「YYY」と同じように、その隣にチェックボックス的なコンポーネントを出してユーザに問うようにしたい。

主要なコードは以下
- FE: @prompt-form.tsx 
- BE: @route.ts 

以下の手順で作業を進めて
1. 既存の差分やコードを読んで情報を集める
2. 得られた情報をもとに実装方針を決定する
3. 既存実装を修正する

依頼したタスクが完了したとのことですが、指定したのと他のファイルにおいて修正漏れがありました。追加で依頼を出します。

依頼の文脈の外で好ましくない振る舞いをすることもありますが、追加依頼をしてサクッと直してもらうこともできました。

最終的に5回の依頼と少量の手動修正で得たい成果を獲得するに至りました。
やはり一定規模のコードベースになるとコンテキストをうまく拾ってもらう・与えるのが難しくはなりますが、 Cursor のようなエディタが持っている知識を一定活用可能な環境と、複数ステップの繰り返しで徐々に最終成果物を詰めていく動きをすれば全然ワークするかと思われます。

Cursor (Composer Agent) の使用感

コスト

Cursor は Pro プランで言うと一定の Premium models fast requests quota が割り当てられます。初期は 500 requests / 月。前述の Composer Agent だと、自分が書いたプロンプトに反応してもらうのに 1 リクエスト消費します。

Pro plan は $20 / 月 で、この枠で言うと fast request 1 件につき $0.04 ( 現在レート的に約 6 円) かかっている計算。もし fast request を使い切っても gpt-4o-mini への fast request または premium models への slow request なら使えるので、用途によってはさらにコスパがよく感じるでしょう。

参考までに、依頼1&依頼2は成果物の修正も含めて合計で6リクエストくらいかけており、36円ほどで完成したことになります。

速さ

ローカルで動くエージェントなので、 Devin のようなリモート仮想環境のと比べると早いです。例えば依頼1はノーコンテキスト、ゼロスタートで情報収集から始めさせたので時間が多少かかるが、1分前後?くらいで結論が出ており、過程でも進捗が常に出てるな〜って感じるスピード感でした。

機能

前述のプロンプトの通りですが、エディタが持ってる情報を @hogehoge とシンボルを打つことでうまくコンテキストを拾ってもらえるようにできます。逆にこれをやらないといまいちコンテキストが拾われない場合があります。対象プロジェクトに関する知識が一定あれば精緻にコントロール可能でしょう。

また .cursorrules やエディタの設定の Rules for AI などでシステムプロンプトを与えることもできます。

https://zenn.dev/tks_00/books/e91b0dea16588b/viewer/df6872

Roo-Cline

Roo-Cline とは?

VSCode 拡張 で、 Cline という AI エージェントをフォークして作られています。これ以外にも Cline フォークは複数種類あるのですが、最近 SNS で情報をよく見かけることから検証することにしました。 Claude をフル活用する前提で、先進的なエージェント機能を積極的に盛り込んでおり、 Cursor で見てきたような機能も一通り揃っている様子です。 Cursorとは異なり、 VSCode ユーザはエディタを乗り換える必要がないことも大きなメリットでしょう。

Cursor の Yolo モードと同様、どれくらい自律的な操作を許すかを設定可能であり、ブラウザアクションなど先進的な機能も盛り込まれている印象です。

依頼1: テストコードの作成

まず Roo-Cline にもテストコードの実装依頼を出してます。プロンプトは以下です。 Cursor ほどではないですがシンボルでエディタ上の知識を与えることができます。

@/src/path/to/startPrompt.ts の selectLlm のテストコードを書いて欲しい。

1. @/src/path/to/startPrompt.ts の select Llm() の実装を読んでどんな処理をしているか、テストケースとしてどういった内容があると良いかの情報収集をして
2. @/src/path/to/xxx.spec.ts など既存のテストコードからこのプロジェクトのテストコードの書き方のスタイルを推測して
3. startPrompt.spec.ts という新しいファイルを作成して、これまで得た情報を元にテストコードを記述して
4. npx jest path/to/startPrompt.spec.ts を実行して、テストがパスするか確認して
5. もし 4. がパスしない場合、テストコードを修正した上で 4. を再実行して


一回のプロンプトで無事にパスするテストコードを書き上げてくれました!
Roo-Cline は各種 API にリクエストをしまくるイメージで、 API の利用料課金になります。 API コストも細かく教えてくれるのでタスクに対するコスト感が分かりやすいですね。今回の依頼だと Claude 3.5 Sonnet 利用で $0.1136 (約18円) でした。十分に安いと言えるでしょう。

依頼2: Dev Genius の簡易なフロントエンド修正

Dev Genius の画面上、他の社内ツールへのリンクもあったのですが、これを別タブで開くようにしてみます。プロンプトは以下。簡単そうな内容だしちょっとファジーな内容にしてみましょうか。

"xxx" へのリンクだけど、現在開いているタブじゃなくて別タブで開くようにできる?

すると、まず改修が必要だと思われる箇所の探索から行ってくれました!その後修正箇所を特定して無事にタスクを完了してくれました。

...が、どうも挙動が変わっていない!何度かプロンプトのやり取りをするものの解決に至らずでした。
仕方なしに自分が調査してみると、「Dev Genius プロジェクトに現在似たようなファイルが重複して存在している」ことに気づきました。 Dev Genius は Next.js を使って実装しているのですが、現在 Pages Router と App Router の移行中でこの移行前後の実装が重複して残されていました。そして Roo-Cline は移行前のファイルを参照して試行錯誤していたようです。こういう AI が誤解をしそう(なんなら人間でも誤解をしそう)なケースでは容易に落とし穴にはまってしまうし、現在の AI エージェントだと自己解決するのは結構難しそうです。

その後 App Router の方を改修して欲しいというコンテキストを新しいセッションで立ち上げたところ、得たい成果が2往復のプロンプトで手に入れられました。

2セッション使用して総コストは $0.5218 + $0.1371 = $0.6589 (約104円) と、必要以上にかかってしまいました。が、これでも安いですし、もし1セッション目のハマりどころを事前知識として与えられていたら、あるいは重複実装など落とし穴が少なくなれば、より的確・低コストに Roo-Cline は自走できたはずでもあります。

Roo Cline の使用感

コスト

コスパには余裕で優れています。 Cursor と違って API 使用量にかかる従量課金であり使用するモデルによって差は生まれますが、 Claude 3.5 Sonnet でこの成績なら十分すぎるでしょう。

速さ

Cursor と同様ローカルで動くエージェントなので早いです。体感だけど Cursor より早い気がしますが、誤差の範囲にも思えます。

機能

カスタマイズ性に非常に優れている印象です。

  • どこまで自動操縦を許すか設定できる
  • 使用する API とモデルを結構柔軟に選べる
  • MCPやブラウザアクションなど高度な機能も持っている
  • Cursor などにエディタごと乗り換える必要がない
  • 操作が必要だったり完了した時に音で教えてくれる

Cursor & Roo-Cline を一定規模プロジェクトで使った所感

両者とも低コストで高速に開発が進む印象です。
0->1 でプロトタイプを作るのとは異なり、的確に動いてもらうにはそれに必要なコンテキストが必要になります。また AI 支援をフル活用するための

  • ドキュメンテーション
  • 静的チェックやテストコードの拡充
  • 社内技術スタックや開発スタイルの統一・整理

も重要になっていくでしょう。とは言っても簡単な開発タスクならすでに AI に任せられる時代にあるのではないでしょうか。

Cursor vs Roo-Cline という比較をあえてするなら...個人的にはどっちも良いな〜という印象でした。両方を使う、例えば Cursor メインで Roo-Cline を従量課金枠で追加で使えると良いとも思えます。どう転んでもこのコスパなら元が取れる可能性は高いでしょう。

それでもどちらかを選ぶなら

  • エディタのフル機能を使いこなして「ほとんど手動開発しない」体験を追求したいなら Cursor
  • Claude系のモダンな機能を使いたかったりエディタ移行がめんどいなら Roo-Cline

かという感触を抱きました。

AIファーストな開発体験へ

最後にポエムで締めます。

エッセンスとしては、「AIエージェント、もうソフトウェア開発の中でだいぶ実用段階じゃん!」というところです。プロダクト開発における従来の ROI の概念を破壊していそうだし、その上で爆速です。規模のあるプロジェクトでは本記事で見てきたような障壁もありますが、それでも人間がうまくプロンプトを書くだけで即効性のある伸び代もありますし、モデルや MCP などのエコシステムの充実により状況は劇的に変わりそうです。何らかの開発支援AIエージェントには今から慣れていくべきと感じます。

Ubie では Devin の検証も進めていますが、本記事で見てきたエージェントとは二者択一ではないですし共存するのが良いでしょう。 Devin はその手軽さから本気で運用すれば非エンジニアでもやがて開発依頼が可能になる気もします。またエンジニアでも、ローカルとリモートで体験が違うのでうまく組み合わせられると生産量はさらに上がりそうです。

ローカルで動作する AI エージェントは、現状はソフトウェアエンジニアじゃないと実際の業務への適用がやや難しいように感じます。少なくともエンジニアは完全理解状態になって、「自分の手元にペアの AI 開発者が並走している状態」を実現した方がいいのではないでしょうか。これをやるだけで、極端に言うなら 2 倍前後の生産性を達成できそうな気もします。すると実現できることで競合優位に立つ、いやもしかすると実現しないことで競合から劣後することにもなりそうです。

自分がソフトウェアエンジニアとしてプロになって 10 年程度経過した今、正直、急激なテクノロジーの変化に焦燥感もありますが、楽しい要素も同居してします。 2025 年、 AI エージェントでバフがかかった体制目指して圧倒的成果へのショートカットを切り開いていきたいところです。

Ubie テックブログ

Discussion