こんにちは。レッジでデータサイエンティストをしている今村です。
WebアプリケーションフレームワークであるStreamlitからWebアプリを簡単にデプロイできるStreamlit Sharingが発表されました。今回はStreamlit Sharingを実際に試してみたので、実際のデプロイの流れと注意点をまとめていきます。
なお、本記事は10/15に公開されたこちらの内容を元に作成しています。
Streamlitとは
Pythonだけでパフォーマンスの高いWebアプリケーションを実装するフレームワークです。
Pythonのみで実装できるため、学習コストも低く、かつインタラクティブな操作も実現できるため、機械学習モデルのデモや簡単な可視化などに用いられます。
実は弊社TechBlogでも過去に紹介しています。
Streamlit Sharingを使ってみる
さて、本題のデプロイ方法について詳しく見ていきましょう。
デプロイ手順は下記のとおりです。
これだけです。めちゃめちゃ簡単ですね!
以下より、詳細な内容を見ていきます。
登録する
Streamlit Sharingはデフォルトでは使うことができません。(2020/10/19現在)使うためにはこちらから申請する必要があります。
ページ内の「Request an invite to start sharing now!」をクリックすると、入力フォームに遷移します。
フォームには下記項目を入力します。
申請したら、Streamlitから招待完了のメールが届きます。
著者が試したところ、申請から翌日で招待されました。
注意点
メールアドレスはGitHubに登録されているプライマリメールアドレスを入力してください。
プライマリメールアドレスはGitHubの「Setting」> 「Emails」から確認できます。
WebアプリをGitHubにアップロードする
Streamlitで作成したWebアプリをGitHubのリポジトリにアップロードします。ローカルで実行し、正常にアプリが起動することを確かめてからアップロードしてください。
参考までに(前回記事)で紹介したWebアプリをベースに説明していきます。
コードはGitHubを参照してください。
デプロイしたいアプリのGitHubリポジトリ、ブランチ、実行ファイルを選択する
Streamlitから招待完了メールを受け取ったら、アプリ管理画面にログインできます。
こちらのページの右上にある「Sign In」から管理画面にログインしましょう。GitHubアカウントでログインを行います。
管理画面は以下のようなシンプルなデザインです。
新しいアプリをデプロイする場合は右上の「New App」をクリックすると、
- Repository
- Branch
- Main file path
を入力するフォームが表示されます。
RepositoryとBranchは、デプロイ対象のGitHubリポジトリとブランチをそれぞれ指定します。
Main file pathはStreamlitの実行ファイルを選択します。
streamlit run app.py
で指定されるapp.py
ですね。
ちなみに、オプションとして実行ファイルのGitHub URLを入力するだけのものもあります。「Paste GitHub URL」から参照できます。
入力が完了したら、「Deploy!」をクリック。少し待ったらデプロイ完了です!
アプリのURLですが、以下のような構成で自動生成されます。
https://share.streamlit.io/<username>/<repository>/<branch>/<file>
忘れてしまったとしても、管理画面上にURLが発行されているので安心です。
注意点
requirements.txtを同じGitHubリポジトリに入れることを忘れずに!
requirements.txtにはPython標準モジュールを入れるとエラーになるため、pip, condaでインストールが必要なパッケージのみを記載してください。
また、requirements.txtにバージョンを併記するとエラーが発生することがありました。デプロイ前にはバージョンを併記せずパッケージ名のみを記載してください。
使ってみた感想
爆速、かつ簡単にデプロイが実現できました!
これまではHerokuやGCPなどを使用してWebアプリをデプロイする必要がありました。しかし、Streamlit SharingではGitHubにアップされていれば、数クリックで簡単にデプロイができるようになりました。
データサイエンティストや機械学習エンジニアが作成したモデルをサクッと共有したいという場合に真価を発揮するでしょう。
しかしながら、実際のサービスに使う場合はやや物足りなさが拭えないです。比較的重めの処理をアプリ上で実装してしまうと、アプリが落ちてしまうことがありました。本格的な運用を考えている場合は、既存の手法で実装した方が良いかと思います。
とは言え、GitHubだけ、かつ数クリックでデプロイできるようになったのは本当に衝撃でした。社内で簡単に共有したい場合や、自身のポートフォリオ作成にも捗ること間違いなしです。