OpenAI APIをMacから使いたいときは、APIキーを発行するだけでは準備が終わりません。
キーをターミナルの履歴やソースコードに残さず、OPENAI_API_KEYという環境変数として読み込める状態にする必要があります。
この手順は、macOSで標準的なzshを使い、Node.jsからOpenAI APIへ接続する前提です。 APIキーをチャットやコードへ貼り付けず、現在のターミナルだけで使う方法と、macOSのキーチェーンへ保存する方法を順に説明します。
先に確認すること
最初にそろえるのは、OpenAI Platformのアカウント、APIの支払い設定、zshとNode.jsが動くMacの4点。 作業を始める前に、ChatGPTとOpenAI APIの契約を分けて考えます。 ChatGPT PlusやProなどの月額プランを契約していても、APIの利用料金は含まれません。 OpenAI公式ヘルプでは、ChatGPTとAPIは別々に請求、管理されると案内されています。
APIを初めて使う場合は、OpenAI PlatformのBillingで支払い方法やクレジット残高を確認してください。 少額の接続テストでもAPIの利用料金が発生する可能性があります。
このPCで必要なコマンドが使えるかは、ターミナルで次のように確認できます。
echo "$SHELL"
zsh --version
node --version
npm --version
この手順では、$SHELLが/bin/zshと表示され、nodeとnpmのバージョンが返れば準備は整っています。
command not found: nodeと表示された場合は、先にNode.jsをインストールしてください。
ChatGPTそのものの機能や料金を調べている方は、APIとは契約が異なるため、ChatGPTの機能・料金・始め方を先に確認すると混同を避けられます。
OpenAI PlatformでAPIキーを発行する
APIキーは、ChatGPTの設定画面ではなく、OpenAI Platformで発行します。 個人で試す場合も、仕事で使う場合も、先に用途に合うProjectを選んでからキーを作ると利用状況を追いやすくなります。
- OpenAI PlatformのAPI Keysを開き、OpenAIアカウントでログインします。
- 画面上部で、ローカル検証に使うProjectが選ばれているかを見ます。
Create new secret keyを選び、用途が分かる名前を付けます。- 権限を選べる場合は
Restrictedを選び、使うAPIに必要な権限だけを許可します。 - キーを作成し、表示された文字列を一度だけコピーします。
キーの全文は、作成直後にしか表示されないことがあります。 画面を閉じてコピーできなくなった場合は、古いキーを推測したり探したりせず、新しいキーを発行してください。
Allはすべての権限を持つ既定設定です。
接続先が決まっている開発では、OpenAIが案内するRestrictedを使い、対象リソースごとにNone、Read、Writeを絞る方が安全です。
Responses APIを使うなら、少なくとも実行するリクエストに必要な権限が必要です。
APIキーを現在のターミナルだけに設定する
最初の接続確認では、キーを.zshrcやソースコードへ直接書き込まず、現在開いているターミナルだけに設定します。
次のコマンドを実行すると入力待ちになるので、コピーしたAPIキーを貼り付けてEnterキーを押してください。
read -s "OPENAI_API_KEY?OpenAI APIキーを貼り付けてEnter: "
export OPENAI_API_KEY
printf '\n'
read -sを使うため、貼り付けた文字列は画面に表示されず、シェルのコマンド履歴にもAPIキーそのものは残りません。
この環境変数は、現在のターミナルを閉じると消えます。
値を表示せず、設定の有無だけを調べられます。
if [[ -n "${OPENAI_API_KEY:-}" ]]; then
echo "OPENAI_API_KEY is set"
else
echo "OPENAI_API_KEY is not set"
fi
OPENAI_API_KEY is setと表示されれば、SDKが読み込める状態です。
確認のためにecho $OPENAI_API_KEYを実行するとキーの全文が画面やログに残るため、この用途では使いません。
macOSのキーチェーンへ保存する
ターミナルを開くたびにAPIキーを貼り付けたくない場合は、macOSのキーチェーンへ保存できます。
キーチェーンに保存すると、.zshrcや.envへAPIキーの文字列を直接残さずに済みます。
APIキーを現在の環境変数へ設定した状態で、次のコマンドを実行します。
末尾の-wはAPIキーの入力を求める指定なので、プロンプトが表示されたら同じキーを貼り付けてください。
security add-generic-password \
-U \
-a "$USER" \
-s "openai-api-key" \
-w
-Uは、同じ名前の項目がすでにある場合に更新する指定です。
保存後は、環境変数をいったん消してからキーチェーン経由で読み込めるか試します。
unset OPENAI_API_KEY
export OPENAI_API_KEY="$(
security find-generic-password \
-a "$USER" \
-s "openai-api-key" \
-w
)"
if [[ -n "${OPENAI_API_KEY:-}" ]]; then
echo "OPENAI_API_KEY loaded from Keychain"
fi
初回はmacOSからキーチェーンへのアクセス確認が表示される場合があります。 どのアプリが読み取ろうとしているかを確認してから許可してください。
毎回自動で読み込む設定を.zshrcへ追加すると、開いたすべてのシェルがAPIキーを持つことになります。
必要な作業を始めるときだけ上のexportを実行する方が、キーを使えるプロセスを減らせます。
Node.jsから接続を確認する
環境変数を設定できたら、作業用ディレクトリを作り、OpenAIの公式SDKをインストールします。
mkdir openai-api-key-check
cd openai-api-key-check
npm init -y
npm install openai
同じディレクトリにtest.mjsというファイルを作り、次のコードを保存します。
APIキーはコードへ書かず、new OpenAI()がOPENAI_API_KEYを自動で読み込む形です。
import OpenAI from "openai";
const client = new OpenAI();
const response = await client.responses.create({
model: "gpt-5.6",
input: "接続確認とだけ返してください。",
});
console.log(response.output_text);
モデル名は2026年7月29日に確認したOpenAI公式クイックスタートの例に合わせています。 アカウントで利用できるモデルや公式サンプルが変わっている場合は、クイックスタートに掲載されている現在のモデル名へ置き換えてください。
次のコマンドで実行します。
node test.mjs
接続確認に近い応答が返れば、APIキー、環境変数、SDK、課金設定を含む最小経路が動いています。
このリクエストは短くてもAPI利用料金が発生する可能性があるため、繰り返し実行する必要はありません。
開発でAIコーディングツールを使うことが目的なら、APIキーを各ツールへ配る前に、AIコーディングツール6製品の比較で契約、権限、データの扱いを確認してください。
エラーが出たときの確認順
接続テストで止まった場合は、エラーメッセージを公開のチャットやIssueへ貼る前に、APIキーそのものが含まれていないかを確かめます。 そのうえで、次の順に切り分けます。
| 表示や症状 | まず確認すること | 対応 |
|---|---|---|
OPENAI_API_KEY is not set |
現在のターミナルに環境変数がない | read -sまたはキーチェーンからのexportをやり直す |
401、invalid_api_key |
キーの貼り付けミス、削除済みキー、別Projectのキー | API Keys画面で対象Projectとキーの状態を確認し、必要なら再発行する |
403、権限に関するエラー |
Restrictedで必要な権限が許可されていない |
キーの権限を確認し、使うAPIだけを許可する |
429、quotaやbillingのエラー |
クレジット残高、利用上限、レート制限 | Billing、Usage、ProjectのLimitsを確認する |
Cannot find package 'openai' |
SDKをインストールしたディレクトリと実行場所が違う | package.jsonがあるディレクトリでnpm install openaiを実行する |
| Keychainから読み込めない | service名またはaccount名が保存時と違う | -s "openai-api-key"と-a "$USER"が一致しているか確認する |
429には、短時間に送った量が上限を超えた場合と、課金残高や利用上限に達した場合があります。
同じ番号だけで原因を決めず、レスポンスのエラー種別とPlatformのUsage、Billing、Limitsを見比べてください。
.envを使う場合はGit管理から外す
開発中のフレームワークが.envを前提にしている場合は、APIキーをプロジェクト内の.envへ保存する方法もあります。
ただし.envは暗号化された保管庫ではなく、APIキーを含む通常のテキストファイルです。
作成前に.gitignoreへ登録し、ファイルの権限を所有者だけに絞ります。
printf '\n.env\n.env.*\n!.env.example\n' >> .gitignore
touch .env
chmod 600 .env
.env.exampleを共有する場合は、変数名だけを書き、実際のキーは入れません。
OPENAI_API_KEY=
コミット前には、少なくとも次のコマンドで追跡対象に入っていないことを調べられます。
git status --short --untracked-files=all
git check-ignore -v .env
git check-ignoreに.envのルールが表示されない場合は、コミット作業を止めて.gitignoreを見直してください。
チームや本番ではキーを共有しない
個人のAPIキーをSlack、メール、チャット、共有ドキュメントで渡すと、誰の利用か追いにくくなり、退職や異動のときに止める範囲も曖昧になります。 OpenAIも個人キーの共有を推奨していません。
複数人や本番システムで使う場合は、次の単位で分けます。
| 用途 | 推奨する分け方 | 保管先 |
|---|---|---|
| 個人のローカル検証 | 開発用Projectに紐づく本人のキー | macOS Keychain、承認済みのパスワード管理ツール |
| チーム開発 | メンバーをProjectへ追加し、各自のキーを発行 | 各自の端末の安全な保管先 |
| CI | CI専用のキーまたはサービスアカウント | GitHub ActionsなどのSecret機能 |
| 本番 | 本番Projectのサービスアカウント | クラウドのSecret ManagerやKey Management Service |
開発、ステージング、本番を別Projectにすると、利用量、モデル、レート制限、支出を環境ごとに確認できます。 本番アプリでは、ブラウザやiPhone、AndroidアプリへAPIキーを埋め込まず、自社のバックエンドからOpenAI APIを呼び出してください。
支出と利用状況を監視する
キーを発行したら、OpenAI PlatformのUsageとProjectのLimitsも設定します。 支出通知だけを設定した状態では、通知後もAPIリクエストが続く場合があります。 現在のOpenAI公式ヘルプには、監視だけのソフトな支出しきい値と、支出到達後にリクエストを失敗させる強制設定の両方が案内されているため、設定した上限がどちらとして動くかを画面で確認してください。
少なくとも、次の項目を運用開始前に決めます。
- Projectごとの月間支出額
- 50%、80%、100%など、異常に早く気づくための通知しきい値
- 通知を受け取るProject Owner
- 利用を許可するモデルとモデルごとのレート制限
- Usageを毎週または毎月確認する担当者
通知は、請求を必ず止める仕組みとは限りません。 「アラートを設定したから上限以上にはならない」と判断せず、強制設定の有無と実際のUsageを見比べます。
APIキーを入れ替える
APIキーは、漏洩が疑われたときだけでなく、担当者の変更や利用システムの廃止に合わせて入れ替えます。 固定の日数を守ることより、止めずに交換できる手順と、不要なキーを確実に削除できる状態が重要です。
- 同じProjectで新しいキーを発行します。
- 新しいキーをキーチェーン、CI、Secret Managerなどの利用先へ登録します。
- 新しいキーで接続確認を行います。
- 旧キーをOpenAI Platformで削除します。
- 旧キーでリクエストが通らないことと、Usageに異常がないことを確かめます。
本番では、先に新しいキーへ切り替え、動作を確認してから旧キーを削除すると停止時間を抑えられます。 個人のローカル検証だけなら、利用箇所が1つなので、旧キーを削除してから新しいキーへ置き換えても構いません。
漏洩したときは削除を最優先する
APIキーをGitHubへpushした、チャットへ貼った、画面共有に映した、知らない利用がUsageに出た場合は、漏洩の可能性があるものとして扱います。 OpenAIが公開されたキーを検知して無効化することはありますが、自動検知を待ってはいけません。
- API Keysで該当キーを直ちに削除します。
- Usageで不審な時間帯、Project、モデル、利用量を調べます。
- 新しいキーを発行し、必要な場所だけを更新します。
- リポジトリへ入れた場合は、ファイルから消すだけでなく、必要に応じてGit履歴からの除去とGitHubのSecret scanning結果を見ます。
- 不正利用が疑われる場合は、OpenAI Help Centerからサポートへ連絡します。
削除したキーは元に戻せません。 どのシステムが使っているか分からない状態を避けるため、キー名、Project、利用先、管理者、作成日、削除日だけを台帳に残し、キーの値そのものは記録しないでください。
APIキーを安全に扱う最短経路は、発行したキーを画面から直接コードへ貼らず、まず現在のターミナルのOPENAI_API_KEYへ入れることです。
継続利用するならmacOS Keychainへ移し、チームや本番ではProjectとサービスアカウントを分けます。