New API をセルフホスト:Claude・OpenAI・Gemini を1つのゲートウェイにまとめ、Claude Code と Codex から使う

Zenavo で New API を自分のサーバーにデプロイし、複数のモデルプロバイダーを1つの API にまとめます。メンバーごとにキーと利用枠を発行し、Claude Code、Codex CLI、Open WebUI から接続する方法を説明します。

この記事は English、简体中文、繁體中文、Español、Bahasa Indonesia でもお読みいただけます。

あるメンバーは Claude Code を使い、別のメンバーは Codex CLI を使い、さらに別の人は Open WebUI でチャットしている。ツールごとにプロバイダーのキーのコピーを持ち、利用料は別々の請求書に載り、誰が何を使ったのか、どのキーを無効にすればよいのか、誰にも分からない状態です。

New API はオープンソースのモデルゲートウェイです。OpenAI、Anthropic、Gemini などのプロバイダーのキーを New API の背後に置き、各メンバーやツールには New API が発行するキーを渡します。キーごとに使えるモデルと利用枠を設定できます。OpenAI Chat Completions、Responses、Anthropic Messages、Gemini の各形式に対応しているため、主要なコーディングツールをそのまま接続できます。

このガイドでは、Zenavo の New API テンプレートを使って、レンタルまたは所有しているサーバーでゲートウェイを動かします。サーバー、Zenavo、上流のモデル API の料金はそれぞれ別に請求されます。New API はリクエストを転送して計測するだけで、モデルの呼び出しが安くなるわけではありません。New API はチーム向けのメンバー別キー発行と利用枠管理に向いています。自分や少人数のコーディングエージェント(Claude Code や Codex)でプロトコル変換とフェイルオーバーを行いたい場合は、より軽量な Magpie もご覧ください。

New API をデプロイする

Zenavo に Linux サーバーを接続し、New API テンプレートを開いて、サーバーを選んでデプロイします。

現在、テンプレートは次のように設定されます。

設定 値または用途
イメージ calciumion/new-api:latest
HTTP ポート 3000
ボリューム /data。デフォルトの SQLite データベースとログを保存します
SESSION_SECRET プロジェクト作成時に生成されます。ログインセッションの署名に使います
TZ UTC。必要に応じてお使いのタイムゾーンに変更してください

latest は上流の最新版に追従します。長期間使う場合は、サービスの Settings にある Source で動作確認済みのタグを指定し、そのタグを記録しておいてください。

ドメインを設定し、すぐに初期設定を済ませる

new-api サービスの Networking タブで、ai.example.com などのドメインをポート 3000 に割り当て、サーバーを指す A レコードを追加して、HTTPS が有効になるのを待ちます。詳しくはドメインと HTTPS をご覧ください。

最初にアクセスすると New API のセットアップウィザードが開き、管理者アカウントを作成します。ゲートウェイにプロバイダーのキーを登録すると、そのキーで費用が発生し得るようになります。ドメインにアクセスできるようになったら、すぐに自分でセットアップを済ませ、システム設定で新規ユーザーが自分で登録できるかどうかを確認してください。自分やチームで使う場合は、一般登録をオフにし、管理者としてアカウントを作成します。

プロバイダーのチャネルを追加する

New API では、上流への接続のそれぞれを チャネル と呼びます。Channels ページでチャネルを追加します。プロバイダーの種類を選び、そのプロバイダーの API キーと提供するモデルを入力して保存し、Test をクリックして応答が返ることを確認します。

いくつかのポイントがあります。

  • プロバイダーのキーはチャネルにだけ入力し、Zenavo の変数、スクリーンショット、チャットには決して書かないでください。
  • 「Anthropic official」のように分かりやすい名前をチャネルに付けておくと、ログが読みやすくなり、チャネルを無効にするのも簡単です。
  • 必要なモデルだけを提供してください。一覧にあるモデルが、プロバイダーのアカウントで呼び出せるとは限りません。
  • プロバイダーの公式 API キーを使い、その利用規約に従ってください。個人向けのチャットサブスクリプションを API として転売したり共有したりしないでください。

キーと利用枠を配布する

Tokens ページで、メンバーやツールごとにキーを作成し、使えるモデル、利用枠、有効期限を設定します。この sk- キーは New API が発行したものです。漏洩した場合はここで削除すればよく、プロバイダーのキーをローテーションする必要はありません。

