# Nano Banana 2のThinking level設定：MinimalとHighの使い分け

> Nano Banana 2の推論レベルはminimalとhighの2種類。InteractionsとgenerateContentでの指定方法、Geminiアプリとの違い、最終画像の確認、待ち時間と推論料金を含めた比較方法を解説します。

- Source: https://www.aifreeapi.com/ja/posts/nano-banana-2-thinking-level
- Language: ja
- Published: 2026-09-08
- Updated: 2026-09-12
- Publisher: AI Free API (https://www.aifreeapi.com)

Nano Banana 2のThinking levelは、画像を生成する際の**推論レベル**を指定する設定です。現在のモデルIDは `gemini-3.1-flash-image`。モデル別のAPIガイドが示す対応値は **`minimal` と `high`** で、既定値は `minimal` です。Minimalでも推論を一切しないとは限りません。[モデル仕様](https://ai.google.dev/gemini-api/docs/models/gemini-3.1-flash-image)と[画像生成ガイド](https://ai.google.dev/gemini-api/docs/image-generation#controlling_thinking_levels)で確認できます。

最初はMinimalで生成し、配置や文字、参照画像などの条件を満たせないときにHighを比較する、という進め方が使いやすいでしょう。Highを選べば必ず画質が上がる、あるいは一定時間だけ遅くなる、といった保証はありません。見るべきなのは、必要な画像が得られたか、作り直しが減ったか、そのために何秒といくらかかったかです。

以下は2026年9月8日に確認した公式資料に基づく設定と評価の手順です。速度や品質の実測結果を示すものではありません。

## まず、どこで使っているかを確認する

「Thinking」という表示があっても、Geminiアプリの会話モードと画像APIの設定は同じものとは限りません。手元の環境を先に分けると、変更する場所が明確になります。

| 利用環境 | 確認する項目 | 注意点 |
| --- | --- | --- |
| Gemini APIのInteractions | `generation_config.thinking_level` | `minimal` または `high` を指定する |
| Gemini APIのgenerateContent | `generationConfig.thinkingConfig.thinkingLevel`（REST） | SDKではフィールド名が異なる |
| Google AI Studio | 選択中の画像モデルとThinking levelの項目 | 表示項目は画面の状態に依存する。見つからない場合はAPIの設定と混同しない |
| Geminiアプリ | 利用中の画像機能とアプリ側の案内 | 「思考モード」の選択だけで画像APIに `high` が送られるとは判断できない |
| 外部サービスや独自UI | 対応モデル、推論設定の説明、送信内容 | Googleのパラメータがそのまま使えるかはサービスごとに確認する |

AI Studioについては、日本語の[導入記事](https://note.com/npaka/n/ne530e6d8cd18)にMinimal／Highの表示が紹介されています。ただし、手元の画面に同じ項目があることを確認したうえで操作してください。古い記事にある `preview` 付きIDを、現在の安定版IDと取り違えないことも大切です。

## InteractionsでHighを指定する

現在の[画像生成ガイド](https://ai.google.dev/gemini-api/docs/image-generation#controlling_thinking_levels)は、Interactionsの `generation_config` 内で `thinking_level` を指定する例を掲載しています。RESTでは次のように送ります。APIキーを環境変数 `GEMINI_API_KEY` に設定済みであることを前提としたリクエスト例です。

```bash
curl --fail-with-body \
  "https://generativelanguage.googleapis.com/v1beta/interactions" \
  -H "x-goog-api-key: ${GEMINI_API_KEY}" \
  -H "Content-Type: application/json" \
  --data '{
    "model": "gemini-3.1-flash-image",
    "input": "架空の喫茶店のメニュー画像を作成。見出しは朝のセット。料理写真を左、価格を右に配置し、背景は白。",
    "generation_config": {
      "thinking_level": "high"
    }
  }' \
  --output interaction.json
```

Minimalで比較する場合は、`"high"` だけを `"minimal"` に変更します。モデルや入力まで同時に変えると、結果の違いが推論レベルによるものなのか判断しにくくなります。SDKを使う場合も、Interactionsの設定オブジェクトは `generation_config={"thinking_level": "high"}` という形です。

この例で保存する `interaction.json` は、画像ファイルではなくREST APIの応答です。SDKの `interaction.output_image` は最後の生成画像を取得する便利なプロパティで、生のJSONに同じフィールドがあるわけではありません。RESTでは `status` が `completed` であることを確認し、`steps` のうち `type: "model_output"` のステップから `content` をたどって、`type: "image"` のブロックを探します。その `data` がBase64画像データ、`mime_type` が画像形式です。`thought` ステップの要約は完成画像として扱いません。[Interactions APIの応答仕様](https://ai.google.dev/api/interactions-api)に沿って、次の順序で取り出します。

1. 応答に完成画像が存在し、データが空でないことを確認する。
2. 応答のMIMEタイプを確認し、対応する画像形式としてBase64を復号する。
3. 復号したファイルが画像として開けることを確かめ、保存先やユーザーへの返却処理に渡す。

HTTP 200だけでは画像を取得できたとは判断できません。完成画像がなければ、テキストの応答やエラー内容を確認し、そのJSONを `.png` に改名して保存しないでください。

## generateContentでは設定名も応答の構造も変わる

既存の実装が `generateContent` を呼んでいる場合は、そのAPIの形式を使います。Interactionsの `generation_config` をそのまま移しても、同じ設定にはなりません。[generateContent用の公式ガイド](https://ai.google.dev/gemini-api/docs/generate-content/image-generation#controlling_thinking_levels)では、言語ごとに次の形が使われています。

| 実装 | Highを渡す場所 |
| --- | --- |
| Python SDK | `types.GenerateContentConfig(thinking_config=types.ThinkingConfig(thinking_level="High"))` |
| JavaScript SDK | `config.thinkingConfig.thinkingLevel` |
| REST | `generationConfig.thinkingConfig.thinkingLevel` |

RESTの本文は次の形になります。送信先は `https://generativelanguage.googleapis.com/v1/models/gemini-3.1-flash-image:generateContent` です。

```json
{
  "contents": [
    {
      "parts": [
        {
          "text": "架空の喫茶店のメニュー画像を作成。見出しは朝のセット。料理写真を左、価格を右に配置し、背景は白。"
        }
      ]
    }
  ],
  "generationConfig": {
    "responseModalities": ["IMAGE"],
    "thinkingConfig": {
      "thinkingLevel": "HIGH"
    }
  }
}
```

generateContentの応答では、候補の `content.parts` を調べます。`thought: true` のパートは思考中の内容なので、完成画像として返さずに読み飛ばし、最終出力の画像データを探してください。RESTの画像データは `inlineData` に入り、SDKでは命名規則が異なる場合があります。Interactionsの `steps` やSDKの `output_image` と混ぜないことが、画像保存の不具合を避けるポイントです。

![InteractionsとgenerateContentで、推論設定から画像の保存に進む流れを示した説明図](https://www.aifreeapi.com/posts/ja/nano-banana-2-thinking-level/img/api-image-output.webp)

### `includeThoughts`をオフにすれば無料になるわけではない

`includeThoughts`は思考の内容を応答に含めるかどうかの設定です。推論そのものや、その課金を停止するスイッチではありません。思考の要約が見えないことも、推論トークンがゼロだった証拠にはなりません。

会話を引き継いで画像を編集する実装では、返されたthought signatureを次のリクエストにそのまま渡す必要があります。表示しないパートを画面から除く処理と、次のリクエスト用の会話履歴を保存する処理は分けて扱ってください。[公式のthought signatureの説明](https://ai.google.dev/gemini-api/docs/generate-content/image-generation#thought_signatures)に、引き継ぎ時の要件があります。

## Highにする価値は「採用できる画像」で判断する

単純な雰囲気出しや案の探索なら、まずMinimalで十分な結果が得られるかを確認します。Highを試す候補になるのは、複数の条件を同時に満たす必要がある画像です。たとえば、見出しと価格を正確に入れるメニュー、要素の位置関係が決まった説明図、参照画像の特徴を保ちながら構成を変える編集などです。

これはHighの効果を保証する分類ではなく、比較する対象の選び方です。画面を見てから何となく良い方を選ぶより、先に合格条件を決めると仕事に使える判断になります。先ほどのメニューなら、「見出しが指定どおり」「料理が左、価格が右」「背景が白」を条件にできます。

比較するときは、**プロンプト、参照画像、解像度、縦横比、検索の利用設定をそろえ、推論レベルだけを変える**のが基本です。毎回まったく同じ画像が出るわけではないため、一組の出力で結論を決めず、実際によく使う複数の依頼で傾向を見ます。

| 記録するもの | 判断したいこと |
| --- | --- |
| 最終画像が返ったか | 推論の説明だけで終わらず、成果物を取得できたか |
| 事前に決めた条件の達成状況 | 文字、配置、参照画像との対応が用途に合うか |
| リクエスト開始から完成画像取得までの時間 | 制作の待ち時間として許容できるか |
| 応答のusageと請求内容 | 推論を含む費用がどれだけ増えたか |
| 採用までの再生成・修正回数 | 一回の費用が増えても、総作業量を減らせるか |

Highで条件を満たしやすくなり、作り直しが減るなら、その用途で採用する理由になります。差が見られず待ち時間や費用だけが増えるなら、その依頼はMinimalのままでよいでしょう。画像の解像度も変えたい場合は、まず推論レベルの比較を終えてから別に試すと、改善の理由を追いやすくなります。

![条件をそろえてMinimalとHighを比較し、指定条件、時間、費用、作り直しの回数を記録する説明図](https://www.aifreeapi.com/posts/ja/nano-banana-2-thinking-level/img/controlled-comparison.webp)

## 追加費用は画像代と推論代を分けて見る

Googleの標準API料金では、`gemini-3.1-flash-image` の入力はテキスト・画像とも100万トークン当たり0.50米ドル、テキストと推論の出力は100万トークン当たり3米ドルです。画像出力は別枠で、1K画像の目安として0.067米ドルが掲載されています。この0.067米ドルは、入力や推論などを含むリクエスト総額ではありません。[公式料金表](https://ai.google.dev/gemini-api/docs/pricing#gemini-3.1-flash-image)

たとえば、Highで**推論トークンが追加で1,000増えたと仮定**すると、その追加分は `1,000 ÷ 1,000,000 × 3 = 0.003` 米ドルです。これは計算例であり、Highの通常消費量や一回当たりの固定追加料金を示す数字ではありません。

総費用を見積もるときは、画像出力分に入力、テキスト・推論、利用したツール等の費用を加えます。制作全体では、失敗して生成し直したリクエストも含め、採用した画像一枚にいくらかかったかを比較してください。解像度別の料金やAPI費用の全体像は、[Nano Banana 2の料金とAPI費用](/ja/posts/gemini-flash-image-generation-pricing)で確認できます。

## よくある設定の疑問

### `dynamic`、`low`、`medium`も指定できる？

Nano Banana 2の現在のモデル別ガイドで確認できるのは `minimal` と `high` です。[Googleの発表記事](https://blog.google/innovation-and-ai/technology/developers-tools/build-with-nano-banana-2/)には「High/Dynamic」という表現がありますが、それを根拠に `dynamic` というAPI値を作らないでください。他のGeminiモデルの選択肢も、そのままNano Banana 2に適用できるとは限りません。

### Minimalは思考オフと同じ？

同じではありません。公式ガイドはMinimalでも推論する場合があると説明しています。推論を止める目的で `off` や `thinkingBudget=0` を追加する方法も、Nano Banana 2のモデル別設定としてここで確認したものではありません。

### Highを選んだのに違いが分からない場合は？

まず、送信先のAPIに合うフィールドを使っているか、外部サービスならその項目を受け付けているかを確認します。正しく指定できている場合でも、すべての依頼で見た目の差が出るとは限りません。推論の文章量ではなく、完成画像が指定条件を満たす割合と、採用までの時間・費用を比べて判断してください。
