API Key/Secret の管理方法

Botを作っているとき、API Key / Secret をソースコードにべた書きしていませんか?
そのソースコードをそのままどこかへアップロードしてしまったことはありませんか?


私はあります 😇


そこで、そういったミスを回避するために私が取っている1つの管理方法についてメモしておこうと思います(Twitterでも話題になっていたので)。
あくまでも1つの方法なので、他にもあります。各自扱いやすく、要件にあったレベルで対応すれば良いかと思います。

今回の前提

・Pythonの例
・git管理

ファイル構成

.gitignore
config.json
config_sample.json
config.py
main.py

方針

  • 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の差分に一々含まれず管理しやすい為おすすめです。

それでは。


いいなと思ったら応援しよう!