API Key/Secret の管理方法
Botを作っているとき、API Key / Secret をソースコードにべた書きしていませんか?
そのソースコードをそのままどこかへアップロードしてしまったことはありませんか?
私はあります 😇
そこで、そういったミスを回避するために私が取っている1つの管理方法についてメモしておこうと思います(Twitterでも話題になっていたので)。
あくまでも1つの方法なので、他にもあります。各自扱いやすく、要件にあったレベルで対応すれば良いかと思います。
今回の前提
ファイル構成
方針
config.json に実際の Key / Secret を書く
.gitignore で config.json を指定することでgit管理下から除外
config.json の代わりに config_sample.json を用意しフォーマットを指定
main.py では Config class をinstance化するだけで Key / Secret が使える
各ファイルの実装
.gitignore
config.json
実際の API Key / Secret が書かれる config.json を指定しておく
config.json
{
"api_key": "実際のAPI_KEY",
"api_secret": "実際のAPI_SECRET"
}
.gitignore で指定されているので、git管理下からは除外される
→ githubなどのプラットフォームへ誤ってアップロードする心配が無くなる
config_sample.json
{
"api_key": "",
"api_secret": ""
}
このファイルをコピーして config.json にリネーム
→ API Key / Secretを入力
config.py
initializerで config.json を読み込み、instanceのプロパティへパースする
import json
class Config:
def __init__(self, json_path="config.json"):
config = json.load(open(json_path, "r"))
self.api_key = config["api_key"]
self.api_secret = config["api_secret"]
main.py
Configの使用例
Config classを初期化するだけであとはプロパティからkeyとsecretを引っ張ってくることが出来るようになる
#!/usr/bin/python3
# coding: utf-8
from pybitflyer import API
from config import Config
def main():
config = Config()
client = API(
api_key=config.api_key,
api_secret=config.api_secret,
)
if __name__ == "__main__":
main()
===============
以上です!
ちなみに、同様にしてyamlでも実現できます。
追記 [2022/01/27] yamlの場合はコメントを書けるので今はこちらに統一しています。
また、 API Key / Secret だけでなくBotのパラメータを同様に扱うのも、gitの差分に一々含まれず管理しやすい為おすすめです。
それでは。