Android アプリに Gemini の機能を追加する

1. 始める前に

Firebase AI Logic を介した Gemini Developer API を使用すると、Gemini ファミリーの生成 AI モデルにアクセスできます。これまで実現できなかった新しいエクスペリエンスを構築できるようになります。

この Codelab では、Jetnews アプリに要約機能を追加するプロセスについて説明します。Jetnews は、compose-samples リポジトリの一部である Jetpack Compose で構築されたニュース読み取りアプリです。

JetNews アプリの活用例

この Codelab では、次のことを行います。

  • Google AI Studio でニュース記事を要約するためのプロンプトを作成します。
  • Firebase AI Logic SDK を Jetnews に統合します。
  • 記事ビューの上部に [Gemini による要約] セクションを追加し、下部のバーに「要約」ボタンを追加します。

7eee9f1dcad682c.png

Gemini API を活用した要約機能が搭載された Jetnews アプリ。

前提条件

  • Kotlin の基礎知識があること
  • Android Studio の使用方法と Android API レベル 23 以降を搭載したエミュレータまたは実機でアプリをテストする方法に精通していること
  • Firebase にアクセスするための Google アカウント

2. プロンプトを設計する

プロンプトとは、Gemini API を介してアプリから Gemini モデルに送信されるメッセージです。テキスト、画像、音声、動画ファイルを含めることができます。

特定のユースケースにとって理想的なプロンプトを作成することは、科学というよりは芸術に近く、多くの場合、何度か試してみる必要があります。Google AI Studio は、生成 AI モデルのプロトタイピングとテストを短時間で行える Google のツールであり、プロンプトを作成する場合に役立ちます。

この Codelab では、技術的な記事の内容を 4 つの箇条書きに要約します。このプロンプトでの目標は、関連性が高く、マークダウンの書式設定のないプレーン テキストの要約が生成されるようにすることです。

何度か繰り返すうちに、特に効果的なプロンプトが見つかるでしょう。たとえば、次のようになります。

Summarize the core findings of the following article in 4 concise bullet points. Ensure each bullet point is specific, informative and relevant. Return just the bullet points as plain text. Don't use markdown.

[article body]

出力に問題がなければ、Gemini API を Android アプリに統合できます。

3. コードをチェックアウトする

まず、GitHub からスターター ソースコードをチェックアウトします。

git clone https://github.com/android/codelab-gemini-summary

Jetnews アプリは、大小を問わずあらゆるモバイル デバイスに合わせてスケーリングできるようにゼロから設計されています。Android アーキテクチャのベスト プラクティスを示すサンプルについては、Now In Android をご確認ください。

詳しくは、大型画面をサポートするための Jetnews の実装方法をご覧ください。

Jetnews アプリのソースコードが複雑に見えるかもしれませんが、心配はいりません。Gemini を活用した要約機能を追加するには、GeminiRepositoryImpl クラスのコードを変更するだけです。要約機能をトリガーしてアプリに表示するコードは、すでに実装されています。

最終的な実装

次のブランチをチェックアウトすると、ソースコードの最終的な実装に直接アクセスできます。

git clone https://github.com/android/codelab-gemini-summary
git switch final

Firebase プロジェクトを作成して設定するには、この Codelab のステップ 4 で説明されている手順を行う必要があります。

4. Firebase プロジェクトを設定する

Firebase プロジェクトを作成する

Firebase コンソールで Firebase プロジェクトを作成します。[プロジェクトを作成] ワークフローの最初のステップで新しいプロジェクト名を入力して、新しい Firebase プロジェクトを作成します。基盤となる Google Cloud プロジェクトが自動的に作成されます。

プロジェクトで、AI プルダウンを開き、[AI Logic] を選択します。

[使ってみる] をクリックして Gemini Developer API を有効にすると、無料で、十分な割り当てで利用できるようになります。

最後に、Gemini Developer API を有効にします。

アプリを Firebase に接続する

Firebase プロジェクトを設定したら、Android アプリをそのプロジェクトに接続する必要があります。

  1. Firebase コンソールで、プロジェクトを選択します。
  2. [アプリを追加] をクリックし、[Android] を選択します。
  3. 画面上の手順に沿って、アプリのパッケージ名を指定してアプリを登録します。
  4. google-services.json ファイルをダウンロードし、アプリのモジュール(アプリレベル)のルート ディレクトリに追加します。
  5. 引き続き画面上の手順に沿って、Google サービスの Gradle プラグインと Firebase 部品構成表(BoM)の Gradle 依存関係をアプリに追加します。

注意: google-services.json のソース管理へのコミットは公開しないでください。公開アクセスにすると、自分以外もプロジェクトを使用できるようになり、課金が生じる可能性があります。

5. Gradle のインポートを更新する

