こんにちは。データサイエンティストのMaki(@hAru_mAki_ch)です。
最近は、コードを書くプロセスを大幅に効率化するAIエージェントが注目を浴びています。特に、エディタ上で自然言語による指示をもとに自動でコーディングを行う「コーディング支援AI」は、開発速度や生産性の向上に寄与すると期待されています。
本日ご紹介する「Roo-Cline(※現在は「Roo Code」に名称変更)」もその1つです。チャット形式で開発者が指示を与えると、新規のコード作成や既存コードの修正などを自動で行ってくれます。
本記事では、Roo-Clineを活用したAI駆動開発の環境構築手順から、実際の運用方法や周辺ツールとの連携までをお伝えします。
AI駆動開発を支える環境の構築
AI駆動開発を進めるには、AIエージェント単体だけでなく、それを取り巻くさまざまなツールやインフラが必要です。僕は自作のオープンソースプラットフォームであるAMATERASUを使い、以下の3つのサービスをまとめて構築して運用しています。
- Langfuse:LLMへのリクエスト・レスポンスを可視化・ログ管理
- LiteLLM:複数のLLMプロバイダをまとめて管理するプロキシサーバ
- Coder:ブラウザでVS Code相当のリモート開発環境を提供
1. AMATERASUを利用した環境セットアップ
AMATERASU は、生成AI関連のサービスをまとめて立ち上げるためのオープンソースのプラットフォームです。
インストール手順などの使用方法はこちらをご覧ください。
https://github.com/Sunwood-ai-labs/AMATERASU
【AMATERASUの特長】
- AWSでの運用前提で、社内のセキュリティ要件を満たせるTerraformスクリプトを用意している
- Docker Composeを使って各種コンテナを立ち上げる仕組みを提供している
- 社内サーバなどに素早く展開できるため、申請が面倒なインストール作業を極力減らせる
AMATERASUを使うと、Langfuse・LiteLLM・Coderといったサービスを数コマンドで一括構築でき、会社の環境に閉じたネットワーク内で生成AIを活用できます。
2. 必要なサービスの設定
AMATERASUで構築される環境には、AI駆動開発を支える複数のサービスが含まれます。その中でも重要な以下の3つのツールについて解説します。
- Langfuse
- LiteLLM
- Coder
※AMATERASUに含まれるDocker Composeファイルを使えば、これらを個別に立ち上げられます。
Langfuse:ログ管理と可視化
Langfuseは、LLM(大規模言語モデル)へのリクエストやレスポンス、中身のログ・コスト計算などを一元管理するツールです。
- 「誰がいつ、どのプロンプトを投げて、どんな回答が返ってきたか」を可視化
- コスト分析やセキュリティ監査にも役立つ
開発チームでLLMを使う場合に、記録を一括で取れるのは非常に便利です。
LiteLLM:LLM APIの管理
LiteLLMを使うと、OpenAIのAPIキーなどを社内で安全に一元管理できます。
- 複数のAPIキーを1つの“モデル名”に紐づけて、リミット回避を図ることも可能
- 他のLLM(GeminiやLanguageModelAPIなど)も同様に扱え、Roo-Clineが使うモデルをまとめて切り替えられる
実際に僕は無償モデル(例:Geminiの無料モデルを複数登録)を組み合わせて、コストを抑えつつレートリミットを分散させる、といった工夫を行っています。
Coder:リモート開発環境
Coderは、ブラウザ経由でVS Code相当のエディタを使えるリモート開発環境です。
- ソフトウェアをインストールしなくてもURLにアクセスするだけでVS Codeを使える
- 企業の端末ロックダウンが厳しい環境でも導入しやすい
- ローカルのVS Code Remote機能でアクセスすることも可能
僕はCoderのコンテナにRoo-Clineの拡張などをあらかじめ入れておき、開発者に「このURLを開けばすぐAI駆動開発できるよ」という形で提供しています。
3. Roo-Cline導入時の設定ポイント
Roo-Clineを導入しただけでもコード生成は可能ですが、システムプロンプトをきちんと調整しておくと精度や安定性が大きく変わります。
システムプロンプトを最適化する
Roo-Clineは、拡張機能内部でシステムプロンプトという形で事前指示を送り、どういう方針でコードを生成するかを制御できます。
ここでは、実際に僕が使っているシステムプロンプト設定の注意点・工夫を紹介します。
① 利用可能コマンドの工夫
「GHコマンド(gh
)が使用可能」「パッケージのインストールOK」「ただしrm
は使わないで」といった許可・禁止を具体的に書く
gh
コマンドを使えると書いておくと、Roo-ClineがGitHubのIssue管理などを提案した際に認証ループが起こりにくくなります。- 逆に、
rm
コマンドなど破壊的操作は安易に許可しないほうが安全です。実際、僕も過去にrm -rf
を実行されて一瞬でファイルを消され、痛い目を見ました。
② コミットメッセージ形式の工夫
「絵文字 + カテゴリ + タイトル + 本文を推奨」といった独自ルールをプロンプトに指定する
- システムプロンプトに入れておけば、Roo-Clineがコミットする際に一定のスタイルを自動で守ってくれます。
③ 綺麗なコードを書くためのルールの工夫
「同じことを何度も書かない」「変な重複を避ける」「コードの可読性を重視する」等のガイドラインをまとめて、システムプロンプトに与える
- 実際にはプロジェクトごとのルールを記載したMarkdownを作っておき、それをベースに指示を行うと精度が向上します。
④ Issue連携方針の注意点
「GitHubのIssueを自動生成する」オプションを試しているのですが、挙動がまだ実験的で怪しい部分があります
- 変なIssueが量産される可能性もあるため、導入する際はテスト環境などで動作確認するのがおすすめです。
4. 無料LLMを使い倒すためのLiteLLM活用方法
僕は個人の開発や検証をするとき、なるべく費用をかけずにやりたい場面があります。
その場合に便利なのがGeminiの無料キーや**LanguageModelAPI (Copilot API)**などです。
しかし、無償サービスは1つのキーあたりのレートリミットが厳しかったり、リトライ前提だったりと色々と壁があります。
ここでは、僕が壁を乗り越えるために、LiteLLMと組み合わせて行っていることを簡単に紹介します。
Geminiの無料キーを複数紐づける
まずはLiteLLMとGeminiの無料キーを複数紐づけています。
無料Gemini の運用例やポイントを紹介します。
- 同じモデル名に複数のAPIキーを登録しておくと、LiteLLMがリクエスト時にキーをローテーションしてくれます。
- 5個の無料キーを登録すれば理論上5倍のレートリミットを確保できるため、少しまとめてリクエストしても制限に引っかかりにくくなります。
- 1Mトークン近いコンテキストを扱える点が大きく、ウェブ系開発のようにファイル数が多い場合に重宝します。
- ただし、Geminiの無料サーバーは500エラーが頻発することもあるので、Roo-Clineのリトライ設定を手厚くしたり、時間をおいて再試行するのが実運用的です(「トイレ行ってる間に終わるのを待つ」ぐらいの感覚)。
LanguageModelAPI(Copilot API)の運用
LanguageModelAPIの運用例やポイントを紹介します。
- 無料枠でも思ったより使える上、月10ドルほど課金すれば制限をもう少し緩和できるので、安定性とコスパのバランスが良いと感じています。
- Deep seekと比較するとTerraformやPythonのコード生成が得意、かつレスポンスも比較的速い印象です。
- 時間のかかる開発タスクをGeminiに投げ、短いコード修正・確認作業をLanguageModelAPIに投げる、などと割り切ると使い勝手が良くなります。
AI駆動開発でよくある課題と解決策
ここからは、AI駆動開発で直面しやすい課題と、その対策について解説します。
課題:AIにプロジェクト構造を理解させる
Roo-Clineで大規模なプロジェクトを扱う際、問題になるのが「リポジトリ構造や既存の関数をAIがあまり理解していない」点です。
これまでの対策①:すべてを1つのファイルにまとめる
ChatGPTなどの初期からある手法で、プロジェクト全体のコードをひたすらコピペして1ファイルにまとめます。これはコード全体をLLMに認識させやすい利点がある一方、ファイルが巨大化して見づらくなり、生成時間やエラー(リプライ途切れなど)が増加してしまう可能性が高いです。開発規模が大きくなるとほぼ不可能に近いでしょう。
これまでの対策②:ずっと同じチャットでやり取りを続ける
一度起動したチャットに変更点や修正依頼を入力し続けることで、前のやり取りをLLMが多少は覚えている状態を維持できます。しかし、トークン数が膨大になるにつれてモデルのコンテキストが圧迫され、後半で精度が落ちる・意味不明な回答が増える といった問題が発生しやすいです。大容量コンテキストを扱えるモデル(Geminiなど)ならある程度対応できるが、そこにも限界があるでしょう。
このように、対策を行っても課題から逃れられないことが多いのが現状です。ですが、僕はあるアプローチを採用することでこの課題を解決しています。
新しい解決策:Sourcesage というアプローチ
そこで活用できるのが Sourcesage というパッケージです。
プロジェクト全体の構造を1つのMarkdownファイルに生成し、そのファイルをLLMに与えることで、「どのディレクトリにどんなファイルがあり、どんな関数が定義されているか」といった情報を一括で共有できます。
- リポジトリ全体のツリー表示
- Sourcesageを実行すると、フォルダツリーや主要なファイルの内容が一覧化されます。
- これを1つのMarkdownにまとめてRoo-Clineに渡すと、「どのディレクトリにどんなファイルがあるか」をAIがざっくり把握できるようになり、存在しない関数を呼び出す等のミスが減ります。
- 指示の効率化
- 1つの巨大ファイルに全部詰め込む方法や、同じチャットログを延々使い続ける手法には限界があります。
- Sourcesageなら、最初に全体の構造を説明し、その後個別ファイルの修正指示を行う、といった流れが非常にスムーズになります。
- 翻訳やリファクタリングにも有用
- 英語ベースのリポジトリをまとめて日本語で概説させたり、リファクタリング対象を特定しやすくなるメリットもあります。
まとめ
Roo-Clineを中心に据えたAI駆動開発の環境構築と、運用におけるポイントを一通り解説しました。AIエージェントの自動コード生成能力を活かしながらも、Langfuseでログを可視化して監査やコスト管理し、Coderでブラウザから手軽にアクセスできるリモート開発環境を整えれば、全体の生産性が向上することができそうです。
まだまだ発展途上の技術ではありますが、早期から仕組み化して運用ノウハウを蓄積することで、これからの開発スピードを左右するポイントになるので、興味がある方はぜひ一度試してみてください。
1. 本記事は、2025年2月5日(水)に開催されたイベントの内容を元に編集したものです。
発表のアーカイブ動画については、以下のリンクからご覧いただけます。
アーカイブURL: https://findy-code.io/events/TNq4ufZwlRGFr