よろずやIT
プログラミング

環境変数とは|.envファイルの役割と、APIキーを安全に扱う基本をやさしく解説

執筆・監修:よろずやIT編集部|編集方針を見る

結論:まずここだけ読めばOK

詳しい手順・原因は、この下で解説しています。

プログラミングのイラスト

結論: 環境変数は、プログラムの外側に置く「名前=値」の設定です。プログラムは、起動した時に、その値を読み取ります。接続先やAPIキーを、コードに直接書かず、環境ごとに値を入れ替えられるため、安全で、管理もしやすくなります。ローカルでは**.envファイル**に書き、GitHubに上げないのが、基本です。

環境変数とは

環境変数は、OSやサーバーなどの実行環境が持つ、「名前」と「値」のペアです。たとえば、次のようなものです。

名前 値(例) 意味
PATH プログラムが置かれているフォルダーの一覧 コマンドを、どこから探すか
NODE_ENV production 本番として動いているか
DB_URL データベースの接続先 どのデータベースにつなぐか

プログラムは、名前を指定して、値を読み取ります。コードの中には、値そのものを書きません。

何のために使うのか(3つの目的)

  1. **環境ごとに設定を切り替える:**自分のPC(開発)・確認用(プレビュー)・公開中(本番)で、接続先や設定が違う
  2. **秘密の情報を、コードに書かない:**APIキー、パスワード、トークンなどを、コードから切り離す
  3. **コードを変えずに、動きを調整する:**機能のオン・オフや、表示の設定を、値で切り替える

同じコードが、環境ごとに違う値を読み取って動く図解

.envファイルとは

ローカルで開発する時は、環境変数を、**.env(ドットエンブ)**という、テキストファイルにまとめて書く方法がよく使われます。

DB_URL=postgres://localhost/test
API_KEY=ここに、自分のキーを書く

コードから読み取る方法

言語ごとに、読み取り方が決まっています。

言語 読み取り方(例)
JavaScript(Node.js) process.env.API_KEY
Python os.environ["API_KEY"] または os.getenv("API_KEY")
PHP getenv("API_KEY")

変数そのものの考え方は、変数とはで解説しています。

してはいけないこと:キーの直書き

APIキーを、コードに直接書くと、そのコードを公開した時に、キーも一緒に公開されます。

キーの直書きとenvファイルの扱いを比べた図解

守る基本は、次の3つです。

  1. キーは、.envに書く
  2. .gitignoreに「.env」を書き、Gitの管理から外す
  3. GitHubには、値を空にした「.env.example」だけを上げる(必要な項目が分かるようにする)

Gitの基本は、Gitとはや、GitとGitHubの違いで解説しています。APIキーの考え方は、APIキーとはも参考になります。

GitHubに、キーを上げてしまったら

ファイルを消すだけでは、不十分です。Gitには履歴が残り、公開されていた間に、誰かがコピーしている可能性があります。

  1. そのキーを、発行元のサービスで、すぐに無効にする(再発行する)
  2. 使われた形跡がないか、利用状況・請求を確認する
  3. コードを直し、環境変数から読む形に変える
  4. 必要なら、履歴からも取り除く(消しても、すでに漏れたものとして扱う)

無効にして再発行するのが、最優先です。

Next.jsとVercelでの注意

Next.jsでは、環境変数の名前の付け方で、扱いが変わります。

NEXT_PUBLIC_を付けた変数と、付けない変数の違いの図解

**秘密のキーに、NEXT_PUBLIC_ を付けてはいけません。**公開してよい設定(サイト名や、公開用のIDなど)にだけ使います。

**Vercelでの設定:**プロジェクトの設定画面にある、「Environment Variables」(環境変数)の項目に、名前と値を登録します。Production(本番)、Preview(確認用)、Development(開発)ごとに、値を分けられます。

**値を変えたら、再デプロイが必要です。**特に、NEXT_PUBLIC_ の値は、ビルドの時に埋め込まれるため、変更しても、再デプロイするまで、反映されません。画面の名称は、更新で変わることがあります。

自分のPCで、環境変数を確認する

環境 確認の例
Windows(コマンドプロンプト) echo %PATH%
Windows(PowerShell) $env:PATH
Mac・Linux echo $PATH
すべての一覧(Mac・Linux) printenv

一時的に、設定したい時は、ターミナルを閉じるまで有効な方法があります。

OSの設定画面から、恒久的に設定する方法もあります(Windowsでは、「環境変数を編集」で検索)。

よくある失敗

失敗 原因・対処
値が、読み込まれない 変数名の打ち間違い。.envの場所(最上位か)。設定を変えたあとの、再起動・再デプロイ
本番でだけ、動かない 本番側に、環境変数を登録していない
キーが、画面に表示された NEXT_PUBLIC_ を付けていた。ログに出力していた
他の人の環境で、動かない .envは、GitHubに上げない。.env.exampleで、必要な項目を共有する
AIが作ったコードに、キーが書かれていた そのまま使わず、環境変数に直す(AIが作ったコードを、そのまま使わない理由)

環境変数の限界

環境変数は、コードへの直書きよりは安全ですが、万能ではありません。

重要な秘密情報は、クラウドサービスが提供する、秘密情報の管理機能を使う方法もあります。小さなサイトや、学習の段階では、まず、.envと.gitignoreの基本を、確実に身につけることが大切です。

まとめ

関連記事:APIキーとは、Gitとは、変数とは、Dockerとは、CI/CDとは

SHAREXLINEはてブ

よくある質問

Q.環境変数と、普通の変数は、何が違いますか?

A.普通の変数は、プログラムの中で作る、データを入れる箱です。環境変数は、プログラムの外側(OSやサーバーの設定)に置かれ、プログラムが、起動した時に読み取る値です。コードを書き換えずに、値だけを入れ替えられる点が違います。

Q..envファイルは、GitHubに上げてもいいですか?

A.上げてはいけません。APIキーやパスワードが書かれていることが多く、公開リポジトリなら、誰でも見られてしまいます。.gitignoreに「.env」を書いて、Gitの管理対象から外します。代わりに、値を空にした「.env.example」を上げておくと、他の人が、必要な項目を把握できます。

Q.GitHubに、キーを上げてしまいました。どうすればいいですか?

A.ファイルを消すだけでは、不十分です。履歴に残るうえ、すでに誰かにコピーされた可能性があります。まず、そのキーを、発行元のサービスで無効にして、再発行してください。そのあとで、コードを修正し、必要なら履歴からも取り除きます。

Q.Next.jsで、環境変数が読み込まれません。

A.次の3つを確認してください。変数名が、NEXT_PUBLIC_で始まっているか(ブラウザ側で使う場合)、.envファイルが、プロジェクトの最上位にあるか、設定を変えたあとに、開発サーバーの再起動(本番は再デプロイ)をしたか。NEXT_PUBLIC_の値は、ビルドの時にコードへ埋め込まれるため、値を変えたら、ビルドし直す必要があります。

Q.環境変数に入れておけば、絶対に安全ですか?

A.いいえ。コードに直書きするより安全ですが、ログに出力したり、画面に表示したり、同じ環境の他のプログラムから読み取られたりすると、漏れます。重要な秘密情報は、クラウドサービスが提供する、秘密情報の管理機能(シークレット管理)で扱う方法もあります。

関連記事

最新のIT関連書籍 トップ10

PR / 楽天市場の売れ筋ランキングを定期的に取得しています。価格は変動する場合があるため、購入前に各ストアでご確認ください。