AI の API を使い続ける技術メモ
AIのモデル終了の通知から全アプリを見直したら、届いた通知に無い期限が見つかった
2026年10月、OpenAI と Google から AI のモデルの終了と仕様変更の通知が4通届きました。通知のモデル名で探すだけでなく、公式の終了の一覧と本番の設定まで確かめると、4通のどれにも無い Node.js 20 の提供終了、すでに効いていなかった temperature、公開中のゲームを上書きしかねない試作の設定が見つかりました。
2026年10月7日から14日にかけて、OpenAI と Google から、AI のモデルの終了や仕様の変更を知らせるメールが4通届きました。10月16日、私は「いくつかモデルが使えなくなるみたいなので、対応が必要なアプリがないか」と AI の作業者に頼みました。通知のモデル名で探すだけでは足りず、公式の終了の一覧と本番の設定まで確かめると、4通のどれにも無い Node.js 20 の提供終了、すでに効いていなかった temperature の指定、公開中のゲームを上書きしかねない試作の設定が見つかりました。
届いた通知は4通
| 届いた日 | 送り主 | 内容 |
|---|---|---|
| 10月7日 | Google AI Studio | 今後のモデルは、temperature・top_p・top_k や thinking_budget を送ると 400 エラー |
| 10月10日 | Google AI Studio | gemini-3.5-flash を廃止し、3.6-flash へ自動で転送 |
| 10月10日 | Google AI Studio | gemini-3.7-flash を廃止し、3.8-flash へ自動で転送 |
| 10月14日 | OpenAI | GPT-4o・GPT-4o mini・GPT-4.1・GPT-4.1 mini を2027年1月14日に終了 |
見直しの4つの段階
- 通知のモデル名で探す。作業フォルダー全体を、モデル名と、AI の API を呼んでいる所の両方で探しました。
- 公式の終了の一覧を読む。OpenAI の非推奨のページと Cloud Functions の実行環境の表で、通知に無い終了を探しました。最初の調べのあと、同じ日に足した段階です。
- 本番で使われている設定を確かめる。コードの既定と本番の設定は、違うことがあります。
- 反映の仕方ごとに分ける。push、デプロイ、各アプリの担当(別の AI の作業者)への依頼では、手順も確かめ方も違います。
届いた4通に無かった期限
10月16日に Cloud Functions の実行環境の表を見ると、Node.js 20 は2026年10月30日に提供終了で、以後は関数の作成も更新もできず、動いている関数が止められることもある、とありました。AI を呼ぶサーバー処理の多くは Cloud Functions です。firebase functions:list で見ると、共用のサーバー処理・イエタ・クローズドテスト中の英会話アプリの関数は Node.js 22 でした。Node.js 20 だったのは、まだ公開していない英会話の試作(本番用と開発用に7つずつ)、以前作った別のアプリ(第1世代の関数7つ)、使っていない古い関数1つです。
OpenAI の非推奨のページ(10月16日に確認)にも、メールに無い終了が載っていました。gpt-4.1-nano・o4-mini・o1 などは2026年10月23日、読み上げの tts-1 は2027年1月6日、聞き取りの whisper-1 は2027年2月26日です。本番で使っている所はありませんでしたが、イエタのサーバーが選んでよいモデルの一覧に gpt-4.1-nano が、クローズドテスト中の英会話アプリのコードの既定に whisper-1 と tts-1 が残っていました。
このアプリの担当の計画には「tts-1 は終了の通知がないため残す」とありました。同じ担当の調べもののメモには、2027年1月6日に終わると書かれています。通知が来ないことは、終わらないことの証拠になりません。
すでに効いていなかった temperature と、自動の転送
10月16日に確かめた Google の説明では、gemini-3.5-flash-lite と 3.6-flash は temperature などを受け取っても使っておらず、次の世代からは送ると 400 エラーになります。廃止されたモデルは新しいモデルへ自動で転送されるので、送り続けると、ある日突然止まるおそれがあります。10月7日と10日の通知は、合わせて読むと1つの危なさになります。
5秒バトルは AI 審判に temperature を送り、予備のモデルは廃止された gemini-3.5-flash のままで、10月10日からは予備の呼び出しに 3.6-flash が答えていました。10月16日の直しと比べ直した結果は、モデルを替えるたびに起きたことの制作ノートに書いています。
共用のサーバー処理は5つのアプリの6か所で、Chronicle AI は記事の生成のたびに、temperature を送っていました。Chronicle AI が調べものに使う gemini-2.5 系では、まだ効いています。そこで、実際に呼ぶモデルの名前で、送るかどうかを決める形にしました。Chronicle AI に足した判定です。
const SAMPLING_MODEL_PREFIXES = ['gemini-2.', 'gemini-3.1-', 'gemini-3-'];
この3つで始まるモデルにだけ送り、3.5 以降と知らない名前には送りません。値は変えていないので、直した時点の動きは変わりません。本物の API は呼ばず、通信を差し替えたテストで、3.5-flash-lite への要求に temperature が無いことを確かめました。
公開中のゲームを上書きしかねなかった試作
まだ公開していないゲームの試作では、Cloudflare に出すときの名前(Worker の名前)が、公開中の5秒バトルと同じ five-sec-battle でした。master に push するたびにデプロイするワークフローがあり、出す先のアカウントとサイトの URL も同じでした。デプロイに要る設定がそろっていなかったので push は失敗するだけでしたが、そろえた時点で本番の5秒バトルが置き換わる作りでした。私は、まだ公開していないゲームの試作と英会話の試作について「問題ないように」と頼み、AI の作業者が10月16日に名前を替えて、ワークフローから5秒バトルの URL を外しました。
本番に影響があった所と、無かった所
イエタは本番が gpt-6-luna で、影響はありませんでした。終了するモデルは、品質の評価に使う道具の採点役と既定、サーバーが選んでよいモデルの一覧に残っていて、担当が10月17日に直しました。モデルを選んだときの評価と原価は、イエタの AI の原価の制作ノートに書いています。
クローズドテスト中の英会話アプリは逆でした。本番の会話は Anthropic の Claude で、失敗したときの予備が gpt-4o-mini でした。本番の設定に予備の指定が無く、コードの既定がそのまま使われる作りなので、2027年1月14日以後は予備も失敗するところでした。担当が10月16日に gpt-6-luna に直し、同じ日に本番にも反映しました。聞き取りと読み上げは本番の設定で別のものを指定しているので、コードの既定は、設定が抜けたときに戻る先です。
まだ公開していない英会話の試作は、OpenAI を呼ぶ5つの関数がすべて gpt-4o-mini で、gpt-6-luna と Node.js 22 に直しました。
反映の仕方ごとに確かめた
スタジオ側で直したもののうち、5秒バトル・共用のサーバー処理・Chronicle AI は、10月16日に私が push とデプロイをしました。イエタは担当が直し、本番の関数は10月17日に私が出し直しました。
| アプリ | 反映の仕方 | 反映と確かめ |
|---|---|---|
| 5秒バトル | push すると CI が出す | 10月16日、21時51分の CI が成功 |
| 共用のサーバー処理 | 直した5つの関数をデプロイ | 10月16日22時11分に更新。10月17日の確認でエラーの記録は0(呼び出しがほとんど無く、実際の呼び出しでは確かめていない) |
| Chronicle AI | push すると、次の定時の実行から効く | 10月16日に push。10月19日の朝まで、定時の記事の生成が続いた |
| イエタ | 担当が直し、関数を出し直す | 10月17日22時03分に本番の関数を更新 |
反映でつまずいたこと
共用のサーバー処理のデプロイは、原因の違う2つで止まりました。1つは、--only に関数名をカンマで並べたとき、PowerShell がカンマで値を分けてしまい、「No function matches」になったことです。--only "functions:a,functions:b" のように、値の全体を " で囲むと通ります。
もう1つは、デプロイの前に関数のコードを読み込む段階の待ち時間切れ(「Timeout after 10000」)です。待ち時間は既定で10秒で、環境変数 FUNCTIONS_DISCOVERY_TIMEOUT(秒)で延ばせます。Node.js 22 に上げた英会話の試作では、読み込みに5.6〜7.8秒かかったので、反映の手順に、先に60秒に延ばす1行を入れました。
ところが10月19日の夜にこの試作をデプロイすると、60秒に延ばしても同じ待ち時間切れで止まりました。手元で同じ読み込みを試すと2秒で終わり、コードの問題ではありませんでした。デプロイの道具は、読み込んだコードをその場で小さなサーバーとして動かし、関数の一覧を問い合わせます。止まったときは、そのサーバーが起動したと表示されたあと、問い合わせの答えが受け取れていませんでした。一覧をファイルに書き出して受け渡す設定(環境変数 FIREBASE_FUNCTIONS_DISCOVERY_OUTPUT_PATH=true)に替えると、7つの関数がそのまま更新されました。問い合わせが返らなかった原因は、突き止めていません。
10月22日の時点で残っているもの
英会話の試作は、10月19日の夜に本番用と開発用の関数(7つずつ)を Node.js 22 と gpt-6-luna でデプロイし、本番用に短い英文を1回送って、返事と日本語訳が返ることを確かめました。ただ、この試作は10月22日にやめることにしました。クローズドテスト中の英会話アプリと役割が重なり、この1か月の呼び出しも、定期の片付けの処理と10月19日の確認だけだったためです。使わない試作のために、期限のたびに直して出し直す手間と維持の費用をかけ続ける理由もありません。本番用と開発用のプロジェクトは、関数ごと削除の手続きをしました。30日のあいだは戻せる形で残り、そのあとに消えます。
以前作った別のアプリは、今作っている英会話アプリ2つ(イエタと、クローズドテスト中のアプリ)にある程度の成果が出るまでは手を付けず、凍結しておくことにしました。使っていない古い関数も Node.js 20 のままです。
クローズドテスト中の英会話アプリの読み上げは、10月19日の夜に担当が tts-1 を使う道を外し、設定が無くても Google の声を使う形にして、開発用の環境で確かめました。本番には、翌日の10月20日に担当が反映しました。
Node.js 20 の期限、メールに無い OpenAI の終了、すでに効いていなかった temperature、試作の名前の重なりは、どれも届いた4通には書かれておらず、公式の一覧と各アプリの設定を読んで見つかりました。
通知のメールを見て頼んだとき、私が気にしていたのは、今と同じかそれ以上の品質で、費用の面でも問題の無いモデルが見つかるか、そしてその選定まで任せられるか、でした。届いた通知に無い期限まで見つけてきたことには、以前の AI のモデルなら気づかなかったかもしれない所まで見てくれるようになった、と感心しました。
共用のサーバー処理を使う小さな AI アプリは、過去の制作の一覧と小さな AI アプリの記録に載せています。