はじめに
Streamlitアプリケーションで機密情報を安全に管理するための設定ファイルについて解説します。
概要
.streamlit/secrets.tomlは、APIキーやデータベース接続情報などの機密情報を安全に管理するための専用設定ファイルです。
主な用途
このファイルでは、以下のような機密情報を保存します。
- Google AI Studio APIキー
- データベース接続情報
- その他の認証情報
ローカル開発での使用方法
ファイル配置
プロジェクトルート直下に.streamlitディレクトリを作成し、その中に配置します。
プロジェクトルート/
├── .streamlit/
│ └── secrets.toml # ここに配置
├── app.py
└── ...
記述例
TOML形式で記述します。
# .streamlit/secrets.toml
GOOGLE_API_KEY = "your-actual-api-key-here"
アプリケーションでの読み込み
st.secretsを使って簡単に読み込めます。
import streamlit as st
# secrets.tomlから読み込み
api_key = st.secrets["GOOGLE_API_KEY"]
Streamlit Community Cloudでの使用
ローカルとデプロイ環境での使い分け
ローカル開発時:
-
.streamlit/secrets.tomlに記述 - Gitにはコミットしない(
.gitignoreで除外済み)
Streamlit Community Cloud:
- Web UIの「Secrets」セクションに同じ内容を入力
- ファイルをアップロードする必要はありません
.envファイルとの違い
両者の主な違いを整理しましょう。
| 項目 | .env | .streamlit/secrets.toml |
|---|---|---|
| 対象 | 汎用的な環境変数 | Streamlit専用 |
| 読み込み方法 | os.getenv() |
st.secrets[] |
| Streamlit Cloud | 手動で設定が必要 | 専用UIで簡単に設定 |
| フォーマット | KEY=value |
TOML形式 |
両方の方法に対応した実装
このプロジェクトでは、柔軟性を持たせるため両方の方法に対応しています。
import os
import streamlit as st
# まずst.secretsを試し、なければ環境変数から読み込む
def get_api_key():
try:
return st.secrets["GOOGLE_API_KEY"]
except:
return os.getenv("GOOGLE_API_KEY")
この実装のメリット
-
ローカル開発:
.envまたは.streamlit/secrets.tomlどちらでも利用可能 - デプロイ環境: Streamlit Cloudの「Secrets」設定を使用
セキュリティ上の注意点
絶対にGitにコミットしない
-
.gitignoreに既に記載済みですが、誤ってコミットしないよう注意してください - 特に公開リポジトリでは細心の注意が必要です
公開リポジトリでの対策
- README.mdにはサンプル設定のみ記載
- 実際のAPIキーは絶対に含めない
設定手順
実際に設定する流れを見ていきましょう。
ステップ1: ローカルファイル作成
mkdir -p .streamlit
touch .streamlit/secrets.toml
ステップ2: APIキーを記述
GOOGLE_API_KEY = "AIzaSy..."
ステップ3: Streamlit Community Cloudで設定
- アプリのダッシュボードを開く
- 「Settings」→「Secrets」を選択
- 同じ内容をコピー&ペースト
まとめ
.streamlit/secrets.tomlは、開発環境とデプロイ環境の両方で安全にAPIキーを管理するために重要な役割を果たします。特にStreamlit Community Cloudへのデプロイ時には、専用UIで簡単に機密情報を設定できる点が大きなメリットですね。
セキュリティを保ちながら、開発とデプロイの両方で柔軟に対応できる仕組みを理解しておくことが重要です。