Pythonの環境変数の使い方を徹底解説!設定・取得・削除からdotenv活用まで
異なる環境で開発を行う際、環境ごとに異なる設定値を指定したい場面がよくあります。アプリケーションを開発したマシンと、実際にデプロイするマシンは同じではないからです。
そんなときに役立つのが「環境変数」です。
この記事では、環境変数とは何か、そしてその具体的な使い方について詳しく解説します。Pythonでの実例も交えて紹介するので、ぜひ参考にしてください。
環境変数とは?
環境変数とは、プログラムの外部で値が設定される変数のことです。
環境変数を使えば、アプリケーションを動作させる環境に応じて、同じ変数に異なる値を設定できます。
なぜ環境変数が使われるのか?
多くのアプリケーション、特にチームで開発するものには、複数の異なる環境が存在します。テスト用、本番用、開発用など、それぞれの環境で異なる設定値が必要になるのが一般的です。
例えば、本番環境で使用するAPIキーは、ローカルマシンで使うものとは異なるはずです。開発中はローカル環境でダミーデータを使っても問題ありませんが、それを本番環境に持ち込むのは適切ではありません。
環境変数の値は、プログラムのコードを変更することなく差し替えられます。つまり、環境ごとに設定値を書き換える手間なく、コードの変更を簡単にデプロイできるのです。
また、環境変数はセキュリティ対策としても重要です。APIキーや設定値をメインプログラム内に直接記述すると、プロジェクトに関わる全員がその内容を見られてしまうリスクがあります。環境変数として値を保持すれば、そのプログラムと変数を設定した開発者だけがアクセスできるようになります。
環境変数の設定方法
まず、環境変数を作成してみましょう。なお、ここで設定した環境変数はPythonセッションが終了すると失われます。つまり、Pythonインタープリタを閉じると、スクリプト内の変数はリセットされる点に注意してください。
ここでは、Airtable APIを使用するアプリを開発していると想定します。コードをGitHubで共有したいので、APIキーが公開されないようにしたいところです。そこで、APIキーを公開せずにコードへ組み込むために、環境変数を活用します。
最初のステップは、osライブラリをインポートすることです。
import os
このライブラリには、Pythonの環境変数を操作するための機能が含まれています。次に、環境変数を設定しましょう。
os.environ["AIRTABLE_KEY"] = "YOUR_API_KEY"
このコードは、AIRTABLE_KEYという変数を設定し、その値をYOUR_API_KEYにしています。環境変数への代入は、辞書の値を変更する方法とよく似ています。
設定または変更したい変数名を指定し、イコール記号(=)を挟んで、代入したい値を記述するだけです。
同じ構文で既存の環境変数を変更することもできます。
os.environ["AIRTABLE_KEY"] = "YOUR_API_KEY_2"
これでAPIキーの値がYOUR_API_KEY_2に更新されました。
環境変数の取得方法
環境変数を設定できたら、次に気になるのは「値をどうやって取得するか」ですね。そこで活躍するのがos.environ.get()メソッドです。
AIRTABLE_KEY変数の値を取得してみましょう。
api_key = os.environ.get("AIRTABLE_KEY")
print(api_key)
このコードでは、AIRTABLE_KEY環境変数の値を取得し、api_keyという新しい変数に代入して、コンソールに出力しています。
実行結果は YOUR_API_KEY_2 となります。
設定済みのすべての環境変数の一覧を確認したい場合は、os.environの中身をコンソールに出力します。
print(os.environ)
なお、Pythonにはデフォルトで設定されている環境変数が多数存在するため、すべてを出力すると長いリストが表示されることがあります。
環境変数の削除方法
Pythonプロジェクト内の環境変数は削除できます。これにはos.environ.pop()メソッドを使用します。AIRTABLE_KEY環境変数を削除してみましょう。
os.environ.pop("AIRTABLE_KEY")
このコードは、AIRTABLE_KEY環境変数を削除します。
ただし、複数の環境変数をまとめてクリアしたい場合、この方法はやや非効率です。プロジェクトの新しいインスタンスを開始するときや、セッション内のすべての環境変数をリセットしたいときは、上書きすべき値が何十個にも及ぶ可能性があります。
そんなときに便利なのがclear()メソッドです。セッション内のすべての環境変数を一括削除してみましょう。
os.environ.clear()
print(os.environ)
このコードはすべての環境変数の値をクリアし、その後、セッション内の環境変数のリストを出力します。結果は以下の通りです。
{}
注意点として、Pythonはプロジェクトに必要となる可能性のあるデフォルトの環境変数をいくつか設定しています。
そのため、clear()メソッドは、プログラム内のどの環境変数ももう必要ないと確信できる場合にのみ使用してください。特定の変数だけを操作できるpop()メソッドの利用が、より安全で推奨される方法です。
dotenvを使った環境変数の設定方法
dotenvライブラリは、環境変数を管理するための便利な機能を多数提供しています。
特に注目すべきは、dotenvを使うとファイルから環境変数を読み込める点です。これにより、Pythonシェル内でいちいち環境変数を宣言する必要がなくなります。
モジュールファイルから環境変数を読み込む方式は、扱う値が多い場合に特に便利です。また、変数の値を変更する必要が生じたときも、管理が格段に楽になります。
dotenvパッケージを使用するには、まずインストールが必要です。easy_installまたはpipでインストールできます。
それでは、環境変数を定義していきましょう。まず、.envというファイルを作成します。コマンドラインからtouchコマンドで作成できます。
touch .env
.envファイルを開き、以下の内容を追記します。
AIRTABLE_KEY=YOUR_API_KEY_3
環境変数は他の変数と同じように代入します。イコール記号の左側に変数名、右側にその変数が格納する値を記述します。この2つの値はイコール記号で区切られます。
次に、この変数をファイルから読み込みます。
from dotenv import load_dotenv
load_dotenv()
このコードは、dotenvライブラリからload_dotenv()メソッドをインポートして実行します。これにより、.envファイル内のすべての変数が環境に読み込まれます。
続いて、osライブラリを使って変数を取得してみましょう。
import os
api_key = os.environ.get("AIRTABLE_KEY")
print(api_key)
実行結果は YOUR_API_KEY_3 です。APIキーは.envファイル内に設定されていましたが、load_dotenv()メソッドが環境変数を読み込み、os.environ経由でアクセス可能にしてくれました。
まとめ
環境変数は、プログラムの外部で値を設定・構成するために使われる事前定義の値です。異なる環境を切り替えるためによく活用されることから、「環境変数」という名前が付いています。
また、環境変数は機密情報を安全に管理する手段でもあります。APIキーをアプリケーションのコードに直接記述すると、コードを目にした全員がその値を読めてしまいます。環境変数に設定しておけば、自分とプログラムだけがその値にアクセスできるのです。
これで、あなたもプロフェッショナルのようにPythonコードで環境変数を扱えるようになりました。ぜひ実際の開発に取り入れてみてください。
-
Rubyで環境変数を使う方法|ENVオブジェクトの操作から設定・Rails credentialsまで徹底解説
環境変数とは、次のような「キーと値」のペアとして表されるデータのことです。 KEY=VALUE この変数は、パソコン上で動くすべてのプログラム間で設定情報(コンフィグ)を共有するために使われています。 だからこそ、環境変数がどのような仕組みで動作し、Rubyプログラムから特殊な ENV オブジェクトを使ってどうアクセスするのかを学んでおくことが大切なのです。 環境変数の活用例 デフォルトエディターの設定 Rubyにgemの保存場所を伝える(GEM_PATH / GEM_HOME) APIキーをGitリポジトリにコミットすることなくアプリケーションへ渡す OSがバイナリファイル(Windo
-
Windows 10 で環境変数を設定・編集する方法を初心者向けに解説
環境変数とは、PC上で動作するプログラムの設定に使われるグローバルな値のことです。名前だけ聞くと難しく感じられますが、実際には「さまざまなアプリが共通して参照できる設定情報の保管場所」と考えると分かりやすいでしょう。 環境変数にはユーザーごとに紐づくものがあり、ユーザーアカウントが異なれば設定内容も変わります。その一方で、「%windir%」のようなシステム全体で共通の変数も存在します。たとえば「%windir%」は、Windowsがインストールされているディレクトリ(例:「C:\Windows」)を常に指します。アプリ側ではこの値を直接ハードコードせず、「%windir%」を参照することでW