Jetnews アプリは、依存関係のバージョンを一元的に管理できる Gradle バージョン カタログ機能を使用しています。

  1. Firebase AI Logic SDK の Gradle インポートを追加するには、libs.versions.toml ファイルに次のように追加します。
    [versions]
    ...
    firebase-bom = "34.4.0" // get the latest version from the Firebase documentation
    
    [libraries]
    ...
    firebase-bom = { module = "com.google.firebase:firebase-bom", version.ref ="firebase-bom" }
    firebase-ai = { group = "com.google.firebase", name = "firebase-ai" }
    
    firebase-ai のバージョンを指定する必要はありません。Firebase BoM の最新バージョンを使用すると、Firebase AI Logic SDK の最新バージョンが自動的に指定されます。
  2. build.gradle.kts を更新します。
    implementation(platform(libs.firebase.bom))
    implementation(libs.firebase.ai)
    
  3. [今すぐ同期] をクリックして Gradle アーティファクトを取得します。

Gradle バージョン カタログを使用したくない場合は、build.gradle.kts でインポートを直接追加できます。

implementation(platform("com.google.firebase:firebase-bom:34.4.0"))
implementation("com.google.firebase:firebase-ai")

6. Kotlin の統合

適切な依存関係が追加されたので、Kotlin コードを更新します。

GeminiRepositoryImpl クラスを開きます。このクラスには、Gemini API を操作するすべてのコードがホストされます。

Gemini モデルの初期化

GenerativeModel をインスタンス化します。

private val generativeModel = Firebase.ai(backend = GenerativeBackend.googleAI())
        .generativeModel(
            modelName = "gemini-2.5-flash",
            generationConfig = generationConfig {
                temperature = 0f
            },
            safetySettings = listOf(
                SafetySetting(HarmCategory.HARASSMENT, HarmBlockThreshold.LOW_AND_ABOVE),
                SafetySetting(HarmCategory.HATE_SPEECH, HarmBlockThreshold.LOW_AND_ABOVE),
                SafetySetting(HarmCategory.SEXUALLY_EXPLICIT, HarmBlockThreshold.LOW_AND_ABOVE),
                SafetySetting(HarmCategory.DANGEROUS_CONTENT, HarmBlockThreshold.LOW_AND_ABOVE),
            )
        )

この例では、Gemini 2.5 Flash モデルにアクセスします。このモデルは、この例のテキスト要約のユースケースを処理できます。使用可能な Gemini モデルの詳細については、Firebase AI Logic のドキュメントをご覧ください。

また、この例では温度値を 0 に設定しています。これにより、一貫性を保ちながら要約を生成できます。モデル構成パラメータの詳細については、Firebase AI Logic のドキュメントをご覧ください。

最後に、この例では、モデルが回答で適切な言語を生成するように、安全性設定を定義します。安全性設定機能の詳細については、Firebase AI Logic のドキュメントをご覧ください。

Gemini を使用した要約

次に、summarizePost() 関数を更新して、パラメータとして渡された投稿を要約します。

最初に、すべてのパラグラフを 1 つの文字列にまとめて投稿のテキストを取得し、モデルに渡します。

val postString = StringBuilder()
for (paragraph in post.paragraphs) {
  postString.append(paragraph.text)
}

この Codelab のステップ 2 で設計したプロンプトに基づいて prompt を作成し、投稿を渡します。

val prompt =
            "Summarize the following article in 4 concise bullet points. " +
                    "Ensure each bullet point is specific, informative and relevant. " +
                    "Return just the bullet points as plain text. " +
                    "Use plain text, don't use markdown. \n $postString"

最後に、プロンプトをモデルに渡して、回答を返します。

return generativeModel.generateContent(prompt).text

実装をテストする

実装をテストするには、Android Studio で [Run app] をクリックし、エミュレータまたは実機に Jetnews アプリをインストールします。

ホームページでいずれかの記事を開き、下部のバーにある要約ボタンをクリックします。

Gemini の要約をトリガーするボタン

記事の上部で、記事のイラストの下に [Gemini による要約] セクションが表示されます。

記事の上部に表示される [Gemini による要約] セクション

Jetnews アプリのアーキテクチャ

Jetnews は、Jetpack Compose の現在の UI 機能を紹介するために作成されました。さまざまな画面サイズをサポートするように実装されています(詳しくは、こちらのブログ投稿をご覧ください)。

この Codelab の目的は、Jetnews アプリのアーキテクチャの詳細を説明することではありません。Gemini の統合の大部分が GeminiRepositoryImpl クラスで行われています。

ただし、ボタンが要約をトリガーする仕組みを確認したい場合は、JetnewsIcons.ktSummaryButton() をご覧ください。PostContent.ktSummarySection() 関数で、要約 UI の UI 実装を確認することもできます。

7. まとめ

この Codelab では、以下の方法を学習しました。

  • Google AI Studio でプロンプトを作成してテストする。
  • Firebase AI Logic SDK を使用するために、Firebase でプロジェクトを設定する。
  • Android アプリで Firebase AI Logic を使用するように Gradle 依存関係を構成する。
  • Kotlin コードから Gemini 2.5 Flash を呼び出す。

Firebase AI Logic の詳細については、Android AI コードサンプルドキュメントをご確認ください。