Roo Code + Memory BankでRAGツール作ってみました
はじめに
LLM(大規模言語モデル)を使った開発支援のツールが色々出てきていますが、今回はその一つ「Roo Code」と「Memory Bank」を使って CLI ツールを開発してみました。
成果物は、ドキュメントを翻訳・要約・検索できるシステムを作ること。
開発中に感じたこと・気づいたこと・うまくいったこと・いかなかったことなどを、記録としてまとめておきます。
この開発で得られた気づきや「次はこうしたい」と思ったことをまとめてみます。
作ったもの
Web上にある公式ドキュメントを収集し、CLIツールで以下の処理を行います。
- Markdownへの変換
- 翻訳(Google Gemini)
- 要約(同上)
- ローカルファイルの対応も今後予定
閲覧するためのuiはWebを用意しています。
処理結果は整理されたディレクトリ構成で保存し、以下の機能を備えています。
- 翻訳前・翻訳・要約の閲覧
- 検索
- RAG
Roo Code使用箇所
主にcli領域をroo codeでモデルgeminiを使用しました。
web領域はさほどroo codeは使用していません。v0に作成してもらってからは、自力、github copilot、またはo3-mini-highで実装しました。
Claudeはコストが気になって、切り札的な使用に留めています。
開発フロー:LLMとの協調による設計主導
開発の進め方は以下の通りです:
- 要件定義(ChatGPT 4oと対話しながら整理)
- 技術選定・ファイル構成の設計 (ChatGPT 4o)
- 不明点の解像度UP (ChatGPT 4o)
- 仕様書の生成依頼 (ChatGPT 4o)
- 開発順序の策定 (ChatGPT 4o)
- Roo Code + Memory Bank で実装フェーズに移行(Gemini、deepseekr1/chat、claude sonnet 3.7)
- 進捗の更新やドキュメントの更新
使用したMemory Bank系コードはこちら:
- CLI側: roo-code-memory-bank
- Web側: RooFlow
ドキュメント
.roo/docsフォルダに作成した要件定義や、仕様・設計書を置いています。
以下は、Google Gemini API のレートリミット制御を実装するときに作成した設計書です。
進捗の管理
進捗の管理は以下のような内容で管理しました。roo codeがこのファイルに✅️や内容の記載をしていきます。
試してみたかったことと結果
作りたかった機能が実現できたか?
→ 概ね実現できた。満足。
詳細設計があれば納得したコードが生成できるか?
→ 普通。
LLMモデルの性能の良し悪しだと、思いますがClaude sonnect 3.7では概ね満足です。1ファイルで完結するようなコードだと満足度も上がった印象です。
お金が許せばリファクタリングもじゃぶじゃぶさせたいです。
高凝集・疎結合なコードにできたか?
→ 満足できず。
事前に構成や責務を設計していても、Geminiを使うとスパゲッティ気味に。
設計通りに進めたつもりが、途中でコンテキストが抜けて意図がぶれる感覚がありました。
あと提案されたコードを「reject」するとさほど悪くない流れを分断して、別道に逸れる不安もありました。
Memory Bank の効果は?
→ 「外しにくくなる」効果はあるかもしれない。事前に作成した計画には則ってくれた印象
Memory Bankを使用してない開発をさほどしていないので比較ができていません。
ただ作業中、Memory Bankがあまり読み込まれていなさそうだな、という局面があったのですが、その感覚値の元、planモードやarchitectモードで動作でもコンテキストの把握はできそうという印象を持ちました。
試して感じたこと
設計書を用意して読んでもらえればコンテキストとして把握してくれている印象はある
使用技術、DBスキーマ構成、フォルダ構成、ファイル役割等を用意しておくのは必ず必要そうと感じました。sqlite3と記述しておけばmysqlやpostgresqlを使用したコードの生成なんてことはなかったです。
設計共有と文脈保持にはコストがかかる
設計を詳細に伝えてから生成を任せて少ないラリーで完結するのは理想的です。
もちろんそう上手くいかないケースもあり、やりとりが続くと文脈が抜け落ちていき、途中から意図しない設計にズレていく不安もありました。
今回使用したMemory Bankが用意する「フロー」は開発体験は悪くない
RooFlow(Memory Bank)が用意するフローを簡単に言うとアーキテクトモード(計画) -> コードモード(実装) -> ドキュメントの反映・進捗を記録のような流れで進みます。作業のお約束があるのはやりやすい印象はあります。
次回に向けた改善ポイント
「ちゃんと設計してから生成を依頼すれば、良いコードが出てくるのでは?」という前提のもと、今回は仕様書を作成し、実装の解像度を上げるために具象的な内容まで盛り込みました。
ただ次回は、インターフェースの設計にもっと重きを置いて、そのうえでコード生成を依頼してみたいと考えています。
そうすることで、全体の構成や設計の方向性がより一貫性のある、納得感のあるものになるのではと期待しています。
おわりに
現時点ではclaudeありきのツールでした。お金がかかりますね。
以下の発表の内容がシンパシー感じます。
ツールの機能的にはまだ改善もあるので気が向いたときに更新していきます。
Discussion