◉GEMINI LABEN
●ARGON — gemini-4-argon が 10/13 に GA。複雑なコーディング・エージェント・数学・科学向けです●DEEP RES — deep-research-pro-preview-12-2025 は 10/23 に停止、残り6日。移行先は deep-research-preview-04-2026●NANO — gemini-nano-banana-2.1 が GA(10/06)。gemini-3.1-flash-image は非推奨で停止日は未発表です●MCP — ツール結果が 8.5万トークンに膨らんだ事例を、ADK で 310 トークンに包んで抑えた報告が出ています●FLASH — gemini-3.7-flash と 3.5-flash は新しい Flash モデルに自動で回されます(10/08)●NEW — クラッシュ報告を毎回ゼロから読ませない — 既知バグ早見表を先に grep し…●ARGON — gemini-4-argon が 10/13 に GA。複雑なコーディング・エージェント・数学・科学向けです●DEEP RES — deep-research-pro-preview-12-2025 は 10/23 に停止、残り6日。移行先は deep-research-preview-04-2026●NANO — gemini-nano-banana-2.1 が GA(10/06)。gemini-3.1-flash-image は非推奨で停止日は未発表です●MCP — ツール結果が 8.5万トークンに膨らんだ事例を、ADK で 310 トークンに包んで抑えた報告が出ています●FLASH — gemini-3.7-flash と 3.5-flash は新しい Flash モデルに自動で回されます(10/08)●NEW — クラッシュ報告を毎回ゼロから読ませない — 既知バグ早見表を先に grep し…
記事一覧/開発ツール
⟐ 開発ツール/2026-04-29上級

Gemini API を Vitest でテストする — TypeScript プロジェクトのモック設計と Function Calling 検証パターン

TypeScript で Gemini API を呼ぶコードを Vitest でテストする実践パターンです。SDK のモック設計、Function Calling とストリーミングの検証、MSW への降ろし方、夜間に実 API を一本だけ通すスモークまで扱います。

gemini-api287vitesttypescript16testingmockfunction-calling20

✦ プレミアム記事

プロンプトを一行直したら、本番のレスポンスが別物になっていた

これは私が個人開発のサイドプロジェクトで実際に踏んだ事故です。商品レビューを Gemini で要約する関数のシステム指示を「箇条書きで 3 点」から「重要度順に 3 点」に変えただけで、出力に含まれる「総合評価」の一文が消え、リリース後しばらく気づかないまま静かに品質が落ちていました。Pytest なら回帰テストの記事はたくさんあるのに、TypeScript 側で同じことをやるための実装例が意外と見つからず、結局その場で書き起こすことになりました。

本稿はそのときの構成を整理したものです。Vitest と @google/generative-ai SDK をどう組み合わせれば、Gemini を呼ぶコードを安心して書き直せる土台ができるのか。Function Calling の検証やストリーミングのテストを、私が普段使っているパターンのままお見せします。

対象は TypeScript で Gemini API を触り始めて数週間〜数ヶ月、テストの土台を整えたい個人開発者の方を想定しています。チーム開発でも、最小構成の出発点として読んでいただけると思います。

なぜ Vitest を選ぶのか — Jest と比べた個人開発者目線

最初にここを書いておきます。Jest でも同じことはできます。ただ TypeScript と ESM 中心のプロジェクトでは、私は Vitest のほうを選びます。理由は三つあります。

まず、ESM サポートが素直です。@google/generative-ai を含む最近の SDK は ESM を前提に設計されていることが多く、Jest だと transform 設定で苦戦するケースがありますが、Vitest はほぼ素のまま動きます。次に、Vite ベースのプロジェクト(Astro、SvelteKit、Remix など)と設定を共有できます。最後に、起動が速く、テスト駆動でプロンプトを試行錯誤する作業に向いています。Gemini を呼ぶテストは比較的時間がかかるので、テストランナー側のオーバーヘッドが小さいのは地味に効きます。

逆に Jest を残す理由がある場面もあります。React Native や、既存の Jest 資産が大きいプロジェクトでは無理に乗り換える必要はありません。本稿のパターンはほぼそのまま Jest にも移植できますので、お手元の環境に合わせて読み替えてください。

✦

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
✦429・503 を意図的に発生させてリトライ上限と即時失敗を固定するテスト設計
✦SDK の戻り値の形が変わってもテストが道連れにならない MSW ハンドラの書き方
✦実 API を一本だけ夜間に通してモデル非推奨と認証失効だけを検知する構成
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Gemini Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

◈ API / SDK2026-05-09
Gemini Live API で画面共有しながら音声で対話する『AI ペアプログラマー』を TypeScript で構築する
Gemini Live API と getDisplayMedia で『画面を見せながら音声で相談できる AI ペア』を TypeScript で構築する手順を、コスト最適化と落とし穴まで含めて実装プレイブックにまとめました。
⟐ 開発ツール2026-09-03
Gemini にコードをまとめて渡せるようになった日から、同じフォルダを選ぶのをやめました
複数のコードファイルをまとめて渡せるようになると、難しさは貼り付けから選択へ移ります。自分の Next.js リポジトリで依存グラフを実測し、フォルダ単位の選び方が呼び出し側を1件も拾わなかった経緯と、いま使っている選択手順を書き残します。
⟐ 開発ツール2026-08-21
通知文の長さ指示が英語版だけ効かなかった理由と、生成後に幅で詰める実装
日英2言語のプッシュ通知を Gemini に生成させたところ、英語版だけが実機で途切れていました。原因は文字数での長さ指示です。表示幅の実測値と、生成後に詰めるフィッティング実装をまとめました。