# 配布用 Gemini API キー設定ガイド このガイドは、知人配布用 APK に埋め込む **専用 Gemini API キー** を発行・設定する手順書です。 ## なぜ専用キーが必要か 開発用キー(`lib/secrets.local.dart` に設定済み)をそのまま配布 APK に使うと: - APK を逆コンパイルすれば誰でもキーを抽出できる - あなたのクォータ(無料枠)を知らない第三者に使い尽くされる可能性がある - キーを無効化すると開発環境も壊れる **解決策**: 配布専用キーを発行し、Androidパッケージ名で制限する。 --- ## 手順 ### 1. Google Cloud Console で新しい API キーを発行 1. [Google AI Studio](https://aistudio.google.com/) にアクセス 2. 右上のメニューから「Get API key」→「Create API key in new project」 - または既存プロジェクトに追加: 「Create API key」→ プロジェクト選択 3. 発行されたキーをメモ(`AIzaSy...` 形式) ### 2. API キーに制限を設定 [Google Cloud Console API 認証情報ページ](https://console.cloud.google.com/apis/credentials) にアクセス: 1. 作成したキーをクリック → 「キーを編集」 2. **API の制限**: - 「キーを制限する」を選択 - 「Generative Language API」のみ選択 3. **アプリケーションの制限**: - 「Android アプリ」を選択 - 「アイテムを追加」をクリック - パッケージ名: `com.posimai.ponshu_room_lite` - SHA-1 証明書フィンガープリント: (後述) 4. 保存 ### 3. リリース署名の SHA-1 フィンガープリントを取得 配布 APK はリリースキーストアで署名する必要があります。 **キーストアが未作成の場合(Windowsコマンドプロンプト):** ```cmd keytool -genkeypair -v -keystore android\app\ponshu_release.jks -keyalg RSA -keysize 2048 -validity 10000 -alias ponshu_key ``` パスワードを設定し、組織情報を入力。 > ⚠️ **パスワードは安全な場所に記録してください。紛失するとアプリの更新ができなくなります。** **SHA-1 の取得(Windowsコマンドプロンプト):** ```cmd keytool -list -v -keystore android\app\ponshu_release.jks -alias ponshu_key ``` 出力の `SHA1:` 行をコピーして Google Cloud Console に貼り付ける。 ### 4. key.properties にパスワードを設定 `android/key.properties` を新規作成(このファイルは .gitignore に含まれています): ```properties storePassword=あなたが設定したパスワード keyPassword=あなたが設定したパスワード keyAlias=ponshu_key storeFile=ponshu_release.jks ``` ### 5. build.gradle.kts にリリース署名を設定 `android/app/build.gradle.kts` を以下のように変更: ```kotlin import java.util.Properties // key.properties からリリース署名情報を読み込み val keyPropertiesFile = rootProject.file("key.properties") val keyProperties = Properties() if (keyPropertiesFile.exists()) { keyProperties.load(keyPropertiesFile.inputStream()) } android { // ... 既存設定 ... signingConfigs { if (keyPropertiesFile.exists()) { create("release") { keyAlias = keyProperties["keyAlias"] as String keyPassword = keyProperties["keyPassword"] as String storeFile = file(keyProperties["storeFile"] as String) storePassword = keyProperties["storePassword"] as String } } } buildTypes { getByName("release") { signingConfig = if (keyPropertiesFile.exists()) { signingConfigs.getByName("release") } else { signingConfigs.getByName("debug") } isMinifyEnabled = false isShrinkResources = false } } } ``` > key.properties が存在しない場合は自動的に debug 署名にフォールバックします。 ### 6. 配布 APK のビルド ```cmd flutter build apk --release ^ --dart-define=GEMINI_API_KEY=AIzaSy...(配布用キー) ^ --obfuscate ^ --split-debug-info=build\debug-info ``` - `--obfuscate`: クラスや関数名を難読化し、逆コンパイル時に解析されにくくする - `--split-debug-info`: デバッグシンボルを APK 本体から分離して保存(APK サイズ削減) - `build\debug-info` フォルダは git 管理外でよい(ローカルに保持しておく) 出力ファイル: `build\app\outputs\flutter-apk\app-release.apk` > 難読化なしの簡易ビルド(動作確認用): > ```cmd > flutter build apk --release --dart-define=GEMINI_API_KEY=AIzaSy...(配布用キー) > ``` ### 7. Pro版のビルド(オプション) Pro版機能を有効化したAPKをビルドする場合(パッケージ名は `com.posimai.ponshu_room_lite` のまま変わりません): ```cmd flutter build apk --release ^ --dart-define=GEMINI_API_KEY=AIzaSy...(配布用キー) ^ --dart-define=IS_PRO_VERSION=true ^ --obfuscate ^ --split-debug-info=build\debug-info ``` --- ## 配布方法 ### Google Drive 経由(推奨) 1. `app-release.apk` を Google Drive にアップロード 2. 共有リンクを知人に送付 3. 受信者は Android の「設定 > セキュリティ > 提供元不明のアプリ」を有効化してインストール ### LINE で直接送信 1. APKファイルをLINEのトーク画面にドラッグ&ドロップ 2. 受信者がファイルをタップしてインストール ### adb 直接転送(テスト時) ```cmd adb install build\app\outputs\flutter-apk\app-release.apk ``` --- ## API クォータ管理 | 設定 | 推奨値 | 説明 | |------|--------|------| | 1日あたりのリクエスト上限 | 100〜200 | Google Cloud Console → API → クォータで設定 | | 無料枠 | 1,500回/日 | Gemini 2.5 Flash 無料枠 | Google Cloud Console で **アラート** を設定しておくことを推奨: - 「APIs & Services」→「Gemini API」→「クォータ」→「アラートの設定」 --- ## チェックリスト - [ ] 配布用 API キーを Google AI Studio で発行 - [ ] API 制限: Generative Language API のみ - [ ] アプリ制限: `com.posimai.ponshu_room_lite` の SHA-1 - [ ] リリースキーストア(`ponshu_release.jks`)を作成 - [ ] `android/key.properties` にパスワードを設定 - [ ] キーストアと key.properties が `.gitignore` に含まれていることを確認 - [ ] `flutter build apk --release --dart-define=GEMINI_API_KEY=<配布用キー> --obfuscate --split-debug-info=build\debug-info` で APK ビルド - [ ] テスト端末でインストール・動作確認 --- **Last Updated**: 2026-02-16