Pythonに限らず、APIキーやパスワードなどの機密情報はコードに直接書き込まない方が良いと言われています。
この記事では、Pythonコードで環境変数に保存したAPIキーやパスワードを読み込む方法について次の内容を解説しています。
- そもそもなぜ、環境変数にキーやパスワードを置くのでしょう?
- 環境変数に置いたキーやパスワードを保存する方法は?
- 保存した環境変数をPythonコードの中で読み取る方法は?
これらの内容を理解して、環境変数においたキーやパスワードを適切に扱えるようになりましょう!
環境変数にキーやパスを置く理由
APIキーやパスワードなどの機密情報を直接プログラムに書き込むことは、基本的に避けた方が良いと言われています。
そもそも、なぜわざわざ環境変数を使用するのでしょうか?
これには次のような理由があります。
- コードを公開/共有等する際に、機密情報が漏洩する危険性がある
- キーやパスが変更される度に、コード自体を書き換えないといけない
そのため、APIキーやパスワードは環境変数に保存し、それをプログラムから読み込むが方法を取ることが多いです。
以下では、次の順番で手順を詳しく解説していきます。
- 環境変数にキーを登録する方法
- Pythonコードの中で環境変数の値を取得する方法
ステップ1:環境変数にキーを登録
まずは、プログラムから読み取りたい機密情報(キーやパスワード)を環境変数に登録しましょう。
環境変数を登録するには、「環境変数」の編集ウィンドウを開いて、手入力で登録するのが楽です。
① タスクバーの検索ボックスに「環境変数」と入力 ② 「システム環境変数を編集」をクリック
③「システムのプロパティ」ウィンドウ内の「環境変数」をクリック
④「ユーザー環境変数」または「システム環境変数」の新規をクリック
各環境変数の主な違いは次の通りです。個人で使用している分には、どちらでも大差ないです。
ユーザー環境変数 | システム環境変数 | |
---|---|---|
編集に管理者権限が必要か | 不要 | 必要 |
アクセスできる人の範囲 | ログインしたユーザ | 同じPCを使用する人 |
⑤「変数の編集」ダイアログボックスで、変数名と変数値を追加しましょう
ステップ2:Pythonコードで環境変数を読み込む
Pythonコードで、環境変数を読み込む方法を紹介します。
os
モジュールのgetenv()
関数を使用します。
os.getenv('環境変数名')
api_key
という変数に"API_KEY_SAMPLE"
という環境変数を読み込むサンプルコードを実行してみます。
import os
api_key = os.getenv('API_KEY_SAMPLE')
print(api_key)
# sample_value
APIキーやパスワードなどの機密情報は、このようにして環境変数からPythonコードに渡すようにするといいですね
環境変数を使ったプログラムの実装例
天気情報を取得できるOpenWeatherというサービスのAPIを使用してみる例を紹介します。
このコードの中でも環境変数からAPIキーを取得している点に注目してください。
import os
import requests
# 環境変数にあるAPI_KEYを取得
api_key = os.getenv('API_KEY')
# 都市名を入れると、OpenWeatherから天気情報を取得する関数
def get_weather_data(city):
url = f'https://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}'
response = requests.get(url)
return response.json()
# 実行例:東京の天気を取得
res = get_weather_data("tokyo")
# 天気は?
res["weather"]
# [{'id': 803, 'main': 'Clouds', 'description': 'broken clouds', 'icon': '04n'}]
# 気温は?
res["main"]["temp"]
# 289
コードにAPIキーを記入していないので、元のコードをそのまま記載することができていますね。
まとめ
今回は、PythonでAPIキーやパスワードなどの機密情報を環境変数に保存して、os.getenv()
を使用して読み込む方法を紹介しました。
初めは環境変数を読み込むなんてどうするんだ?!と思うかもしれませんが、慣れてしまうと簡単ですね。
この方法をしっかりマスターして、プログラム上に直接書き込むことのないよう、注意してください!