0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

環境変数の扱いについて

Posted at

【Python】APIキーどうしてる?.envを使って環境変数を安全に管理する方法

はじめに

この記事は,筆者にとってのQiita初投稿である.

Pythonで開発をしていると,APIキーやデータベースの接続情報など,ソースコードに直接書きたくない(書くべきではない)情報が頻繁に登場する.

「テスト中はベタ書きしてたけど,これってGitHubに上げちゃって大丈夫だっけ...?」
「他の人にコードを渡すとき,設定箇所を毎回説明するのが面倒...」

本稿では,このような悩みを解決するため,.envファイルとpython-decoupleライブラリを使って,秘匿情報を安全かつスマートに管理する方法を解説する.

本稿の目的

  • 環境変数をプロジェクト内で安全に扱う方法を解説すること.
  • (個人的な目的として)Qiitaへの技術記事投稿に挑戦すること.

そもそも環境変数とは?

環境変数とは,**「プログラムの外部で設定し,コードの中から参照できる値」**のことである.

APIキーやパスワードといった秘匿すべき情報をソースコード内に直接記述する代わりに,外部のファイルやOSに設定を保存するために使われる.

なぜ必要か?

  • セキュリティの向上: ソースコードをGitHubなどの公開リポジトリで管理する場合,APIキーなどがハードコーディングされていると,第三者に不正利用される危険性がある.
  • 設定の分離: 開発環境と本番環境でデータベースの接続先が違うといったケースでも,コードを書き換えることなく設定を切り替えられる.

python-decoupleを使った安全な管理方法

ここでは,Pythonで開発を行う場合を想定し,具体的な手順を解説する.

STEP 1: ライブラリのインストール

まず,環境変数を読み込むためのライブラリpython-decoupleをインストールする.

pip install python-decouple

STEP 2: .env ファイルに環境変数を定義

次に,プロジェクトのルートディレクトリに.envというファイルを作成し,環境変数をキー=値の形式で記述する.

.env
# APIキー
XX_API_KEY=09abcdefg12345
YY_API_KEY=m*hijklmn67890

# アプリ設定
DEBUG=True
TIMEOUT_SEC=15
BASE_URL=[https://api.example.com](https://api.example.com)

⚠️このファイルには実際の値を記述するため,Gitなどで公開してはならない.

STEP 3: .gitignore.envを追加【最重要】

作成した.envファイルがGitの管理対象に含まれないようにする.これはセキュリティ上,極めて重要な手順である.

.gitignoreファイルに.envを必ず追記すること.
これにより,誤ってGitHubに機密情報をプッシュしてしまう事故を防げる.

.gitignore
# 環境変数ファイル
.env

# (その他,venvや__pycache__など)
venv/
__pycache__/
*.pyc

もし.gitignoreファイルがなければ,新しく作成すること.

STEP 4: Pythonコードで環境変数を読み込む

準備が整ったため,Pythonコードから環境変数を読み込む.
decoupleライブラリのconfig()関数を使用する.

main.py
from decouple import config

# .envファイルから環境変数を読み込む

# 必須のキー(.envに定義がないとエラーとなる)
XX_API_KEY = config("XX_API_KEY")

# デフォルト値や型変換も可能
# DEBUGキーが未設定ならFalseを使い,型はbool型に変換する
DEBUG = config("DEBUG", default=False, cast=bool)
TIMEOUT_SEC = config("TIMEOUT_SEC", default=30, cast=int)
BASE_URL = config("BASE_URL", default="[https://api.default.com](https://api.default.com)")


# --- 動作確認 ---
if __name__ == "__main__":
    # 実際のAPIキーは表示しないように注意すること
    print(f"XX_API_KEY is loaded: {'*' * 10}") 
    print(f"DEBUG: {DEBUG} (type: {type(DEBUG)})")
    print(f"TIMEOUT_SEC: {TIMEOUT_SEC} (type: {type(TIMEOUT_SEC)})")
    print(f"BASE_URL: {BASE_URL}")

config() 関数の便利な機能

  • 必須項目の設定: config("キー名") と記述するだけで,もし.envにそのキーが存在しない場合,プログラムが例外(UndefinedValueError)を発生させるため,設定漏れにすぐ気づける.
  • デフォルト値: default引数を指定すれば,キーが存在しない場合の初期値を設定できる.
  • 型変換: cast引数を使うと,.envファイル内では全て文字列として扱われる値を,bool型やint型など,適切なデータ型に自動で変換する.DEBUGフラグの管理などが非常に容易になる.

まとめ

今回は,python-decoupleライブラリを用いて,環境変数を安全に管理する方法を紹介した.
以下のポイントを確実に実践することで,安全でクリーンな開発を心がけるべきである.

  • .envファイルに秘匿情報を記述する
  • .gitignore.envファイルを管理対象から除外する
  • コードからはconfig()関数で読み込む
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?