7
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

最近プロジェクトでRooCodeを使用する機会があったので、その導入から実際の活用事例、感想をまとめました。

RooCodeとは

RooCodeは、開発向けのAIコーディングアシスタントで、AIモデルに「実際の作業手段」を与えて自動的に開発タスクを進められるようにするツールです。

単なるチャット型ツールよりも「計画→実施→検証」に沿って進める「エージェント性」が強く、仕様作成、コード編集、検索、テスト実行、ドキュメント参照などをAI自らが段階的に計画・実行します。「エージェント型のペアプログラマー」とも言えます。

導入の経緯

当プロジェクトでは、マイクロサービスアーキテクチャによるサービス連携の複雑化により、ソース修正・リファクタリングのコストが増大していました。

また、各種設計書やチャット上に散らばっている情報を探すのにも時間がかかり、仕様確認・テストがなかなか進まないといった課題もありました。

そこで生成AIを使用して作業効率化できないかということで、強力なエージェント機能を持つRooCode拡張機能を導入し、ソース分析やチームが使えるカスタムインストラクションの作成を行いました。

セットアップ

拡張機能のインストール

image.png
まずはVS CodeでRooCode拡張機能をインストールします。

モデル選択

RooCodeでは複数のAIモデルを選択できます。無料で使用できるモデルも存在するようですが、今回は以下のモデルのAPIキーを使用しました。

  • Claude 3.5 Sonnet: コード分析やドキュメント生成など、精度が重要なタスクに最適

トークンについて

RooCodeを使う上で注意が必要なのがトークン消費量です。一つのタスクで大量の処理があると、コンテキストウインドウ(LLMに送信される情報)を逼迫し、異常終了を起こしたり、不正確な情報が生成されます。
特に大規模なコードベースを扱う際は、想定する作業量に応じて十分なトークン量を確保することをおすすめします。

  • 1回のタスクで数万〜数十万トークン消費することも
  • コンテキストウィンドウに収まるよう、対象ファイルを絞り込む
  • 不要なファイル(node_modules、ビルド成果物など)は.rooignoreで除外

私の場合は、Claude 3.5 Sonnetの128,000トークンのコンテキストウィンドウを使用していました。

使い方

基本的なチャットの使い方

RooCodeの基本的な操作は、VSCode上のチャットパネルから指示(プロンプト)を出すだけです。
参照させたいファイルがある場合は、@マークでパスを指定できます。

モード選択

RooCodeには主に3つのモードがあります:

Mode 内容
Ask 質問や確認のみ行い、コード変更は行わない
Architect システム設計や技術選定など、全体的な判断を伴うタスク
Code 実際のコード編集や機能実装

例えば「このAPIのエンドポイント一覧を教えて」という質問にはAsk Mode、「このバグを修正して」という指示にはCode Modeを使います。初めのうちはAskモードで慣れるのがおすすめです。

他にも、バグ調査に強いDebugモード、サブタスクに分解してコンテクスト内のトークン消費を抑えることができるOrchestratorモードも存在します。また、これらを組み合わせたオリジナルのモードを作成することも可能です。

カスタムインストラクション

業務に固有の情報は、カスタムインストラクションとしてMarkdownファイルを登録しておくことで、毎回説明する手間が省けます。

カスタムインストラクションの例

  • APIやバッチのIDの一覧
  • プロジェクト固有の命名規則
  • 使用しているフレームワークやライブラリのバージョン
  • コーディング規約

カスタムインストラクションを増やしすぎると毎回かなりのトークンを消費します。一部の作業でしか使わないような情報はdocs配下などに置き、@マークで参照させるのがおすすめです。

ディレクトリ構造

ざっくりですが、ディレクトリ構造はこのようになっていました。

project-root/
├── .roo/
│   ├── rules/              # カスタムインストラクション
│   └── commands/           # スラッシュコマンド
├── .rooignore              # RooCodeに無視させたいファイル
├── repository-a/
├── repository-b/
├── repository-c/
├── ...
├── repository-z/                  
└── docs/                 # 参照用ドキュメント

スラッシュコマンド

繰り返し行う作業は、コマンドを追加しておけばすぐに実行することができます。これにより、定型作業の効率が大幅に向上します。

コマンドの作成例

.roo/commands 以下にMarkdownファイルとしてスラッシュコマンドを作成します

/analyze-api.md   # API依存関係を分析
/gen-test.md      # 選択したクラスのテストコードを生成
/review-code.md   # コードレビュー観点でチェック

コマンドファイルの例

analyze-api.md
---
description: API依存関係を分析する
argument-hint: [サービスID]
---
#API依存関係
ユーザから指定されたサービスについて概要を説明してください。
概要の目次は以下の通りです。

1. サマリ
2. 依存関係一覧
3. サービス間関連図 (`mermaid` で作成)

# 出力形式
reports/{APIID}-{yyyyMMddHHmmss}/

# 注意事項
....

以下のようにチャット欄で実行できます。

/analyze-api API-AAA

なお、現時点でコマンド名は日本語に対応してないようです。

やったこと

実際試していたことの例です。

API呼び出し整理

APIの依存関係をコードベースで分析させ、レポートを出力させました。
呼び出し元のレポジトリ毎に分割するなど、処理が中断されることなく2~3分で完了するようにプロンプトを調整しました。
人間がチェックするよりはるかに短い時間で正確な内容が出力されていました。

障害対応フローの整理

テストで発見したバグの調査~修正~再テストの流れをフローチャートに起こして、
RooCodeに任せられるステップはどこになるかを出力させました。それを参考にして、新規スラッシュコマンドを作成しました。

設計書と各種IDの一覧

クラウド上に散らばっているドキュメントの一覧を作成し、簡単な説明文を付けさせました。zipで落としてきたフォルダに対してプロンプトを実行します。
この一覧を作っておくことで、RooCodeがソース分析やバグ調査する際に仕様の確認が必要なときは、その文書を参照するように回答させることが可能になります。

使ってみた感想

思考プロセスが見えるのが良い

RooCodeの優れている点は、AIの思考プロセスが逐次表示されることです。
「まずこのファイルを確認して、次にこの関連ファイルを見て...」という流れが可視化されるため、何をしているのか理解しやすく、途中で軌道修正も可能です。
これにより、単なるブラックボックスではなく「一緒に作業している」感覚が得られます。

すぐトークン超過する

大規模なコードベースでは、あっという間にトークンを消費します。
特に「プロジェクト全体を分析して」のような広範囲な指示は、数十万トークンを消費することもあります。
以下のような対策が有効です。

  • 分析対象を絞り込む(特定のディレクトリやファイルパターン)
  • 段階的に進める(まず概要把握→詳細分析)
  • ソースコードや設計書を分割して少しづつ分析させる
  • 定期的にコンテキストをリセットする

トークンを消費しつづけていると起こる問題

RooCodeに質問し続けていると、だんだん簡単な質問にも答えられなくなることがあります。

  • 生成されたログの現在日時が、実際とずれている
  • 日本語のドキュメントで、文字化けが発生

このような事象が発生した際は、コンテキストクリアPC再起動をすることで解消できました。カスタムインストラクションにタイムゾーンやエンコーディングの情報を明記することで、ある程度予防できるかもしれません。

参考

7
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?