この記事では、PythonでAPIを使うときに必要になる APIキーを安全に管理する方法 を解説します。
APIキーをコードに直接書くと、GitHubへの誤公開やファイル共有によって第三者に漏れるリスクがあります。この記事では、.env と config.ini を使って、APIキーをコード本体から分離して管理する方法を紹介します。
この記事でできること
- APIキーをコードに直書きしない理由を理解する
.envを使ってAPIキーを読み込むconfig.iniを使って複数サービスのキーを管理する.gitignoreでAPIキー入りファイルを除外する- YouTube / Steam / OpenAI APIなどで使い回せる管理方法を整理する
想定読者
- PythonでAPIキーを扱う記事を実行したい方
- YouTube Data API、Steam Web API、OpenAI APIなどを使う予定がある方
- APIキーをコードに直接書いてよいのか不安な方
- GitHubなどに誤ってAPIキーを公開したくない方
APIキーをコードに直書きしない理由
APIキーは、外部サービスを利用するための認証情報です。サービスによっては、APIキーを使ってデータ取得、課金対象のリクエスト、利用量の管理などが行われます。
そのため、以下のようにコード内へ直接書く方法は避けた方が安全です。
API_KEY = "AIzaSyXXXXXXXXXXXXXXXXXXXXXXXXXXXX"このように書いてしまうと、ファイルを共有したり、GitHubへアップロードしたりしたときに、APIキーも一緒に公開される可能性があります。
APIキー直書きの主なリスク
- 第三者に不正利用される
APIキーが漏れると、自分のアカウントやプロジェクトの利用枠を使われる可能性があります。 - Gitの履歴に残る
一度コミットすると、後から削除しても履歴に残る場合があります。 - キーの差し替えが面倒になる
コード内に複数箇所書いていると、キー変更時の修正漏れが起きやすくなります。 - 複数環境で管理しづらい
ローカルPC、本番環境、検証環境で別のキーを使いたい場合に扱いづらくなります。
APIキー管理の基本方針
APIキーは、コード本体とは別ファイルに保存し、Python側から読み込む形にすると管理しやすくなります。
| 方法 | 向いている用途 | 特徴 |
|---|---|---|
.env | APIキーやトークンの管理 | シンプルで、多くのPythonプロジェクトで使いやすい |
config.ini | 複数サービスや設定値の管理 | セクションごとに設定を分けやすい |
| 環境変数 | 本番環境やサーバー運用 | ファイルにキーを置かずに管理できる |
個人の分析用スクリプトでは、まずは .env を使う方法がわかりやすいです。複数サービスのキーや設定値をまとめて管理したい場合は、config.ini も便利です。
方法1:.envでAPIキーを管理する
まずは、シンプルな .env を使う方法です。YouTube Data API、OpenAI API、Steam Web APIなど、1つずつキーを読み込む用途に向いています。
python-dotenvをインストールする
pip install -U python-dotenv.envファイルを作成する
Pythonスクリプトと同じフォルダに、.env というファイルを作成します。
YOUTUBE_API_KEY=YOUR_YOUTUBE_API_KEY
STEAM_API_KEY=YOUR_STEAM_API_KEY
OPENAI_API_KEY=YOUR_OPENAI_API_KEYYOUR_... の部分を、自分のAPIキーに置き換えてください。値を引用符で囲まなくても読み込めます。
Pythonから.envを読み込む
import os
from dotenv import load_dotenv
load_dotenv()
youtube_api_key = os.getenv("YOUTUBE_API_KEY")
steam_api_key = os.getenv("STEAM_API_KEY")
openai_api_key = os.getenv("OPENAI_API_KEY")
print("YouTube API key loaded:", youtube_api_key is not None)
print("Steam API key loaded:", steam_api_key is not None)
print("OpenAI API key loaded:", openai_api_key is not None)実際のAPIキーをそのまま print() で表示するのは避け、読み込めたかどうかだけ確認するのがおすすめです。
方法2:config.iniでAPIキーを管理する
config.ini は、セクションごとに設定を分けたい場合に便利です。たとえば、YouTube、Steam、OpenAIのようにサービスごとに設定を整理できます。
configparser はPythonの標準ライブラリなので、追加インストールなしで利用できます。
config.iniファイルを作成する
Pythonスクリプトと同じフォルダに、config.ini というファイルを作成します。
[YOUTUBE]
API_KEY = YOUR_YOUTUBE_API_KEY
[STEAM]
API_KEY = YOUR_STEAM_API_KEY
[OPENAI]
API_KEY = YOUR_OPENAI_API_KEY複数のサービスを扱う場合は、このようにセクションを分けると見通しがよくなります。
Pythonからconfig.iniを読み込む
from pathlib import Path
import configparser
config_path = Path("config.ini")
if not config_path.exists():
raise FileNotFoundError("config.ini が見つかりません。")
config = configparser.ConfigParser()
config.read(config_path, encoding="utf-8")
youtube_api_key = config["YOUTUBE"]["API_KEY"]
steam_api_key = config["STEAM"]["API_KEY"]
openai_api_key = config["OPENAI"]["API_KEY"]
print("YouTube API key loaded:", bool(youtube_api_key))
print("Steam API key loaded:", bool(steam_api_key))
print("OpenAI API key loaded:", bool(openai_api_key))この例では、config.ini が存在しない場合にエラーを出すようにしています。設定ファイルが見つからないまま処理が進むのを防げます。
.envとconfig.iniの使い分け
どちらもAPIキーをコードから分離する方法ですが、用途によって向き不向きがあります。
| 項目 | .env | config.ini |
|---|---|---|
| シンプルさ | 高い | やや設定向け |
| 複数サービスの整理 | 変数名で管理 | セクションで管理しやすい |
| Pythonでの読み込み | python-dotenv を使う | 標準ライブラリで読める |
| おすすめ用途 | APIキーやトークン管理 | APIキー以外の設定もまとめる場合 |
このサイト内の記事では、YouTube Data APIやOpenAI APIのようなAPIキー管理では .env を使う例を多めにしています。一方で、複数の設定値をセクションごとに整理したい場合は config.ini も有効です。
.gitignoreでAPIキー入りファイルを除外する
.env や config.ini にAPIキーを書く場合は、GitHubなどへ誤ってアップロードしないように .gitignore に追加しておきます。
.env
config.iniすでにGitで管理してしまった後に .gitignore へ追加しても、過去の履歴から完全に消えるわけではありません。APIキーを誤って公開した可能性がある場合は、キーを無効化して再発行するのが安全です。
サンプルファイルを共有する場合
他の人に設定例を共有したい場合は、本物のAPIキーを書いたファイルではなく、サンプル用のファイルを作ります。
たとえば、.env.example を作成します。
YOUTUBE_API_KEY=your_youtube_api_key_here
STEAM_API_KEY=your_steam_api_key_here
OPENAI_API_KEY=your_openai_api_key_hereconfig.ini を使う場合は、config.example.ini のような名前にします。
[YOUTUBE]
API_KEY = your_youtube_api_key_here
[STEAM]
API_KEY = your_steam_api_key_here
[OPENAI]
API_KEY = your_openai_api_key_here本物のキーを入れたファイルではなく、サンプルファイルだけを共有することで、手順を説明しながらキー漏洩を防ぎやすくなります。
APIキーを漏らしてしまった場合
APIキーをGitHub、ブログ記事、スクリーンショット、共有ファイルなどに載せてしまった場合は、以下の対応を検討します。
- 該当APIキーを無効化または削除する
- 新しいAPIキーを再発行する
- 利用状況や課金状況を確認する
- 必要に応じてAPIキーに制限を設定する
- 公開リポジトリや記事本文からキーを削除する
漏洩した可能性があるAPIキーは、そのまま使い続けない方が安全です。
YouTube Data APIで使う例
以下は、.env からYouTube APIキーを読み込み、YouTube Data APIを呼び出す最小例です。
import os
from dotenv import load_dotenv
from googleapiclient.discovery import build
load_dotenv()
api_key = os.getenv("YOUTUBE_API_KEY")
youtube = build("youtube", "v3", developerKey=api_key)
response = youtube.videos().list(
part="snippet,statistics",
id="dQw4w9WgXcQ",
).execute()
print(response.get("items", [])[0]["snippet"]["title"])YouTube Data APIの使い方は、以下の記事で詳しく紹介しています。
YouTube Data API v3入門|APIキー発行からPythonで動画情報を取得するまで
Steam Web APIで使う例
Steam Web APIキーも、同じように外部ファイルで管理できます。
Steam Web APIキーの取得方法は、以下の記事で紹介しています。
つまずきやすいポイント
.envやconfig.iniの保存場所が違う
Pythonスクリプトを実行している場所と、設定ファイルを置いている場所が違うと、読み込めない場合があります。まずはスクリプトと同じフォルダに置いて動作確認するのがおすすめです。
キー名がコードと一致していない
.env 側で YOUTUBE_API_KEY と書いているのに、Python側で YT_API_KEY を読みに行くと取得できません。ファイル側のキー名とコード側の名前を一致させてください。
APIキーをprintしてしまう
動作確認のためにAPIキーをそのまま表示すると、スクリーンショットやログに残る可能性があります。読み込めたかどうかは、api_key is not None や bool(api_key) で確認するのがおすすめです。
.gitignoreに追加する前にコミットしてしまった
一度公開リポジトリにAPIキーを含むファイルをコミットした場合、後から削除しても履歴に残る可能性があります。APIキーを再発行し、古いキーを無効化することを検討してください。
次に読む記事
- YouTube Data API v3入門|APIキー発行からPythonで動画情報を取得するまで
- YouTube Data APIでチャンネルの動画一覧を取得してCSV保存する方法
- Steam Web APIキーの取得方法
- Steam公式Web APIの使い方
まとめ
この記事では、PythonでAPIキーを安全に管理する方法として、.env と config.ini を使う方法を紹介しました。
APIキーはコードに直書きせず、外部ファイルから読み込む形にすると、漏洩リスクを下げつつ、複数サービスのキーを管理しやすくなります。個人の分析スクリプトではまず .env を使い、複数サービスの設定を整理したい場合は config.ini を使うとよいです。