はじめに
Streamlitは、インタラクティブなウェブアプリケーションを簡単に作成できる便利なフレームワークです。APIを使ったプロジェクトでシークレットキー(APIキーなど)を使用することが多いですが、GitHubにコードを公開する際、シークレットキーを誤ってハードコーディングしてしまうと非常に危険です。
この記事では、OpenAIのAPIキーをStreamlitで設定し、GitHubのパブリックリポジトリでも安全にプロジェクトを管理する方法を解説します。
Step 1: OpenAIのAPIキーを取得
まず、OpenAIのサイトからAPIキーを取得します。OpenAIのAPIを利用するにはアカウントを作成し、APIキーを生成する必要があります。
- OpenAIにサインアップまたはログイン
- APIキーのページにアクセスし、新しいキーを生成
- 生成されたAPIキーをコピー
Step 2: .streamlit/secrets.toml
ファイルでAPIキーを管理
Streamlitでは、.streamlit/secrets.toml
というファイルを使用して、シークレットキーを管理することが推奨されています。このファイルはGitHubに公開せず、ローカル環境やデプロイ環境でのみ利用します。
.streamlit/secrets.toml ファイルの作成
プロジェクトのルートディレクトリに .streamlit
フォルダを作成し、その中に secrets.toml
ファイルを作成します。
mkdir .streamlit
touch .streamlit/secrets.toml
次に、このファイルにOpenAIのAPIキーを設定します。
[openai]
api_key = "your-openai-api-key-here"
この secrets.toml
ファイルには他のシークレット情報も管理できます。
Step 3: st.secrets
を使ってAPIキーを取得
Streamlitでは、st.secrets
オブジェクトを使って .toml
ファイルからシークレットキーを読み込むことができます。
例えば、以下のようにOpenAI APIキーを安全に読み込むことが可能です。
import openai
import streamlit as st
# secrets.tomlファイルからAPIキーを取得
api_key = st.secrets["openai"]["api_key"]
# OpenAI APIに接続
openai.api_key = api_key
st.title("OpenAI APIを使ったStreamlitアプリ")
prompt = st.text_input("ChatGPTに質問を入力してください:")
if prompt:
response = openai.Completion.create(
engine="text-davinci-003",
prompt=prompt,
max_tokens=50
)
st.write(response.choices[0].text.strip())
このようにすることで、APIキーがコード中にハードコーディングされることなく、安全に利用できます。
Step 4: .gitignore
で secrets.toml
をGitHubに公開しないように設定
次に、.streamlit/secrets.toml
ファイルが誤ってGitHubにアップロードされないように、.gitignore
ファイルで除外します。
.gitignore
ファイルに以下の行を追加します。
.streamlit/secrets.toml
この設定により、Gitに.streamlit/secrets.toml
が追加されるのを防ぎます。
Step 5: Streamlit Cloudにデプロイする際のシークレットキー設定
Streamlit Cloud(または他のクラウドサービス)にアプリをデプロイする際、.streamlit/secrets.toml
はアップロードされませんが、クラウド環境でシークレットを安全に設定する方法があります。
Streamlit Cloudでのシークレット設定方法
- Streamlit Cloudのダッシュボードにアクセス
- デプロイしたアプリの「Secrets」セクションに移動
- secrets.toml の内容と同様に、シークレットキーを設定します。
例えば、以下のようにOpenAIのAPIキーを登録します。
[openai]
api_key = "your-openai-api-key-here"
これで、デプロイ環境でもローカル環境と同様に st.secrets["openai"]["api_key"]
を使ってAPIキーを取得できます。
まとめ
GitHubのパブリックリポジトリでプロジェクトを公開しつつ、シークレットキーを安全に管理するためには、secrets.toml
ファイルや環境変数を活用することが重要です。
-
.streamlit/secrets.toml
ファイルでシークレットキーを管理 -
.gitignore
に.streamlit/secrets.toml
を追加し、公開しないように設定 - Streamlit Cloudなどにデプロイする際は、クラウドのシークレット管理機能を使用
これにより、シークレットキーを安全に管理しながら、StreamlitアプリでAPIを活用できます。