Roo CodeからClaude Codeへの移行 — カスタムモードの引き継ぎ方
Roo Codeのカスタムモード(roleDefinition・groups・.roomodes)をClaude CodeのOutput styleとSub-agentsにどう分けて移すかを、対応表と設定例で整理しました。
はじめに
Roo CodeはVS Code拡張として動くコーディングエージェントで、チャットボックスからモードを切り替えて振る舞いを変えられる点が特徴です。この「カスタムモード」を検索してClaude Codeへの移行先を探すと、1対1で対応する機能が見当たらず戸惑います。実はいちばん近い移行先はclaude --agent(またはagent設定)です。sub-agentsのドキュメントには「--agent <name>を渡すと、メインスレッド自体がそのsub-agentのシステムプロンプト・ツール制限・モデルを引き継いだセッションが始まる」と明記されており、これはRoo Codeのカスタムモードと同じく会話全体の人格とツール権限を同時に切り替える動きです。本記事はRoo Codeのカスタムモード定義(roleDefinition / groups / .roomodes)を、--agent / agent設定を第一の移行先としながら、Output styleとSub-agentsへどう振り分けるかを実例で示します。
カスタムモードの移行先を選ぶ
Roo Codeのカスタムモードはslug / name / description / roleDefinition / whenToUse / customInstructions / groupsという1セットのプロパティで、モードを切り替えるとチャット全体の人格とツール権限が同時に変わります。Claude Codeでこれに最も近いのは--agentフラグまたはagent設定です。会話を続けたまま口調だけ変えたいときはOutput style、作業を切り出して委任したいときはSub-agentsを使う、という位置づけで整理すると実務上の判断がしやすくなります。なお両者の切り替えタイミングには違いがあり、Roo Codeは会話の途中でモードを切り替えられるのに対し、Claude Codeの--agentはセッション起動時に指定するもので、会話の途中で切り替える機能ではありません。
| Roo Codeの役割 | Claude Codeでの対応 | 効き方の違い |
|---|---|---|
| モード切り替え(会話全体の人格 + ツール権限、両方同時) | Claude Codeでの対応--agent <name> / agent設定 | 効き方の違いセッション起動時に指定し、そのセッション全体に効く。途中で切り替えるものではない(resume時は引き継がれる) |
| 人格・トーンだけを変えたい(roleDefinition / customInstructions) | Claude Codeでの対応Output style | 効き方の違いセッション全体の応答スタイルを変える。ツール権限は変わらない |
| ツール制限・タスク委任(groups / whenToUse) | Claude Codeでの対応Sub-agents(通常呼び出し) | 効き方の違い独立したコンテキストで実行し、要約だけを返す。メインの会話は別作業を続けられる |
判断基準は「会話全体の人格とツール権限をまとめて切り替えたいのか」「口調だけ変えたいのか」「作業を切り出して任せたいのか」です。Roo Codeのカスタムモードをそのまま移すなら--agent / agent設定が第一候補で、ドキュメント執筆用の口調を保ったまま対話を続けたいだけならOutput style、コードレビューのような独立したタスクを都度実行したいならSub-agentsの通常呼び出しが近い挙動です。Output styleとCLAUDE.md・Skillsとの使い分け自体に迷う場合はClaude Codeのoutput styleとCLAUDE.md・Skillsは何が違うかも参照してください。
roleDefinitionとcustomInstructionsをOutput styleに移す
会話全体の人格とツール権限をまとめて--agentへ移すのではなく、口調だけを切り替えたい場合はOutput styleが対応先になります。Roo CodeのroleDefinition(人格の定義)とcustomInstructions(振る舞いの追加指示)は、Claude CodeのOutput styleのMarkdown本文にそのまま対応します。
customModes:
- slug: docs-writer
name: "Documentation Writer"
roleDefinition: "You are a technical writer specializing in clear documentation."
whenToUse: "Use this mode for writing and editing documentation."
customInstructions: "Focus on clarity and completeness in documentation."
groups: ["read", "edit"]---
name: Documentation Writer
description: Focus on clarity and completeness in documentation.
keep-coding-instructions: false
---
You are a technical writer specializing in clear documentation.
Focus on clarity and completeness in documentation.descriptionはRoo Codeの同名フィールドと同じくUI上の説明文として使われます。keep-coding-instructionsはRoo Codeには無い概念で、Claude Codeのソフトウェア開発向け既定指示を残すかどうかを決めるフィールドです。ドキュメント執筆のように非エンジニアリング用途のモードならfalseのままにし、コーディングの進め方は変えずに口調だけ変えたい場合はtrueにします。Output styleの切り替えは/configから行い、選択は.claude/settings.local.jsonに保存されます。書き方の全体像はClaude Code output styleの切り替えは/configで行うを参照してください。
groupsをSub-agentのtools/permissionsに移す
Roo Codeのgroupsはモードが使えるツールカテゴリ(read / edit / command / mcp)を配列で指定します。Claude CodeのSub-agentもtoolsフロントマターで同じ発想の制限ができます。
---
name: docs-writer
description: ドキュメントの執筆・編集を行う。Markdownファイルの新規作成や既存ドキュメントの更新を頼まれたときに使う。
tools: Read, Grep, Glob, Edit
model: sonnet
---
あなたはドキュメント作成に特化したライターです。明快さと網羅性を重視してください。Roo CodeのwhenToUseは、Sub-agentのdescriptionにそのまま相当します。どちらも「このモード(エージェント)をいつ使うべきか」を自動判断の材料にする点が共通していて、Claude CodeはこのDescriptionを読んでタスクの委任先を決めます。
Roo Codeのモード選択が「今の会話をこのモードに切り替える」動作であるのに対し、Claude CodeのSub-agent呼び出しは「このタスクだけ切り出して別のコンテキストで実行し、結果を持ち帰る」動作です。会話全体を持ち替える必要はなく、メインの会話は別の作業を続けられます。この違いはRoo Codeからの移行者が最初につまずくポイントです。
ファイル種別の制限(fileRegex)に完全な代替はない
Roo CodeのgroupsはeditグループにfileRegexを付けることで、「Markdownファイルしか編集できないモード」のような細かい制限を作れます。
groups:
- read
- - edit
- fileRegex: \.(md|mdx)$
description: Markdown files onlyClaude CodeのSub-agentのtoolsフィールドはツール名単位(Read / Edit / Bash等)の制御で、fileRegexのようなツール内のパス正規表現制限はfrontmatterだけでは組めません。もっとも近い代替は、Sub-agent専用のhooksフィールドでPreToolUseイベントにマッチャーを書き、Editツール呼び出しのパスが正規表現に一致しない場合はexit code 2でブロックするフックを持たせる方法です。設定はRoo Codeより1段階手間が増えますが、任意の正規表現でファイル種別を絞り込める点は同等です。プロジェクト全体に効かせるだけでよい場合は、.claude/settings.jsonのpermissions.denyにEdit(./**/*.ts)のようなグロブルールを書くほうが簡単です。
組み込みモードの対応関係
カスタムモードだけでなく、Roo Code標準の5つの組み込みモード(Code / Ask / Architect / Debug / Orchestrator)にもClaude Code側の対応先があります。
| Roo Code(組み込み) | ツールアクセス | Claude Codeでの対応 |
|---|---|---|
| Code(既定) | ツールアクセス制限なし | Claude Codeでの対応Claude Codeの通常セッション(既定の権限モード) |
| Ask | ツールアクセスread / mcpのみ、編集不可 | Claude Codeでの対応planモード(読み取り専用で調査・質問に答える) |
| Architect | ツールアクセスread / mcp + 編集はMarkdownのみ | Claude Codeでの対応--agentでMarkdownのみ編集可能なsub-agentをセッション全体に適用、または同じ制限のSub-agentを通常呼び出し(いずれもfileRegex相当の細かい絞り込みはhooksでの自作が必要) |
| Debug | ツールアクセス制限なし(体系的なトラブルシューティング用の指示) | Claude Codeでの対応デバッグ専用のSub-agentを自作(descriptionに「バグ調査を頼まれたときに使う」と明記) |
| Orchestrator(Boomerang) | ツールアクセス直接のツールアクセスなし、new_taskで他モードに委任 | Claude Codeでの対応Claude Codeの標準動作そのもの(メイン会話がAgentツールでSub-agentにタスクを委任する) |
Debugモードを自作するときは、Roo Codeの既定Debugモードが持つ「原因を分析し、可能性を絞り込み、ログを足し、修正前に確認する」という手順をそのままSub-agentのMarkdown本文に書き写すと、体験の再現度が上がります。
とくにOrchestratorモードは注目に値します。Roo Codeでは複雑なタスクを分解して他のモードに委任するために専用モードへ明示的に切り替える必要がありますが、Claude Codeではメインの会話が最初からこの役割を持っており、必要に応じて自動的にSub-agentへタスクを委任します。Orchestratorモードを常用していた場合、Claude Code移行後は専用モードへの切り替え操作自体が不要になり、普段の会話で複雑なタスクを渡すだけで同じ分解・委任の動きが起こります。
モード別ルール(.roo/rules-{slug})の移し方
Roo Codeはモードごとに.roo/rules-{slug}/*.md(プロジェクト)や~/.roo/rules-{slug}/(グローバル)という専用ディレクトリを持ち、そのモードが有効なときだけ追加の指示を読み込みます。Claude CodeのSub-agentにはこの「モード専用ルールディレクトリ」に相当する仕組みはなく、代わりにSub-agent自身のMarkdown本文に直接書き込みます。複数のルールファイルに分けていた場合は、Sub-agentのfrontmatterにあるskillsフィールドで該当するSkillを指定し、Sub-agent起動時にまとめて読み込ませる形に整理できます。
全モード共通のルール(.roo/rules/*.md、フォールバックは.roorules単一ファイル)は、Claude CodeではCLAUDE.mdまたは.claude/rules/*.mdにそのまま対応します。グローバル版(~/.roo/rules/)は~/.claude/rules/が対応先です。
Roo Codeにはこれとよく似た別の設定として、Promptsタブから設定する「Global Custom Instructions(全モード共通のカスタム指示)」もあります。こちらはファイルではなく設定画面から入力する形式ですが、内容の性質は.roo/rules/と同じく全モード共通です。Claude Codeへ移す際は、~/.claude/CLAUDE.mdにテキストをそのまま書き写せば同じ効果になります。
設定ファイルの置き場所の対応
| Roo Code | Claude Code |
|---|---|
.roomodes(プロジェクト、YAML/JSON) | Claude Code.claude/agents/*.md(プロジェクト、1ファイル1モード) |
~/.roo/custom_modes.yaml(グローバル) | Claude Code~/.claude/agents/*.md(グローバル) |
.roo/rules-{slug}/*.md | Claude CodeSub-agent本文への直接記述、またはskillsフィールドでのSkill読み込み |
.roo/rules/*.md / .roorules | Claude CodeCLAUDE.md / .claude/rules/*.md |
Roo Codeは1モード1エントリを.roomodesという単一ファイルの配列にまとめますが、Claude Codeは1モード(Sub-agent)につき1ファイルという構成です。モード数が多い場合は、.claude/agents/配下にサブディレクトリを切っても識別に影響しないため、agents/writing/docs-writer.mdのように分類して整理できます。Sub-agentの詳しい設計はClaude Code Sub-agents完全ガイドを参照してください。
よくあるつまずき
「Roo Codeのようにモードをワンクリックでエクスポート/インポートしたい」
Roo CodeにはモードをYAMLファイル1本にエクスポートしてチームに共有する機能がありますが、Claude Codeにはこの一括エクスポート機能はありません。Sub-agentもOutput styleも中身はプレーンなMarkdownファイルなので、ファイルをコピーするか.claude/agents/ごとバージョン管理に含めるのが実務上の代替です。
「whenToUseを書いたのにモードが自動で選ばれない」
Roo CodeのwhenToUseはOrchestratorモードのタスク振り分けに使われる補助情報です。Claude CodeのSub-agentもdescriptionを読んで自動委任するかどうかを判断しますが、記述が曖昧だと委任されません。「〜を頼まれたときに使う」のように具体的なトリガー条件を書くと、委任の精度が上がります。
「Output styleとSub-agentのどちらに移せばいいか迷う」
まず確認すべきは「会話全体の人格とツール権限を、Roo Codeのモードと同じようにまとめて切り替えたいか」です。それなら--agent / agent設定が第一候補です。そのうえで「会話は続けたまま口調だけ変えたいか」ならOutput style、「特定の作業だけ切り出して任せたいか」ならSub-agentsの通常呼び出しを選びます。Roo Codeの1つのカスタムモードが複数の性質を兼ねていた場合も、無理に1つの機能にまとめようとせず、性質ごとに分けて作るのが移行後の見通しを良くします。
まとめ
Roo CodeのカスタムモードはClaude Codeでは1対1では対応しませんが、最も近い移行先は--agent / agent設定です。セッション全体がsub-agentのシステムプロンプト・ツール制限・モデルを引き継ぐ点が、モード切り替えで人格とツール権限を同時に変えるRoo Codeの挙動に対応します。会話を続けたまま口調だけ変えたい場合はOutput style、作業を切り出して委任したい場合はSub-agentsの通常呼び出しを使います。roleDefinitionとcustomInstructionsはOutput styleの本文に、groupsとwhenToUseはSub-agentのtoolsとdescriptionに、.roomodesは.claude/agents/*.mdにそれぞれ対応します。唯一きれいに移せないのがfileRegexによるファイル種別制限で、Sub-agent専用のHooksかpermissions.denyのグロブルールで代替する設計判断が必要です。
組み込みモードについては、CodeはClaude Codeの通常セッションに、Askはplanモードにそのまま対応します。Architectだけはread/mcpに加えてMarkdown編集を許すという細かい制限を持つため、--agentかEdit制限付きSub-agentで再現したうえで、fileRegex相当の絞り込みはhooksでの自作が必要です。一方Orchestratorモードは、Claude Codeでは専用モードとして意識する必要が無くなる点が最大の変化です。