はじめに
大学の授業で、入力されたアーティストと近しいアーティストのネットワーク図を作成するシステムを作ったので、今回は個人的な趣味で、そのシステムを発展させてWebアプリケーションを開発しました。その際、APIのアクセスキー(環境変数)をコードに直接記述してGitHubに(publicで)上げてしまうと情報セキュリティの問題があると気付き、環境変数をセキュアに管理する方法を調べたので、その備忘録を残します。
方法
.env
ファイルを使用します。
具体的には、python-dotenv
モジュールを使用して.env
ファイルを読み込みます。
.env
ファイルを使用することのメリットは以下の通りです。
- 環境変数を一元管理でき、設定の変更や追加が簡単になる
- データベースの接続情報やAPIキーなどの機密情報をソースコードに直接書かずに済むため、セキュリティが向上する(
.gitignore
ファイルに.env
を記述することで、GitHub上に公開されずに済みます。.gitignore
ファイルの作成は後述) - チームで開発する際に、個々の開発者が自身の環境に合わせた.envファイルを用意することで、他の開発者や本番環境の設定に影響を与えることなく作業できる
手順
1. python-dotenvモジュールをインストールする
$ pip install python-dotenv
コマンドプロンプト上あるいはVSCodeのターミナル上で、pip
コマンドを使用して、python-dotenv
モジュールをインストールします。
2.「.env」ファイルを作成する
ルートディレクトリの直下に以下の.env
ファイルを作成します。
自分の場合は前回記事で紹介したWebアプリケーションのプロジェクトがあるので、以下のようになります。
{プロジェクト名}/
├── static/
│ └── style.css
├── templates/
│ └── index.html
│ └── result.html
│ └── error.html
├── app.py
└── .env
自分はSpotify APIを使用していたので、.env
ファイルにそのクライアントIDとシークレットキーを記述しました。
export SPOTIFY_CLIENT_ID='XXXXXXXXXXXX'
export SPOTIFY_CLIENT_SECRET='YYYYYYYYYYY'
3.「.env」ファイルを読み込む
from dotenv import load_dotenv
import os
# .envファイルから環境変数を読み込む
load_dotenv()
#SpotifyAPIのアクセストークン情報
# 環境変数からSpotify APIのクライアントIDとシークレットを取得
client_id = os.getenv('SPOTIFY_CLIENT_ID')
client_secret = os.getenv('SPOTIFY_CLIENT_SECRET')
print(client_id) #client_idが表示される
print(client_secret) #client_secretが表示される
load_dotenv()
を使用して.env
ファイルを読み込みます。これにより、.env
ファイルに書かれたアクセストークン情報が環境変数に設定されます。
そして、os.getenv()
を使用して環境変数の値を取得します。print
文で適切に表示されることを確認してください。該当の環境変数が存在しない場合、Noneが返されます。
「.gitignore」ファイルの作成
gitで管理する場合に.gitignore
ファイルを作成し、その中にファイル名を書くことで、書かれたファイル名をgitの管理対象から外すことができます。
手順としては以下の通りです。ルートディレクトリの直下に以下の.gitignore
ファイルを作成します。
{プロジェクト名}/
├── static/
│ └── style.css
├── templates/
│ └── index.html
│ └── result.html
│ └── error.html
├── app.py
├── .env
└── .gitignore
.env
上記のように作成することで、GitHubにpublicでプロジェクトを公開しても、.gitignore
ファイルのおかげで、.env
ファイルは公開されずに済みます。
終わりに
今回は、APIアクセストークンなどの環境変数のセキュアな管理方法についてまとめました。次回以降では、GitやDockerの操作方法などを書こうと思います。
参考文献
以下の記事を参考にしました。ありがとうございました。