YutaKaのPython教室

Python の文法やライブラリ、API、環境構築について画像・動画・ソースコード付きで徹底解説!

Pythonで APIキーやパスワードを環境変数に置いて使う方法

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()を使用して読み込む方法を紹介しました。

初めは環境変数を読み込むなんてどうするんだ?!と思うかもしれませんが、慣れてしまうと簡単ですね。

この方法をしっかりマスターして、プログラム上に直接書き込むことのないよう、注意してください!