1. 始める前に
Firebase AI Logic を介した Gemini Developer API を使用すると、Gemini ファミリーの生成 AI モデルにアクセスできます。これまで実現できなかった新しいエクスペリエンスを構築できるようになります。
この Codelab では、Jetnews アプリに要約機能を追加するプロセスについて説明します。Jetnews は、compose-samples リポジトリの一部である Jetpack Compose で構築されたニュース読み取りアプリです。

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

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 アプリをそのプロジェクトに接続する必要があります。
- Firebase コンソールで、プロジェクトを選択します。
- [アプリを追加] をクリックし、[Android] を選択します。
- 画面上の手順に沿って、アプリのパッケージ名を指定してアプリを登録します。
google-services.jsonファイルをダウンロードし、アプリのモジュール(アプリレベル)のルート ディレクトリに追加します。- 引き続き画面上の手順に沿って、Google サービスの Gradle プラグインと Firebase 部品構成表(BoM)の Gradle 依存関係をアプリに追加します。
注意: google-services.json のソース管理へのコミットは公開しないでください。公開アクセスにすると、自分以外もプロジェクトを使用できるようになり、課金が生じる可能性があります。
5. Gradle のインポートを更新する
Jetnews アプリは、依存関係のバージョンを一元的に管理できる Gradle バージョン カタログ機能を使用しています。
- Firebase AI Logic SDK の Gradle インポートを追加するには、
libs.versions.tomlファイルに次のように追加します。 firebase-ai のバージョンを指定する必要はありません。Firebase BoM の最新バージョンを使用すると、Firebase AI Logic SDK の最新バージョンが自動的に指定されます。[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" } build.gradle.ktsを更新します。implementation(platform(libs.firebase.bom)) implementation(libs.firebase.ai)- [今すぐ同期] をクリックして 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 による要約] セクション](https://developer.android.com/static/codelabs/gemini-summarize/img/6799c21d55c26cb5.gif?hl=ja)
Jetnews アプリのアーキテクチャ
Jetnews は、Jetpack Compose の現在の UI 機能を紹介するために作成されました。さまざまな画面サイズをサポートするように実装されています(詳しくは、こちらのブログ投稿をご覧ください)。
この Codelab の目的は、Jetnews アプリのアーキテクチャの詳細を説明することではありません。Gemini の統合の大部分が GeminiRepositoryImpl クラスで行われています。
ただし、ボタンが要約をトリガーする仕組みを確認したい場合は、JetnewsIcons.kt の SummaryButton() をご覧ください。PostContent.kt の SummarySection() 関数で、要約 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 コードサンプルとドキュメントをご確認ください。