OpenAI API 入門 — API キーの取得から初回リクエストまで
概要
本記事は、OpenAI API を初めて触るエンジニア向けのハンズオンです。アカウント作成から API キーの発行、環境構築、そして初回リクエストの送信までを、最短経路で一通り体験します。手元にターミナルと任意のエディタがあれば読み進められます。
対象は「Web の管理画面は見たことがあるが、コードから LLM を叩いたことはない」という段階の方です。
環境
- OS: macOS / Linux / Windows いずれか
- Python 3.8 以上(本記事は Python で進めます。Node.js 版も後半で触れます)
- ターミナル
- OpenAI アカウント(無料で作成可能。ただし API 利用には支払い方法の登録が必要)
API の利用は従量課金です。ダッシュボードから利用上限(Usage limits)を設定しておくと、想定外の課金を防げます。最初に必ず確認してください。
API キーの取得
1. アカウント作成とサインイン
OpenAI のプラットフォーム(https://platform.openai.com)にアクセスし、アカウントを作成してサインインします。ChatGPT のアカウントとは別に、開発者向けプラットフォームのダッシュボードにログインする点に注意してください(同じ資格情報でサインインできます)。
2. 支払い方法の登録
API を実際に呼び出すには、Billing 設定で支払い方法を登録し、クレジット(前払い残高)をチャージするか、支払い方法を紐付ける必要があります。ここが未設定だと、リクエスト時に insufficient_quota 系のエラーが返ります。
3. API キーの発行
ダッシュボードの「API keys」ページ(https://platform.openai.com/api-keys)から「Create new secret key」を実行します。
重要なポイント:
- キーは発行時に一度だけ全体が表示されます。 その場でコピーして安全に保管してください。後から再表示はできません。
- キーには名前を付けられます。用途ごと(ローカル検証用 / CI 用など)に分けて発行しておくと、後で個別に失効(revoke)できて便利です。
- キーは
sk-で始まる文字列です。この値は絶対に公開リポジトリやフロントエンドのコードに直接書かないでください。
4. キーを環境変数に置く
キーはコードにハードコードせず、環境変数から読み込むのが基本です。
# macOS / Linux(そのセッション限り)
export OPENAI_API_KEY="発行したキーをここに"
永続化したい場合は .zshrc / .bashrc などに追記します。プロジェクト単位で管理するなら .env ファイルに書き、.gitignore に .env を必ず追加します。
# .env
OPENAI_API_KEY=発行したキー
# .gitignore
.env
発生しがちな問題
初回リクエストで詰まりやすいのは、だいたい次の3つです。
-
キーが読み込めていない — 環境変数名のタイポ、
exportし忘れ、別のシェルセッションで実行している。 -
課金が未設定 — キーは作れても残高がなく
insufficient_quotaが返る。 - キーの権限不足 — 制限付き(restricted)キーで、使おうとしている API へのスコープが与えられていない。
原因と対応方法
SDK のインストール
Python 公式 SDK を入れます。仮想環境の利用を推奨します。
python -m venv .venv
source .venv/bin/activate # Windows は .venv\Scripts\activate
pip install openai
キーの読み込み確認
まず環境変数がプロセスから見えているかを確認します。
python -c "import os; print('OK' if os.getenv('OPENAI_API_KEY') else 'NOT SET')"
NOT SET が出たら、export したシェルと実行するシェルが同一か、変数名が OPENAI_API_KEY になっているかを見直します。
実装例
Python — 初回リクエスト
main.py を作成します。SDK は環境変数 OPENAI_API_KEY を自動で読み込むため、明示的にキーを渡す必要はありません。
from openai import OpenAI
client = OpenAI() # OPENAI_API_KEY を環境変数から自動読み込み
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": "あなたは簡潔に答えるアシスタントです。"},
{"role": "user", "content": "OpenAI API を一言で説明して。"},
],
)
print(response.choices[0].message.content)
実行:
python main.py
応答テキストが標準出力に表示されれば成功です。
model に指定する値は時期によって利用可能なものが変わります。まずは軽量・低コストのモデル(例では gpt-4o-mini)で疎通確認するのがおすすめです。利用可能なモデル名はダッシュボードのドキュメントで確認してください。
ストリーミングで受け取る
応答をトークン単位で逐次表示するには stream=True を使います。体感速度が大きく変わります。
from openai import OpenAI
client = OpenAI()
stream = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "俳句を一つ詠んで。"}],
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)
print()
Node.js の場合
npm install openai
import OpenAI from "openai";
const client = new OpenAI(); // OPENAI_API_KEY を環境変数から自動読み込み
const response = await client.chat.completions.create({
model: "gpt-4o-mini",
messages: [{ role: "user", content: "OpenAI API を一言で説明して。" }],
});
console.log(response.choices[0].message.content);
curl で最小確認
SDK を入れずに疎通だけ見たいときは curl でも確認できます。
curl https://api.openai.com/v1/chat/completions \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4o-mini",
"messages": [{"role": "user", "content": "hello"}]
}'
確認方法
- レスポンスに
choices[0].message.contentが含まれていれば成功です。 - レスポンスの
usageフィールドで消費トークン数(prompt_tokens/completion_tokens/total_tokens)を確認できます。コスト感を掴むうえで最初に見ておくとよい値です。 - 課金の実績はダッシュボードの Usage ページに反映されます(反映には多少のタイムラグがあります)。
注意点
- キーの漏洩に注意。 誤ってコミットした場合は、ダッシュボードから即座に該当キーを失効させ、新しいキーを再発行してください。GitHub にプッシュされたキーは自動検出されて無効化されることもありますが、自分で失効させるのが確実です。
- フロントエンドから直接呼ばない。 ブラウザの JS からキーを使うとキーが露出します。必ずサーバー側(バックエンド / エッジ関数など)を経由させてください。
-
レート制限とエラーハンドリング。
429(レート超過)や一時的な5xxに備え、指数バックオフでのリトライを実装しておくと本番運用で安定します。 - 利用上限(Usage limits)を設定する。 学習・検証段階では特に、月次の上限を低めに設定しておくと安心です。
まとめ
- OpenAI API の利用開始は「アカウント作成 → 支払い方法登録 → API キー発行 → 環境変数に格納 → SDK で初回リクエスト」の順で進む。
- キーはコードにハードコードせず環境変数で管理し、
.envは.gitignoreに入れる。 - まずは低コストモデルで疎通確認し、
usageでコスト感を掴む。 - フロントからの直接呼び出しは避け、失効・リトライ・利用上限の3点を最初から意識しておくと、そのまま本番運用に持っていける。
疎通が取れたら、次はプロンプト設計、Function calling、構造化出力(JSON mode / Structured Outputs)あたりが実用への入口になります。