2026-09-12 更新
Gemini無料キーとGitHub Secretsの設定
Google AI StudioでAPIキーを発行し、GitHub Secretsへ登録する手順と、429エラー時の指数バックオフの扱い。
デルタメモの定期取り込みは、GitHub Actions が RSS とステータスページを取得する。要約の日本語化だけ、任意で Gemini の無料枠に寄せられる。Cursor のチャット枠は使わない。
この記事では、キーの発行と GitHub への登録に加え、無料枠でよく出る 429 への向き合い方をまとめる。キーが無くても取得自体は動く。あると短い要約が整いやすい。
何のためのキーか
GEMINI_API_KEY は、Google の生成 AI(Gemini)をスクリプトから呼ぶための認証情報である。ブラウザの Gemini チャットとは別経路で、Actions 上の Node スクリプトが短い要約文を依頼するときに使う。
リポジトリのコードや Issues にキー本文を書かない。チャットにも貼らない。漏れたら再発行し、古いキーは無効化する。
Google AI Studio でキーを作る
- Google AI Studio の API キー画面 を開く。Google アカウントでサインインする。
- 新しいキーの作成を選ぶ。
- キー名は用途が分かる短い名前でよい(例:
pocket-media-ingest)。 - 紐づける Cloud プロジェクトを選ぶ。一覧に Default Gemini Project があればそれを使う。無い、または取り込み専用に分けたい場合だけ、新規プロジェクトを作成する。
- 作成後に表示されるキー文字列をコピーする。画面を閉じると再表示できないことがあるので、すぐ次の GitHub 登録へ進む。
本業や別プロダクト用のプロジェクトが並んでいても、このメディアの取り込みには使わない。無料枠や利用量が混ざる。
料金や枠の条件は Google 側の案内が優先する。無料枠の上限に達すると、このサイトの取り込みは要約をスキップして原文の切り詰めに戻る実装になっている。
GitHub に Secrets として登録する
Actions から読む秘密値は、リポジトリの Secrets に置く。
- GitHub で対象リポジトリを開く。
- Settings → Secrets and variables → Actions を開く。
- New repository secret を選ぶ。
- Name に正確に
GEMINI_API_KEYと入れる(大文字小文字を含め一致させる)。 - Secret に、AI Studio でコピーしたキーを貼って保存する。
任意で、Actions の Variables に GEMINI_MODEL を置ける。未設定時の既定は gemini-3.6-flash である。モデル名を変えるときだけ Variables を使う。
同じ画面に、Pages デプロイ用の CLOUDFLARE_ACCOUNT_ID や CLOUDFLARE_API_TOKEN が並ぶことがある。用途が違うので混ぜない。Gemini 用は GEMINI_API_KEY だけを追加すればよい。
429 が出たときの考え方
Gemini の HTTP 429 は、「恒久的に使えない」ではなく、いまの枠や共有プール側で受けきれない状態を示すことが多い。少し待ってから再度送ると通る場合と、日次などの上限でその日は通らない場合がある。ログの文言を見て切り分ける。
公開されている整理(例: DataCurrent の 429 対策コラム)では、次のような対策が挙げられる。
- 切り捨て型の指数バックオフでリトライする
- Vertex 側のグローバルエンドポイントを使う
- Priority PayGo や Batch など、有料レーンの消費オプションを使い分ける
このサイトが使うのは Google AI Studio の API キー(無料枠想定)である。上記のうち無料枠でそのまま使えるのは、おおむね 1 のリトライだけである。2 と 3 は Vertex AI/有料の話なので、キー種別が違うと手順も料金も別になる。混同しない。
このリポジトリでの実装
取り込みスクリプトは、429 のとき指数バックオフで数回まで再試行する。既定はおおよそ 2 秒 → 4 秒 → 8 秒(ジッター付き)である。待ち時間や回数は環境変数で変えられる。
| 変数 | 意味 | 既定の目安 |
|---|---|---|
GEMINI_429_RETRIES |
429 の再試行回数 | 3 |
GEMINI_429_BASE_MS |
初回待機の基準(ミリ秒) | 2000 |
GEMINI_429_MAX_MS |
待機の上限(ミリ秒) | 16000 |
分あたりの瞬間的な制限には効きやすい。一方、日次上限(ログに PerDay などが付く類)は、数秒待っても枠は戻らない。その場合は要約をスキップして原文のまま残し、枠が戻ってから ingest を再実行する。
大量の過去分を一度に磨き直すと、無料枠をすぐ使い切る。日常の定期実行は件数を抑えたままにし、まとめ直しは枠に余裕がある時間帯へ分ける。
要約の品質(障害)
英語の障害短報を日本語化するとき、途中切れ・極端に短い文・トークン化けのような壊れた出力は採用しない。不合格なら 1 回だけ書き直し、それでもダメなら英語原文を残す。品質判定そのものはローカル処理なので、API 枠は食わない。
動作確認
Secrets を保存したあと、リポジトリの Actions から ingest ワークフローを手動実行(Run workflow)する。成功して差分があれば、要約付きのコミットが main に入り、続けて Pages デプロイが走る。
キー未設定のままでも ingest は失敗しない。要約だけフィード原文ベースになる。設定後もエラーが出る場合は、キーの typo、プロジェクト側の API 有効化、無料枠の上限を疑う。
ローカルで試す場合
ローカルでも同じキーを使える。シェルで環境変数に載せてから実行する。
# Windows PowerShell の例
$env:GEMINI_API_KEY = "ここにキー"
npm run ingest
.env に書いても、現状の ingest スクリプトは自動では読み込まない。export(または上記のようなセッション変数)が確実である。ローカル用の値をコミットしない。
よくあるつまずき
| 症状 | 確認すること |
|---|---|
| Secret を入れたのに要約が英語のまま/原文のまま | ワークフロー実行ログで gemini: エラーが出ていないか。Name が GEMINI_API_KEY か |
ログに HTTP 429 と短い待機のあと成功 |
瞬間制限。バックオフが効いている。特に追加作業は不要 |
ログに HTTP 429 と日次/quota 系の文言が続く |
無料枠の上限。当日は原文のまま残りやすい。枠復帰後に ingest を再実行する |
| キー作成時にプロジェクト選択を求められる | Default Gemini Project、または取り込み専用の新規プロジェクトを選ぶ |
| キーを再表示できない | 破棄して新規発行し、GitHub Secret を更新する |
| Actions は緑だが要約が変わらない | 新規エントリが無ければコミットも無い。手動実行後も「No new entries」なら正常 |
関連
取り込みの全体像はリポジトリ内 scripts/ingest/README.md を参照する。運用上、日常の巡回は Actions に任せ、チャットエージェントには定期クロールさせない。
429 の一般論は DataCurrent のコラム(2026-06) も参考になる。料金・エンドポイント・Priority レーンの話は Vertex 前提が多いので、AI Studio 無料キーの範囲と読み分ける。