
AIアプリ開発入門 第4回|作ったアプリを世界に公開しよう(デプロイとAPIキーの隠蔽)
前回までで、自分のパソコンの中(ローカル環境)で動くAIアプリが完成しました。しかし、今のままでは自分しか使えません。
今回は、このアプリを「Streamlit Community Cloud」という無料のサーバーに乗せて、世界中の誰でもスマホやPCからアクセスできるようにする方法(デプロイ)を解説します。また、その際に絶対にやってはいけない「APIキーの漏洩」を防ぐためのセキュリティ対策についても学びます。
1. 2つのファイルの役割(設計図と道具リスト)
アプリをクラウドで動かすためには、単にPythonのコードだけを渡しても動きません。クラウド上のサーバーに「このアプリを動かすには、どの道具(ライブラリ)が必要か」を教えてあげる必要があります。
そのため、必ず以下の2つのファイルをセットで用意します。
app.py(設計図)- これまで書いてきた、画面の構成やAPI処理が書かれたメインのプログラムです。
requirements.txt(道具のリスト)- メモ帳などで作成し、アプリで使うライブラリの名前だけを箇条書きにしたテキストファイルです。
- 今回の場合は
streamlitとgoogle-generativeaiの2行だけを書きます。
クラウドサーバーは、起動する前にまず requirements.txt を読み込み、必要な道具を自動的にインストールしてから app.py を実行してくれます。
2. GitHub(ギットハブ)の役割
次に、この2つのファイルを「GitHub」というサービスに保存(プッシュ)します。
なぜ直接Streamlit Cloudにファイルをアップロードしないのでしょうか?それには2つの理由があります。
- 金庫としての役割:コードの変更履歴がすべて残り、過去の状態にいつでも戻せるためです。
- 司令塔としての役割:GitHubにコードを置いておけば、Streamlit Cloud側が「GitHubに変更があったか」を常に監視し、コードが書き換わったら自動でクラウド上のアプリも最新版にアップデート(再デプロイ)してくれます。
現代のWeb開発では、このように「コードの保管場所(GitHub)」と「アプリを動かす場所(クラウド)」を分けるのが標準的なルールになっています。
3. 【重要】APIキーの隠蔽(Secrets機能)
GitHubにコードをアップロードする際、絶対にやってはいけないことがあります。それは、app.py の中にAPIキーを直接書き込んだまま公開してしまうことです。
python# ❌ 絶対にやってはいけない書き方
genai.configure(api_key="自分の本物のキー")
もしこれをGitHubの公開リポジトリにアップロードしてしまうと、世界中の人があなたのAPIキーを盗み見て、あなたに高額な請求が来る可能性があります。これを防ぐために、Streamlitの「Secrets(シークレット)」機能を使います。
安全な書き方
Pythonのコードは以下のように書き換えておきます。
python# ⭕️ 安全な書き方(Streamlitの隠し金庫から鍵を取り出す指示)
api_key = st.secrets["GEMINI_API_KEY"]
genai.configure(api_key=api_key)
この状態のコードをGitHubにアップロードします。これなら、誰が見てもAPIキーの本体は分かりません。
4. Streamlit Cloudへのデプロイ手順
準備が整ったら、いよいよクラウドへ公開します。手順は非常に簡単です。
- GitHubと連携する
Streamlit Community Cloud にアクセスし、GitHubアカウントでログインします。 - アプリの作成
画面右上の「Create app」を押し、「Deploy a public app from GitHub」を選択します。 - リポジトリの指定
先ほどファイルを保存したGitHubのリポジトリ(例:あなたの名前/ai-app)を選択します。 - 【重要】Secrets(本物のAPIキー)の登録
画面下部の「Advanced settings…」を開き、「Secrets」という入力欄に以下のように本物のAPIキーを登録します。 textGEMINI_API_KEY = "自分の本物のキー" - デプロイ!
「Deploy!」ボタンを押すと、風船が飛ぶアニメーションとともにサーバーの構築が始まります。1〜2分待てば、あなた専用の公開URLが発行され、アプリが世界中で使えるようになります!
5. よくあるエラーと解決策
デプロイ時に赤いエラー画面が出てしまった場合は、以下の原因を疑ってください。
ModuleNotFoundError: No module named 'google'- 原因:
requirements.txtの書き間違い、またはファイル名が間違っている(例:requirement.txtとsが抜けている)ため、ライブラリがインストールされていません。
- 原因:
SyntaxError: unexpected character- 原因:Macのテキストエディットなどでファイルを作った際、不要な装飾データ(RTF形式)が混入してしまっています。GitHubの画面上でコードを直接プレーンテキストに書き直してください。
- エラーを直したのに直らない
- 原因:クラウドサーバーが古いエラー状態を記憶して固まっている可能性があります。Streamlitの画面右下の「Manage app」から「Reboot app(再起動)」を押すか、一度アプリを削除して作り直すと解決します。
今回のまとめ
今回は、ローカルのアプリを世界に公開するためのインフラ知識を学びました。
- 2つのファイル:実行には
app.pyとrequirements.txtがセットで必要。 - GitHubの活用:コードをGitHubに預けることで、Streamlit Cloudと連携して自動更新ができる。
- APIキーの保護:コードには
st.secretsと書き、本物のキーはStreamlit Cloudの管理画面から安全に登録する。
これで、あなたは「AIアプリを作って、安全に公開する」という一連のサイクルをすべて一人で回せるようになりました!
次回は、このアプリをさらに本格的にするための「データ保存・データベース(SQLite / Supabase)」の仕組みについて解説します。

初心者向けの参考リソース
デプロイ手順とGitHub連携を画像付きで確認したい方へ
APIキーの安全な管理(Secrets)について知りたい方へ
注意事項
本記事の内容は執筆時点の情報をもとに作成しています。
Python、Streamlit、Gemini API、GitHub、Streamlit Cloud、Supabase、Vercel、Cloudflare、Google Cloud などの仕様、料金、UI、提供条件は予告なく変更される場合があります。
記事内のコード、設定例、画面構成は学習用・検証用のサンプルです。
実際の運用環境に導入する場合は、公式ドキュメントを確認したうえで、ご自身の責任で検証・調整してください。
APIキー、認証情報、個人情報、業務データなどの機密情報は、記事中のサンプル通りであっても公開リポジトリや公開画面にそのまま掲載しないでください。
外部サービス利用時の課金、障害、セキュリティ事故、データ消失などについて、当サイトは責任を負いません。

