Python 不動産ライブラリAPIを使ってみる デプロイ編

前回のお話　⇒　<a href="https://qiita.com/mm02060116/items/341ae89ef022b6bedd59">コーディング編</a>

streamlitで作ったアプリをデプロイする方法について書く。
デプロイとはサーバー上に展開し、誰でもアクセスできるようにすることである。

目次：
1.デプロイ方法は、1つだけではない
2.Streamlit Sharingとは
3.Githubでの作業
4.ディレクトリ構造と秘匿情報（APIキー等）の取扱い
5.Streamlit Community Cloudでの作業（デプロイ）
6.まとめ

1.デプロイ方法は、1つだけではない
-
Streamlitで作成したアプリをデプロイする方法はいくつかあるらしい。

<strong>①　Streamlit Sharingでデプロイ</strong>
②　Dockerを使ったデプロイ（AWS, GCP, Azureなどのクラウドサービス上でホスト可能）
③　Herokuでデプロイ
④　自前サーバーや**VPS（仮想専用サーバー）**でのデプロイ

今回、最も簡単にデプロイできて、初心者でもわかりやすい方法としてStreamlit Cloudによるデプロイをやってみる。

2.Streamlit Sharingとは
-
Streamlit SharingはStreamlit社が提供する専用のクラウド環境で、無料で簡単にデプロイができ、設定も少なく済むため初心者にもおすすめ。
⇒ <a href="https://streamlit.io/cloud">Streamlit Community Cloud</a>

少し調べてみたところ、利用にあたっては<strong>github</strong>への登録が必要。
アカウント作ってない場合はサインアップしておくこと。
⇒ <a href="https://github.co.jp/">Git hub</a>

3.Githubでの作業
-
1.Githubへサインインし、新しいリポジトリを作成する（Newボタンを押す）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3793273/d95b4533-1c7c-8c0f-3772-9514d6c7bb13.png)
2.リポジトリの基本情報を入力
以下の項目を入力し、Create repositoryを押す

Repository name：リポジトリ名
Public/Private：リポジトリの公開範囲

自分以外の人にもアプリを公開する場合、リポジトリの公開範囲については<strong>Public</strong>にしておくこと。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3793273/7ad31239-4ece-3109-9b05-55de992e3533.png)
Githubでの作業はこれだけ

4.ディレクトリ構造と秘匿情報（APIキー等）の取扱い
-
ここからはGitコマンドを用いた作業となる。
Git詳細 ⇒ <a href="https://qiita.com/eric50905/items/94ea4503d42ea5ca019a">Gitとは</a>

Githubへプッシュする前に、以下をディレクトリに追加する。

・<strong>.streamlit および secrets.toml</strong> ⇒ 秘匿情報の格納場所（APIキー等）
・<strong>.gitignore</strong> ⇒ Gitで未追跡にしたいファイル情報を書く場所
・<strong>requirements.txt</strong> ⇒ 作成したアプリに使っているモジュールのバージョン情報

requirements.txtについて ⇒ <a href="https://qiita.com/neko-kamaboko/items/2d59022bbc7e314f1f11">コマンド一行でpythonのrequirements.txtを生成する</a>
```
my_project/
│
├── main.py
├── __init__.py
├── .gitignore  ← Gitで未追跡にしたいファイル情報を書く場所
├── requirements.txt  ← 作成したアプリに使っているモジュールのバージョン情報
│
├── src/
│   ├── __init__.py
│   ├── pref_data.py
│   ├── send_api.py
│
├── .streamlit/  ← 追加
    ├── secrets.toml  ← 秘匿情報の格納場所（APIキー等）
```
.streamlit/secrets.tomlにAPIキーを格納
```bash:.streamlit/secrets.toml
api_key = "YOUR_API_KEY"
```
.streamlitフォルダをGitの追跡対象から除外設定する
```bash:.gitignore
.streamlit/
```
requirements.txtを生成する
```bash:.requirements.txt
pandas==X.X.X
requests==X.X.X
streamlit==X.XX.X
```
Gitプッシュする前に、.streamlitが<strong> 未追跡 </strong>になっているか必ず確認する。
確認後、作成したリポジトリにプッシュする。
（追跡対象だった場合、秘匿情報がGithubで公開されてしまう）

5.Streamlit Community Cloudでの作業（デプロイ）
-
Streamlit Community Cloudへ「<strong>Sign in</strong>」する。
（アカウント登録まだの場合は、<strong>Sign up</strong>）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3793273/58e85168-01e7-1480-8b95-e8f4415ed698.png)

右上の「<strong>Create app</strong>」を押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3793273/24625776-cf60-6c52-b4a4-782a9e8dc58e.png)

「<strong>Deploy a public app from GitHub</strong>」を選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3793273/0e5c5e3a-d03d-8299-0597-729a7267eb9c.png)

以下の項目を入力し、「<strong>Advanced settings</strong>」を押す。

Repository：作成したアプリをプッシュしたリポジトリ名
Branch：ブランチ名（分岐してなければmain）
Main file path：メインスクリプト（今回の場合、main.py）
App URL(optinal)：任意のURL

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3793273/0c56477a-c2f5-3d5d-af11-66e0f47614ee.png)

「<strong>Advanced settings</strong>」にて、以下の項目を入力し、「<strong>Save</strong>」を押す。

Pythonversion：アプリ作成に使用したPythonのバージョン
Secrets：secrets.tomlの内容をそのまま転記

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3793273/9f8865b9-0394-be06-be21-b1ccd8f6c57f.png)

「<strong>Deploy</strong>」を押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3793273/0e18f8f9-ce41-ebdf-a204-2c23a54bda01.png)
デプロイ後、設定したURLへアクセスし、閲覧できればデプロイ完了。
⇒ <a href="https://estateapp.streamlit.app/">今回作成したアプリ</a>

6.まとめ
-
検討～デプロイまでの一連の流れを、ハンズオン形式で行うことで、「ネット上に公開する」みたいな抽象的にしかわからなかった部分がクリアになり、想いを形にできるスキルが向上したと感じる。
今後も学習を継続したい。