OpenAI APIをJavaScriptから使う最短ルートは、Node.jsへ公式SDKを入れ、APIキーを環境変数に設定し、Responses APIの responses.create() を1回実行する方法です。
OpenAI APIを初めて使うときは、SDK、APIキー、モデル、プロンプト、レスポンスのどこから確認すればよいのか迷いやすいものです。最初から会話履歴やストリーミングまで実装すると、エラーの原因も増えてしまいます。
この記事では、Node.jsで動く最小プロジェクトを作り、JavaScriptからテキストを送り、返ってきた内容をターミナルへ表示するところまで解説します。ブラウザへAPIキーを置かない理由、input と instructions の違い、初回に起きやすいエラーも整理します。
対象範囲:この記事は最初の1リクエストに集中します。会話状態、ストリーミング、Web Search、File Search、Function Callingは、基本の呼び出しが成功してから追加する機能です。
情報確認日:2026年7月17日(日本時間)
結論:Node.jsでは公式SDKとResponses APIから始める
最初のAPI呼び出しに必要なもの
- 現在サポートされているNode.js環境
- OpenAI Platformで作成したAPIキー
- 環境変数
OPENAI_API_KEY - npmから導入する公式の
openaiパッケージ client.responses.create()を呼ぶJavaScriptファイル
OpenAIの公式Quickstartでは、サーバー側JavaScriptから利用する公式SDKを npm install openai で導入し、Responses APIへ model と input を渡す方法が案内されています。SDKは OPENAI_API_KEY を環境から読み取るため、コードへAPIキーを直接書く必要はありません。
完成後は、次のコマンドで実行できます。
npm start
成功すると、ターミナルにモデルからのテキスト応答が表示されます。まずこの1往復だけを成功させると、認証、SDK、モデル、ネットワーク、出力取得の基本経路をまとめて確認できます。
完成するファイル構成
この記事では、次の小さな構成を作ります。
openai-api-sample/
├── .gitignore
├── config.mjs
├── example.mjs
├── package-lock.json
└── package.json
example.mjs がAPIを呼ぶ本体で、config.mjs はモデル名を管理します。APIキーはファイルへ保存せず、実行環境から渡します。
ブラウザからAPIキーを送らない理由
OpenAI APIの呼び出しは、ブラウザへ配信されるJavaScriptではなく、自分が管理するサーバー側で行うのが基本です。ブラウザのJavaScriptへAPIキーを埋め込むと、開発者ツールや配信ファイルから第三者に確認され、不正利用されるおそれがあります。
| 処理 | 置く場所 | 理由 |
|---|---|---|
| 画面表示・入力受付 | ブラウザ | 利用者が操作するため |
| OpenAI APIの呼び出し | Node.jsなどのサーバー | APIキーを利用者へ公開しないため |
| APIキーの保管 | 環境変数・シークレット管理 | ソースコードと秘密情報を分離するため |
APIキーの保管、Git管理、チーム共有、漏洩時の対応は、AI APIキーの安全な管理方法で詳しく解説しています。
OpenAI APIを使う準備
Node.jsとnpmを確認する
ターミナルを開き、Node.jsとnpmを確認します。
node --version
npm --version
バージョン番号が表示されれば、コマンドを実行できています。新しく環境を用意する場合は、Node.jsの現行LTSを選ぶと更新や周辺パッケージへ追従しやすくなります。SDKの対応条件は変わる可能性があるため、インストール時に表示されるpackage要件も確認してください。
作業用ディレクトリを作り、npmプロジェクトを初期化します。
mkdir openai-api-sample
cd openai-api-sample
npm init -y
npm pkg set type=module
type=module を設定すると、この記事の例で使う import 構文をJavaScriptファイルで利用できます。
公式OpenAI SDKをインストールする
npmから公式SDKを追加します。
npm install openai
インストール後、package.json の dependencies に openai が追加され、同じバージョンを再現するための package-lock.json も作成されます。
環境変数へAPIキーを設定する
OpenAI PlatformでAPIキーを作成し、ターミナルの環境変数へ設定します。macOSまたはLinuxでは、現在のターミナルセッションに次のように設定できます。
export OPENAI_API_KEY="your_api_key_here"
PowerShellでは、次の形式です。
$env:OPENAI_API_KEY="your_api_key_here"
注意:本物のAPIキーを記事、画面共有、チャット、GitHubへ貼らないでください。キーを誤って公開した場合は、文字を消すだけで済ませず、対象キーを無効化して新しいキーへ切り替えます。
値そのものを表示せず、環境変数が設定されているかだけを確認するなら、Node.jsから真偽値を出します。
node -e "console.log(Boolean(process.env.OPENAI_API_KEY))"
true が表示されれば、そのターミナルから環境変数を参照できます。
.gitignoreを用意する
依存関係とローカルの秘密情報を誤ってGitへ追加しないよう、.gitignore を作ります。
node_modules/
.env
.env.*
!.env.example
この記事では公式Quickstartと同じくターミナルの環境変数を使います。将来 .env を使う場合でも、実際の値を入れたファイルはコミットしません。
JavaScriptで最小リクエストを送る
モデル名をconfig.mjsへ分離する
config.mjs を作り、モデル名を1か所で管理します。
export const MODEL =
process.env.OPENAI_MODEL || "gpt-5.6";
gpt-5.6 は2026年7月17日に公式Quickstartで案内されているモデルです。利用可能なモデルや推奨モデルは変わるため、後から OPENAI_MODEL で差し替えられるようにしています。
一時的に別のモデルを試す場合は、コードを書き換えずに実行できます。
OPENAI_MODEL="利用可能なモデルID" npm start
responses.create()のコードを書く
example.mjs を作り、次のコードを保存します。
import OpenAI from "openai";
import { MODEL } from "./config.mjs";
if (!process.env.OPENAI_API_KEY) {
throw new Error("OPENAI_API_KEY is not set");
}
const client = new OpenAI();
const response = await client.responses.create({
model: MODEL,
instructions:
"あなたは初学者向けに説明するJavaScript講師です。",
input:
"JavaScriptのconstを40文字程度の日本語で説明してください。",
});
console.log(response.output_text);
このコードの役割は、次の5段階です。
- 公式SDKの
OpenAIを読み込む - 設定ファイルからモデル名を読み込む
- APIキーが環境にあるか確認する
responses.create()へモデル、指示、入力を渡すresponse.output_textを表示する
new OpenAI() にAPIキーを直接渡していない点が重要です。公式SDKが環境変数 OPENAI_API_KEY を読み取るため、コードと秘密情報を分離できます。
npm startを設定して実行する
npmのコマンドから、package.json の scripts へ start を追加します。
npm pkg set scripts.start="node example.mjs"
このコマンドは、npm init が作った package.json を残したまま、実行用scriptだけを更新します。
準備ができたら実行します。
npm start
成功時の文章は毎回完全に同じとは限りませんが、ターミナルへ日本語の説明が表示されます。これで、JavaScriptからOpenAI APIへ入力を送り、テキスト応答を受け取る最小経路は完成です。
output_textで何を取得しているのか
Responses APIの返り値には、テキスト以外の項目を含むことがあります。公式SDKの output_text は、返されたテキストを簡単に取り出すための便利なプロパティです。最初のテキスト生成では、レスポンス構造を深くたどるより response.output_text から始めると理解しやすくなります。
一方、ツール呼び出し、複数種類の出力、詳細なメタデータを扱う場合は、response.output の各項目を確認する必要があります。まず output_text で成功させ、必要になってからレスポンス全体を調べるのが安全です。
input・instructions・modelを変更する
inputとinstructionsの役割を分ける
input は、そのリクエストで処理してほしい内容です。instructions は、回答時の役割、方針、形式など、モデルの振る舞いを指定します。
| 項目 | 役割 | 例 |
|---|---|---|
model |
使用するモデルを指定する | gpt-5.6 |
instructions |
役割や出力方針を指定する | 初学者向けに説明する |
input |
今回処理する依頼やデータを渡す | constを短く説明する |
たとえば、翻訳アプリなら「専門用語を保持し、説明を加えない」を instructions に置き、翻訳対象の文章を input に置きます。毎回変わるデータと、アプリ全体で維持する方針を分けるイメージです。
モデル名を設定ファイルへ分ける理由
モデル名を複数ファイルへ直接書くと、変更時の修正漏れが起こりやすくなります。config.mjs または環境変数へ集約すれば、開発環境と本番環境でモデルを切り替えたり、公式案内の変更へ追従したりしやすくなります。
モデル選択では、性能だけでなく、応答速度、コスト、利用できる機能、アクセス可能なモデルを確認します。この記事のモデル名を永久に固定された推奨値と考えず、実装時にはOpenAI公式のモデル一覧を確認してください。
初回実装で起きやすいエラー
最小コードが動かないときは、一度にコード全体を書き直さず、認証、利用設定、モデル、通信、コードの順で切り分けます。
| 症状 | 主な確認点 | 対応 |
|---|---|---|
| APIキーがない | OPENAI_API_KEY が現在のターミナルにない |
環境変数を設定し、同じターミナルで再実行する |
| 認証エラー | キーの入力ミス、無効化済み、別環境の値 | キーの状態をDashboardで確認し、必要なら再発行する |
| モデルを利用できない | モデルIDの誤り、Projectから利用できないモデル | 公式モデル一覧と利用中Projectを確認する |
| 429エラー | 短時間のリクエスト超過、利用上限、請求設定 | エラー本文、Usage、Limits、Billingを分けて確認する |
| packageが見つからない | 別ディレクトリで実行、インストール未完了 | package.json のある場所で npm install を実行する |
| import構文のエラー | ES Modulesとして実行されていない | .mjs を使うか type=module を設定する |
APIキー・利用設定・モデル名を切り分ける
確認順を固定すると、原因を探しやすくなります。
Boolean(process.env.OPENAI_API_KEY)がtrueかnpm ls openaiでSDKが表示されるかnode --check example.mjsで構文エラーがないか- モデルIDが公式一覧と一致しているか
- エラーのstatus、code、messageを読んだか
- OpenAI PlatformのUsage、Limits、Billingを確認したか
エラー処理を追加するときも、利用者へAPIキーや内部レスポンス全体をそのまま表示しないよう注意してください。サーバーログへ残す情報と、画面へ返すメッセージを分けます。
いきなりブラウザ実装へ進まない
ブラウザ画面から使えるアプリにする場合も、まずこの記事のCLI版を成功させるのがおすすめです。その後、自分のNode.jsサーバーへAPIエンドポイントを作り、ブラウザはそのサーバーだけを呼ぶ構成へ広げます。
最初から画面、サーバー、認証、OpenAI APIを同時に実装すると、失敗箇所が分かりにくくなります。「ターミナルで1回成功」「サーバー経由で成功」「画面から成功」の順に進めると安全です。
最初の1回が成功した後に進む機能
基本の呼び出しが動いたら、目的に合わせて機能を追加します。
- JSONを安定して受け取りたい:構造化出力を追加する
- 長い回答を途中から表示したい:ストリーミングを追加する
- 会話を続けたい:レスポンスIDや履歴管理を追加する
- 最新情報を調べたい:Web Searchを追加する
- 自分の資料を参照したい:File SearchまたはRAGを検討する
- 自分の処理を実行したい:Function Callingを追加する
JSON出力の考え方は、生成AIからJSON形式で出力する方法も参考になります。AI API全体の学習順を整理したい場合は、エンジニア向け生成AIの基礎から確認してください。
OpenAI APIのJavaScript利用でよくある質問
OpenAI APIはブラウザのJavaScriptから直接呼べますか?
秘密のAPIキーをブラウザへ置く構成は避けてください。ブラウザから自分のサーバーへリクエストし、サーバー側のNode.jsからOpenAI APIを呼ぶ構成が基本です。
JavaScriptではChat Completions APIとResponses APIのどちらを使いますか?
新しく最小のテキスト生成を試すなら、現在の公式Quickstartで案内されているResponses APIから始めるとよいでしょう。既存システムの移行では、現在使っている機能とレスポンス構造を確認して段階的に判断します。
APIキーはJavaScriptファイルのどこに書きますか?
JavaScriptファイルには書きません。ローカルでは環境変数、本番ではホスティング環境のシークレット管理を使い、SDKから参照します。
response.output_textが空の場合はどうしますか?
エラーの有無と response.output の内容を確認します。ツール呼び出しなど、単純なテキスト以外の出力を含む処理では、出力項目を種類ごとに扱う必要があります。
モデル名はgpt-5.6で固定してよいですか?
固定された永久の推奨値ではありません。この記事では確認時点の公式Quickstartに合わせています。利用可能モデル、要件、速度、コストを公式モデル一覧で確認し、設定ファイルや環境変数から変更できるようにしてください。
APIの回答は毎回同じになりますか?
必ず同じになるとは限りません。出力をアプリの処理へ使う場合は、形式を明確に指定し、構造化出力、入力検証、エラー処理、評価を追加します。
まとめ:最初は1リクエストを小さく成功させる
OpenAI APIをJavaScriptで使う最小構成は、公式SDK、環境変数のAPIキー、responses.create()、output_text の4点です。Node.jsの小さなCLIから始めれば、画面やサーバー機能を追加する前に、API呼び出しの基本経路を確認できます。
APIキーはコードやブラウザへ置かず、環境変数またはシークレット管理から渡します。モデル名もコードの各所へ直書きせず、設定ファイルへ分けておくと仕様変更へ追従しやすくなります。
まずターミナルで1回成功させ、次にエラー処理、構造化出力、会話、ストリーミングなどを1機能ずつ追加してください。公式の最新コードはOpenAI API Developer quickstartで確認できます。