ヘルシカ、デリッシュキッチンで Android アプリの開発を担当している岡田です。
時代の流れは早いもので、日々の開発業務で AI のサポートを受けることが当たり前になってきましたね。
今回は Android Studio Narwhal Feature Drop Canary 4 以降に Android Studio Gemini の Agent Mode
がついに追加されましたので、
Gemini の rules
設定と合わせて見ていきたいと思います。
この記事が、皆さんの開発体験を向上させる一助となれば幸いです。
Agent Mode
とは
まず、今回の目玉機能である「Agent Mode
」から詳しく見ていきましょう。
これまでの Android Studio Gemini は、私たちが書いたコードの一部を選択して「この処理をリファクタリングして」と依頼したり、
チャットウィンドウで「〇〇の実装方法を教えて」と質問したりする、いわば「指示待ち」の優秀なアシスタントでした。
この機能は Chat Mode として残っています。
新しく登場した Agent Mode
は、その名の通り「エージェント(代理人)」として、より能動的かつ自律的に動作します。
Google Developers 公式ドキュメントでは、以下の通りに紹介されています。
Android Studio のエージェント モードの Gemini は、Gemini とのチャットだけではできない、複雑なマルチステージ開発タスクを処理するように設計されています。 大まかな目標を記述すると、エージェントが計画を作成して実行し、必要なツールを呼び出して複数のファイルに変更を加え、バグを反復的に修正します。 このエージェント支援ワークフローにより、複雑な課題に取り組んで開発プロセスを加速できます。
複数回のやり取りを通じて、Project 全体の構造やコードベース、依存関係、さらには設計思想まで深くコンテキストを理解し、ファイルやモジュールを横断して、より文脈に沿った的確なサポートを提供してくれるのです。
これまで複数の手順に分かれていた複雑なタスクを、一度の指示で実行できるようになります。
機能単位での実装
「アプリのホーム画面に、トピックのリストに移動する "フォロー" という新しいボタンを追加して」といった自然言語での指示から、必要な ViewModel、Composable 関数、Navigation の設定、さらには Unit Test の雛形まで、複数のファイルにまたがって生成・修正を提案してくれます。
高度なリファクタリング
「<composable name>
コンポーザブルで、<modifier name>
修飾子のパディングを減らしてください」といったリファクタリング作業も、コード差分を明示しながら行なってくれます。
複雑なエラーの根本解決
「Project のビルドエラーを修正」などのプロンプトを使用してエージェントにビルドエラーの修正を依頼すると、推奨される修正が適用され、Project がビルドされてソリューションが検証され、問題が解決するまで反復処理されます。 根本原因を推測し、より堅牢な設計への改善案まで提示してくれます。
他にも Google Developers 公式ドキュメントにて、ユースケースについて記載されていますので、合わせてご覧いただけると幸いです。
Agent Mode
を使った実装の例
例として、テスト用の Project へカレンダー画面を作成してみましたので、その記録を以下に示します。
まずは Agent Mode
を選択し、カレンダー画面を作成する旨を伝えます。
この時、@MainActivity
と記載することで、明示的に MainActivity
をコンテキストとして指定しています。
Gemini が CalendarScreen.kt
というファイルに CalendarScreen
という名の Composable 関数の作成案を提示してくれました。
ここで左右の矢印アイコン、Open in Diff View を選択すると、Diff View を見ることが可能です。
選択肢には Accept Change
, Reject Change
, Auto-Approve
の 3 つがあります。
Accept Change
はこの提示された変更を許可します。今回の場合は Diff View で明示された変更が実行されます。Reject Change
はこの提示された変更を拒否します。Auto-Approve
はこの後に提示される変更を自動許可します。変更履歴は Gemini に常に表示されますが、ユーザの確認無しに一気に作業が実行されます。
今回は Auto-Approve
を選択しました。その後、数回のエラー・警告解消のやり取りを通して出力されたものが以下になります。
デザインを見ると、確からしいものが出来ています。
正直人間がコードを見るとリファクタしたくなると思いますが、0-1 を行ってくれるのは大幅な作業短縮になる場合があります。
また今後、コーディング作業の大半を Gemini に任せるのであれば、もしかしたらリファクタリングは必要ないのかもしれません。
これはあくまで個人の感想ですが、AI にコーディングを任せる上で、「ある程度のブラックボックス化されたコードを黙認すること」に人間が慣れなければいけないのかもしれないなと思っています。
まだ全てを Agent に任せることは難しいですが、簡単なリファクタなどから仕事を任せてみてはいかがでしょうか。
rules
設定について
Agent Mode
の能力を最大限に引き出すために不可欠なのが、rules
(ルール) の設定です。
これまでは、Gemini に対して毎回「日本語で回答して」、「Compose で書いて」などといった前提条件を伝える必要があり手間でした。
しかしこのrules
を設定することで、前提条件をコンテキストとして Gemini に恒久的に教え込めます。
この機能は Android Studio の Settings > Tools > Gemini > Prompt Library
から設定できます。
rules
の Scope について
Gemini の rules
は、IDE 全体に適用される設定と、特定の Project のみに適用される設定の 2 つのレベルで Scope を管理できます。
IDE 設定(グローバルルール)
どの Project を開いても適用される、開発者個人の好みや、組織全体で共有したい普遍的なルールを設定します。
Project 設定(Project 固有ルール)
その Project に特化したルールや制約、背景情報を定義します。チーム開発での利用が主目的です。
各設定の優先度
基本的には、Project 固有のルールが IDE のグローバルルールよりも優先されます。以下はその例です。
例) IDE 設定と Project 設定の優先度
IDE 設定の rules
のみに「Always respond in 日本語 with utf-8 encoding.」と記述した場合、日本語で出力してくれます。
上記に加え、Project 設定の rules
に「Always respond in English.」と記述した場合の出力は英語となります。
rules
に何を書くべきか
IDE 設定の rules
基本的には Project 設定の rules
が優先されるため、本当に汎用的なものを記載するのが良いと思います。
- 「Always respond in 日本語 with utf-8 encoding.」
Project 設定の rules
Project 設定の rules
には、Project の憲法となるような、具体的で明確な指示を記述することになると思います。
1. コーディング規約・スタイルガイド
- 「コメントは日本語で記述すること」
- 「Jetpack Compose の UI は、Google の公式マテリアル3デザインガイドラインに従うこと」
- 「マジックナンバー(説明のない数値リテラル)は使用せず、
companion object
内で定数として定義すること」
2. 技術スタック(使用ライブラリやアーキテクチャ)の指定
- 「アーキテクチャは MVVM を採用する」
- 「状態管理は
ViewModel
とStateFlow
を使用する。LiveData は新規に採用しない」 - 「DI(Dependency Injection)には Hilt を使用する。Koin は使用しない」
- 「非同期処理は Kotlin Coroutines を使い、RxJava は使用しない」
- 「画像読み込みには Coil ライブラリを使用する」
3. Project の背景や目的
- 「このアプリは、IT 初心者向けの学習アプリです。コメントやドキュメントは、専門用語を避け、平易な言葉で記述してください」
- 「ターゲットユーザーは高齢者です。そのため、フォントサイズは大きめに設定し、クリック可能な領域も広く取るようなUIを心がけてください」
4. 禁止事項やアンチパターン
- 「Activity や Fragment 内で直接ネットワーク通信や DB アクセスを行わず、必ず Repository 層を介して行うこと」
- 「XML レイアウトでは
findViewById
は使用せず、常に ViewBinding を使用すること」 - 「Composable 関数内で重い処理を実行しないこと。必要であれば
rememberCoroutineScope
や副作用 API を適切に使用する」
これらのルールは、使用感や Project の成長に合わせてチームで議論し、変更していくことが重要だと思います。
例えば、「Gemini を使用している中で MVP アーキテクチャで回答が提示されたら、ルールに "アーキテクチャは MVVM を採用する"
を追記する」といったフローで改善してくことになると思います。
弊社も rules
は試行錯誤中ですが、記載内容を更新する度に求める回答に近づいている良い感覚があります。
まとめ
今回は Android Studioに搭載された Agent Mode
と rules
設定について紹介させていただきました。
まずは最新の Android Studio Preview を導入し、簡単な rules
からでも設定していただけると幸いです。
Gemini を「優秀なアシスタント」から「信頼できる開発パートナー」へと育て上げ、次世代の開発体験を楽しみましょう!