
こんにちは!LayerXモバイルエンジニアのさかいです!バクラク申請・経費精算のモバイルアプリを作っています。
最近はAI x エンジニアリングに興味があります。FlutterKaigi 2025でAI x E2Eに関して話すので、ぜひ遊びにきてください!
突然ですが、AIのチーム導入で「個人の活用に留まってしまう」「ノウハウが共有されない」といった課題を感じていませんか?本記事ではモバイルアプリチームのAI活用の一例として取り組んだ、Subagents祭を通じてAI活用をチームの共通知とした流れについてご紹介します。
そもそもSubagentsとは
サブエージェントとは特定タスク用に設計された専門的なエージェントです。独立したコンテキスト、カスタムプロンプト、利用ツールを制御することができます。また、呼び出し方法には自動委任と明示的な呼び出しの2種類があります。
Claude Codeはタスクの実行に適したサブエージェントを自律的に選択し、実行を委任します。サブエージェントは独立して作業を行い、結果をClaude Codeに返します。
参考: https://docs.anthropic.com/ja/docs/claude-code/sub-agents
チームの課題と開催目的
モバイルアプリチームでは、チーム全員が Claude Code を日常的に利用し、各々が自由にサブエージェントを作っていました。これは個人の作業効率を上げるうえで有効でしたが、リポジトリへのマージ基準が曖昧だったり、マージ後の共有も散発的となっていました。結果として、サブエージェントの知識や活用が一部メンバーに偏り、チーム全体の生産性には繋がっていませんでした。目的が不明瞭なサブエージェントが作られたり、作成しても活用されなかったりといったことも起きていました。
そこで、短期集中の「Subagents 祭」を開催しました。目的は個人依存のサブエージェント活用をチームとしての共有知にすることです。
進め方
短期集中で“個人技”を“共有資産”に変えるために、以下のステップで進めました。
1. 個人で作成した Subagents の共有(キックオフ)
初めにリポジトリに未登録のサブエージェントも含めて相互共有します。活用アイデアの洗い出し前に実際の活用例を共有し合うことで、サブエージェントの解像度を高めておきます。各サブエージェントに関して、用途・入出力・使いどころといった内容を紹介し合いました。
2. サブエージェント活用アイデアの洗い出し
次に日常の開発プロセスを起点に、活用できそうな箇所をとにかく列挙します。コーディングに限らず、次のような視点で幅広く洗い出します。
- コーディング/実装
- 仕様/ドキュメント整理
- ワークフロー
- QA/テスト
- データ分析
3. 各自の担当サブエージェントを決定
洗い出した候補から取り組むテーマを絞り、チームメンバー各々の担当を割り振ります。テーマを絞り込みは以下の観点でアウトカムベースで行いました。
- 課題の性質的にサブエージェントが適しているか
- 利用頻度・インパクトが見込めるか
- 担当者の知識/関心と合っているか
今回は次のテーマを一部ご紹介いたします。
- 多言語対応サブエージェント
- 香ばしい実装見つけるくん(テスト不足/複雑度の高い実装を検知)
- 明細仕様マスター(バクラク内で特にドメインが複雑で個人依存が高い明細の知識の一般化)
- PR Description で一句読んでくれるくん
4. 1週間で各自が 1〜2 本を作成
固定時間のハッカソンではなく、1週間の宿題形式で取り組みました。テーマごとに実現難易度が異なるため、固定時間のハッカソン形式だと実現まで至らず、中途半端に終わる可能性があります。そこでこのような形式での開催となりました。
5. デモタイム & ディスカッション(1週間後)
最後にチーム内でのデモ会を開催します。各自が作成物を披露し、次のような観点で情報共有を行いました。
- 実現にあたり苦労/工夫した点
- 改善案のディスカッションと Next Action の明確化
単なるデモだけでなく、過程も共有することでサブエージェント作りへの解像度を高めることができました。また、共通のハマりどころとして、自動委任での呼び出し安定性が課題に挙がりました。
多言語対応サブエージェントをご紹介
今回のSubagents祭の作成物の一例をご紹介します。
なぜ多言語対応サブエージェントを作るのか
これまでアプリチームの多言語対応は次のように進化してきました。
- Cursor を利用したワークフロー
- Claude Code の Slash commands を利用した、明示的呼び出し型ワークフロー
後者(Slash commands)は便利ですが、いくつかの課題が見えてきました。
-
明示的な呼び出しが必要
Slash commandsの明示的な呼び出しのために機能実装と多言語対応それぞれの指示だしが必要となる
-
コンテキスト圧迫問題
指示出しの回数を減らすために機能実装と多言語対応を一連のプロセスとしたいが、多言語対応がコンテキストウィンドウを圧迫してしまうため、スコープを独立させた指示出しが必要
-
精度の低下
機能実装と多言語対応を一度の指示で実行すると、コンテキストが混在してしまうため、機能実装・多言語対応の両方で精度が落ちることがある
そこでサブエージェントとして再定義することで、以下のメリットを得られます。
- Slash commandsの明示的な呼び出しが不要になる
- 多言語対応が独立したコンテキストとなるため、メインエージェントのコンテキストウィンドウを圧迫しない
- 多言語対応をプラン内の独立した1タスクとして実行することができるので、機能実装と多言語対応でコンテキストが混在せず、精度高くタスクを遂行することができる
プロンプト設計
プロンプトはフレームワークやプロジェクトの状況に依存するため、ここではプロンプト設計の方針をご紹介します。
サブエージェントファイルではConfiguration fields、Role, Workflow、Important Notes, Example Usagesといったエージェントが多言語対応タスクを遂行する上で必要な最低限の情報を記述します。多言語対応ワークフローの詳細については以下の@myhoeiの記事をご参照ください。現在チームで運用されている最新のワークフローではありませんが、コーディングエージェントによるワークフロー実行のイメージを掴んでいただくことができます。
https://tech.layerx.co.jp/entry/2025/04/04/130000
サブエージェントが定義できたら、プロジェクトメモリ(Claude.md) に多言語対応に関する方針を明記します。メインエージェントは機能実装に集中し、多言語対応はサブエージェントへ委任する方針を宣言します。これによりメインエージェントと多言語対応サブエージェントの責務が明確となり、両タスクの精度が向上します。
プロンプト例(Claude.md)
### Internationalization
- **Focus on feature implementation and delegate all i18n to ui-text-translator.**
- **Implement the feature with Japanese hard-coded, then perform i18n at the end of the task using ui-text-translator.**
- Always translate all user-facing UI text.
Subagents祭を開催して
Subagents祭では、サブエージェントの用途をチームで擦り合わせ、実現まで一気通貫で取り組むことで、各メンバーがそれぞれのサブエージェントに対する解像度を高めることができました。結果として個人に依存していたサブエージェント作りを脱却し、チームとして推進する一歩目を踏み出せたと感じています。今後評価と継続的な改善に取り組んでいきます。
最後に
本記事で紹介したチームでのサブエージェント整備に関する取り組みが参考になれば幸いです。本記事を読んでいただいて、LayerX・モバイルアプリチームのAI活用やモバイルアプリ開発に興味がある方はカジュアル面談でお話ししましょう!選考に関係ない面談なので情報交換をしたいという方もお待ちしております!