Geminiの構造化出力でNullを出力させようとしてエラーになる問題の解決

# はじめに
Geminiでは現在構造化出力というものがサポートされていて、特定の形式にあったJSONを出力させることができます。
この機能を使うと楽にGeminiからの応答を制御することができるので便利です。
この内容については自分で検証した結果ですが、何かおかしな点があればお教えください。

# やりたかったこと
gemini-2.0-flashで作っていたプロジェクトをgemini-2.5-flashに切り替えたかった。
構造化出力とファイルのアップロードを使用してGeminiからのレスポンスを取得したかった
- 構造化出力では**Null**、String、NUMBERなどを使用（一部配列）

# エラーの内容
**いつ発生したか**
**gemini-2.0-flashから、gemini-2.5-flashへの移行で発生しました。**
GeminiAPIを使用し、JavascriptのNode.js環境でコードを構築していました。
**また、構造化出力を使用している際にエラーが発生しました**

```javascript:エラーが発生したコード
async function main() {
    ~~略~~
  const content = ["この画像を見て、日本語で内容を説明してください。"];
  content.push(...uploadedFiles); // 配列を展開して追加

  const response = await ai.models.generateContent({
    model: "gemini-2.5-flash",
    contents: content,
    config: {
      responseMimeType: "application/json",
      responseSchema: {
        type: Type.OBJECT,
        required: ["createdUserId", "createdAt", "title", "outline", "questions"],
        propertyOrdering: ["createdUserId", "createdAt", "title", "outline", "questions"],
        properties: {
          createdUserId: {
            // 問題セットを作成したユーザーのID
            nullable: true,
            type: Type.NULL, // ユーザーIDはnullで、後で付与する
          },
          createdAt: {
            // 問題セットの作成日時
            nullable: true,
            type: Type.NULL, // 日時はnullで、後で付与する
          },
          ~~略~~
        },
      },
    },
  });
  console.log(response.text);
}
```

<details><summary>具体的なエラーログ</summary>

```terminal
ServerError: got status: 500 Internal Server Error. {"error":{"code":500,"message":"An internal error has occurred. Please retry or report in https://developers.generativeai.google/guide/troubleshooting","status":"INTERNAL"}}
    at throwErrorIfNotOK (file:///C:/Users/user/Documents/GitHub/myRepository/server/node_modules/@google/genai/dist/node/index.mjs:11210:33)
    at process.processTicksAndRejections (node:internal/process/task_queues:105:5)
    at async file:///C:/Users/user/Documents/GitHub/myRepository/server/node_modules/@google/genai/dist/node/index.mjs:10980:13
    at async Models.generateContent (file:///C:/Users/user/Documents/GitHub/myRepository/server/node_modules/@google/genai/dist/node/index.mjs:12157:24)
    at async generateQuestionSetWithGemini (file:///C:/Users/user/Documents/GitHub/myRepository/server/server.js:261:26)
    at async handleGenerateQuestionSetRequest (file:///C:/Users/user/Documents/GitHub/myRepository/server/server.js:84:32)
    at async file:///C:/Users/user/Documents/GitHub/myRepository/server/server.js:41:24 {
  [cause]: 'Error\n' +
    '    at new ServerError (file:///C:/Users/user/Documents/GitHub/myRepository/server/node_modules/@google/genai/dist/node/index.mjs:10733:37)\n' +
    '    at throwErrorIfNotOK (file:///C:/Users/user/Documents/GitHub/myRepository/server/node_modules/@google/genai/dist/node/index.mjs:11210:33)\n' +
    '    at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n' +
    '    at async file:///C:/Users/user/Documents/GitHub/myRepository/server/node_modules/@google/genai/dist/node/index.mjs:10980:13\n' +
    '    at async Models.generateContent (file:///C:/Users/user/Documents/GitHub/myRepository/server/node_modules/@google/genai/dist/node/index.mjs:12157:24)\n' +
    '    at async generateQuestionSetWithGemini (file:///C:/Users/user/Documents/GitHub/myRepository/server/server.js:261:26)\n' +
    '    at async handleGenerateQuestionSetRequest (file:///C:/Users/user/Documents/GitHub/myRepository/server/server.js:84:32)\n' +
    '    at async file:///C:/Users/user/Documents/GitHub/myRepository/server/server.js:41:24'
}
```
</details>

# 原因
構造化出力で`nullable: true`を指定しているのにも関わらず、`type: Type.NULL`を指定していたから、というのが最終的な理由でした。

今回は一部フィールドを**Nullとして出力**させられるようにしようと考えていました。
SDKとして提供されている、`nullable`を使用するとそのフィールドではNullを出力することができると、Gemini側に伝えることができるようになっています。
そして、それと似たものとして、`Type: Type.NULL`がSDKで提供されています。
今回、このそれぞれの使用方法のミスでエラーが発生していました。

gemini-2.0-flashでは、以下のように`nullable: true`と`type: Type.NULL`を同時に使用することができていました。
```javascript
hogehoge: {
  nullable: true,
  type: Type.NULL,
},
```
しかし、gemini-2.5-flashでは2つを同時に使用することができず、`Type`の中の値をNULL以外の値にする必要があったようです。
```javascript
hogehoge: {
nullable: true,
type: Type.STRING,//←STRINGにするとエラーが出ない
},
```

# 正しいNullの出力のさせ方
- gemini-2.0-flashの場合
gemini-2.0-flashでNullを出力させるときには、このようにして、`nullable`と`Type.NULL`を同時に指定する必要がある...ようです。
こうすることでNullが出力されるようになりました
```javascript
hogehoge: {
  nullable: true,
  type: Type.NULL,
},
```
---
- gemini-2.5-flashの場合
gemini-2.5-flashでNullを出力させるときには、2.0-flashとは異なり、`nullable`のみを指定するだけでよいようです。
しかし、`nullable`だけではnullを出力しない場合もある（気がする）のでプロンプトの方でも指定しておくことをおすすめします
（typeはNULL以外なら指定しても動く）
こうすることでNullが出力されるようになりました。
```javascript
hogehoge: {
  nullable: true,
},
```

どうしてgeminiのモデルの変更でこんな部分が変わるんですかね........