わたねこコーリング

野良プログラマ発、日々のアウトプット

【Python】streamlit 沼ハマり記・序章

連休のB面、いかがお過ごしでしょうか。諸般の事情で外出もままならない故、積ん読消化を決め込んでいる野良プログラマ Mariyudu です。

…の筈だったんですが、一昨日 streamlit という Python 製のウェブアプリ開発支援 F/W を知ってしまい、これが滅法面白そうなので読書も何もかもうっちゃってパソコンに向かっているうちに1日が暮れてしまいましたw その最中、こんなハンズオン記事を発見。

zenn.dev

streamlit は通常、データ分析のフィールドにおいて Jupyter Lab でプロトタイピングした(主にデータ可視化用の)コードを、不特定多数が利用できるウェブアプリとしてサクッと開発・デプロイできちゃうという文脈で紹介されがちで、巷で見られるサンプルもだいたいそんな感じです。しかしながら上記ハンズオンは、B2B サービスっぽいウェブアプリを streamlit で作り上げてしまうという所が毛色が独特で面白い。職業柄、自分にも馴染み深い方向性なので、streamlit の可能性を探る意味もあり、このハンズオンを試してみました。結果的に、ペライチなサンプルでは分からない複数ページの構成やセション管理の手法なんかも良く分かったので、有益な作業だったと思います。

ちょっと残念なのは、記事に併せて Github で提供されているコード一式に README の類が同梱されていないので、Python 開発に明るくない初心者にはどうやって動かしたら良いのか分かりづらいのでは、という点です。実際、自分も poetry を使ったことが無かったりで、少し手間取ってしまいました。という訳で、このリポジトリを手元の環境で動作させるまでを補完情報として提供するのが、本稿の主旨となります。

まずは手元のマシンにて、Github リポジトリを適当な場所に clone します。

git clone https://github.com/krkettle57/web-only-python.git
cd web-only-python

個人的に、開発マシンの環境はシンプルにしておきたいという理由から、何等かのプロダクトを試用する際は極力 Docker コンテナで済ませるようにしています。なので、本件もその流儀で。現時点での Python 最新安定版は 3.12 ですが、使用モジュールの後方互換性が損なわれていないかを警戒して、このハンズオンが書かれた時点のバージョン 3.9 (たぶん)を採用します。DockerHub の公式リポジトリにある python:3.9.19-slim-bookworm を使ってコンテナを起動し、bash でコンテナ内に入ります。

docker run -it --rm -v $(pwd):/app -p 8501:8501 python:3.9.19-slim-bookworm bash

Python モジュールインストール時に gcc 等が必要っぽいので、その環境をインストールしておきます。

apt-get update
apt-get install -y build-essential

アプリに必要なモジュールのインストール用に poetry を使えるようにします。

pip install poetry

アプリケーションディレクトリにて、pyproject.toml に定義されたモジュールをインストールします。

cd /app
poetry install

これで準備ができました。poetry でインストールしたモジュールを使って streamlit でアプリを起動します。

poetry run streamlit run main.py

ここで以下のような出力(IP アドレスはその都度変わる)があればアプリ起動は成功です。

  You can now view your Streamlit app in your browser.

  Network URL: http://172.24.0.2:8501
  External URL: http://14.9.81.64:8501

ブラウザにて http://localhost:8501 にアクセスして、アプリ画面(↓)が表示されるのを確認します。

さてこのハンズオン、アプリの設計がカナーリ「ちゃんとして」いて、その辺が手っ取り早く streamlit をマスターしたい向きにはまどろっこしく感じられるかもしれませんが、読んでおいて損は無いと思いますので頑張ってマスターして頂ければと。現場からは以上です。この後も引き続き streamlit の習得を続けます。