キーはメンバーごと、ツールごとに発行してください(例:「Alex – Claude Code」「Alex – Open WebUI」)。利用状況が分かりやすくなり、1つを無効にしてもほかに影響しません。

Claude Code を接続する

Claude Code は環境変数を使って、リクエストをカスタムの Anthropic Messages エンドポイントに送信できます。お使いのコンピューターで次のように実行します。

export ANTHROPIC_BASE_URL="https://ai.example.com"
export ANTHROPIC_AUTH_TOKEN="sk-あなたの-new-api-トークン"
claude

ANTHROPIC_BASE_URL にはドメインだけを指定し、/v1 は付けないでください。Claude Code が自分で /v1/messages を付け加えます。Claude Code が要求するモデル名がチャネルのモデル名と異なる場合は、New API のチャネルでモデル名をマッピングするか、Claude Code の /model でゲートウェイが提供するモデルを選んでください。また、Claude Code から MCP や Skills を使って Zenavo サービスのログ確認、デプロイ、ロールバックまで行いたい場合は、Claude Code から Zenavo プロジェクトをデプロイ・デバッグするもご覧ください。

Codex CLI を接続する

Codex CLI では、カスタムプロバイダーを ~/.codex/config.toml で定義します。モデルはチャネルが提供するものに置き換えてください。

model = "チャネルが提供するモデル"
model_provider = "newapi"

[model_providers.newapi]
name = "New API"
base_url = "https://ai.example.com/v1"
env_key = "NEWAPI_API_KEY"
wire_api = "responses"

続いて export NEWAPI_API_KEY="sk-…" を実行し、codex を起動します。Claude Code とは異なり、こちらの base_url には /v1 を含めます。

Open WebUI と LobeHub を接続する

Open WebUI を運用している場合は、Settings → Admin → Connections を開き、OpenAI 互換の接続を追加します。Base URL には https://ai.example.com/v1 を、API キーには Open WebUI 専用に作成したトークンを指定します。LobeHub を使っている場合も、同様にプロバイダー設定または OPENAI_PROXY_URL に https://ai.example.com/v1 を指定します。

両方が同じ Zenavo プロジェクトにある場合(Open WebUI のプロジェクトに Add Service → Templates で New API を追加した場合)は、代わりにプライベートネットワークの http://new-api.zenavo.internal:3000/v1 を使ってください。リクエストがサーバーの外に出ることはありません。詳しくはプライベートネットワークをご覧ください。

バックアップとアップグレード

New API は、アカウント、チャネル、トークンを /data ボリュームに保存しています。プロバイダーのキーも含まれるため、バックアップはキーそのものと同じように厳重に管理してください。

メンテナンスの時間帯にプロジェクトを停止し、new-api サービスの Backup & Restore タブからボリュームをバックアップしてから、プロジェクトを再開します。手元に保管するためのコピーもダウンロードしておきましょう。アップグレードの前にはリリースノートを読み、先にバックアップを取ってください。アップグレードでデータベースのスキーマが変わった場合、古いイメージに戻しても元に戻らないことがあります。その場合は、アップグレード前のバックアップから復元してください。

よくある質問

Claude Code で 404 が返る、または接続できない場合は? ANTHROPIC_BASE_URL の末尾が /v1 になっていないか確認してください。そのうえで New API のログを見て、リクエストが届いているか、どのモデルを要求しているかを確認します。

Codex でモデルが存在しないと表示される場合は? config.toml の model は、チャネルが提供していて、かつトークンで許可されているモデルである必要があります。また、wire_api が responses になっていることも確認してください。

New API は会話内容を保存しますか? 呼び出しと利用量は記録されます。どの項目が記録されるかは、バージョンと設定によって異なります。リクエストは引き続き上流のプロバイダーに送られるため、ゲートウェイを自分のサーバーで動かしても、データがそのサーバーの中にとどまるわけではありません。

小さなサーバーでも足りますか? New API 自体は軽量で、負荷の大部分は同時リクエストから生じます。多くの人が同時に長い回答をストリーミングする場合は、サーバーのメモリと帯域幅に注意してください。

まずは New API テンプレートから始めましょう。最初にセットアップを済ませて一般登録をオフにし、続いてチャネルを追加し、トークンを発行して、コーディングツールを接続してください。