Streamlit入門2026|Pythonだけでダッシュボードを作る手順
目次
Pythonで分析した結果をチームに共有するとき、多くの人がスクリーンショットをSlackに貼っている。もったいない。Streamlitを使えば、Pythonスクリプト1本でインタラクティブなダッシュボードが作れる。HTMLもCSSも書かなくていい。
この記事ではStreamlitのインストールから、実用的なダッシュボードの構築、Streamlit Cloudへの無料デプロイまでを一気に通す。手を動かしながら読めば、30分後にはブラウザで動くアプリが手元にあるはずだ。
1. Streamlitとは|Flask/Djangoとの決定的な違い
Streamlitは、Pythonコードだけでフロントエンド付きのWebアプリを構築できるフレームワークだ。2019年にリリースされ、2022年にSnowflakeが買収。現在はSnowflake傘下でオープンソースとして開発が続いている。
| 比較 | Streamlit | Flask | Django |
|---|---|---|---|
| HTML/CSS記述 | 不要 | 必要 | 必要 |
| 学習コスト | 数時間 | 1〜2週間 | 2〜4週間 |
| 主な用途 | データ分析UI、プロトタイプ | 汎用Webアプリ | 大規模Webアプリ |
| デプロイ | Streamlit Cloud(無料) | 自前構築 | 自前構築 |
| 弱点 | カスタムUIに限界 | UI自作が必要 | 設定が複雑 |
実際にStreamlitを試してみて驚いたのが、st.line_chart(df) の1行でグラフが描画される手軽さだ。Flaskで同じ機能を実装したときは、テンプレートHTML・Chart.js設定・ルーティングと3ファイルを要して3時間かかった。Streamlitなら10分だ。
一方で、デザインの自由度はFlask/Djangoに劣る。ピクセル単位のレイアウト制御やカスタムJavaScriptが必要なプロダクションアプリには向かない。「社内ツール・分析ダッシュボード・プロトタイプ」がStreamlitの得意領域だ。
2. インストールからHello Worldまで(5分)
# 仮想環境を作成(推奨)
python -m venv streamlit-env
source streamlit-env/bin/activate # Windowsは streamlit-env\Scripts\activate
# Streamlitをインストール
pip install streamlit
# バージョン確認
streamlit version
次に app.py を作成する。
# app.py
import streamlit as st
st.title("はじめてのStreamlit")
name = st.text_input("名前を入力してください")
if name:
st.write(f"こんにちは、{name}さん!")
# 起動
streamlit run app.py
ブラウザが自動で開き、テキスト入力フォーム付きのページが表示される。たった6行。HTMLを1行も書いていない。ここがStreamlitの本質だ。
3. データダッシュボードを作る(30分)
実務で使えるレベルのダッシュボードを構築してみる。CSVファイルをアップロードし、フィルタリングしてグラフ表示する構成だ。
# dashboard.py
import streamlit as st
import pandas as pd
st.set_page_config(page_title="売上ダッシュボード", layout="wide")
st.title("売上データ分析ダッシュボード")
# ファイルアップロード
uploaded = st.file_uploader("CSVファイルをアップロード", type="csv")
if uploaded:
df = pd.read_csv(uploaded)
# サイドバーにフィルタ
st.sidebar.header("フィルタ")
columns = df.columns.tolist()
selected = st.sidebar.multiselect("表示する列", columns, default=columns[:5])
# メインエリア
col1, col2 = st.columns(2)
with col1:
st.metric("行数", len(df))
with col2:
st.metric("列数", len(df.columns))
st.dataframe(df[selected], use_container_width=True)
# 数値列があればグラフ描画
numeric = df[selected].select_dtypes(include="number")
if not numeric.empty:
st.line_chart(numeric)
このコードで得られるのは、ファイルアップロード・サイドバーフィルタ・メトリクスカード・データテーブル・折れ線グラフを備えたダッシュボードだ。実際にExcelで同じものを作ったところ半日かかった。Streamlitなら30行、15分。この差は地味に大きい。
Python独学ロードマップのStep 3(ライブラリ実践)でpandasを学んだ人なら、このコードは8割がたすぐに理解できるだろう。
4. st.session_stateで状態管理する
Streamlitには一つ罠がある。ボタンを押すたびにスクリプトが先頭から再実行される仕様だ。変数がリセットされる。「さっきの入力が消えた」と最初は必ず戸惑う。
解決策が st.session_state だ。
# カウンターの例
if "count" not in st.session_state:
st.session_state.count = 0
if st.button("カウントアップ"):
st.session_state.count += 1
st.write(f"現在のカウント: {st.session_state.count}")
st.session_state に格納した値は再実行をまたいで保持される。ログイン状態の管理、フォームの入力値保持、ページ遷移のステート管理など、実用アプリには欠かせない機能だ。ここを理解しているかどうかで、Streamlitで作れるものの幅が大きく変わる。
5. マルチページアプリの構成
Streamlit 1.10以降、ディレクトリ構成だけでマルチページアプリが作れるようになった。
my_app/
├── app.py # メインページ
└── pages/
├── 1_データ概要.py # サイドバーに自動表示
├── 2_グラフ分析.py
└── 3_設定.py
pages/ ディレクトリにPythonファイルを置くだけで、サイドバーに自動でナビゲーションが生成される。ファイル名の先頭に番号を振ると表示順を制御できる。ルーティングの設定ファイルは不要だ。
6. Streamlit Cloudに無料でデプロイする
Streamlit Cloudはアプリを無料でホスティングできるサービスで、GitHubリポジトリと連携するだけでデプロイが完了する。
デプロイ手順(3ステップ)
- GitHubにリポジトリを作成し、
app.pyとrequirements.txtをpush - share.streamlit.io にGitHubアカウントでログイン
- リポジトリとメインファイルを選択 → 「Deploy」ボタン
無料プランの制限はアプリ1つまで・月間リソース上限あり。社内ツール用途なら十分だ。複数アプリを公開したい場合やアクセス制限が必要な場合は有料プラン(月26ドル〜)を検討する。
データ分析の副業でクライアントにダッシュボードを納品するケースが増えている。Streamlit Cloudなら「URLを共有するだけ」で納品完了となる。「データ分析副業ガイド2026」で紹介している月額82万円フリーランスも、納品物としてStreamlitアプリを活用しているケースが目立つ。
7. よくある質問
Q. StreamlitとGradioの違いは?
Gradioは機械学習モデルのデモUIに特化しており、数行でモデルの入出力インターフェースを構築できる。Streamlitは汎用的なダッシュボード・データアプリ向け。MLモデルのデモだけならGradio、データ分析や業務ツールならStreamlitが向いている。
Q. 商用利用は可能?
Streamlitはオープンソース(Apache 2.0ライセンス)であり、商用利用に制限はない。Streamlit Cloudの無料プランでも商用アプリを公開できる。
Q. 大規模データでも使える?
100万行程度のCSVなら問題ないが、それ以上はパフォーマンスが落ちる。大規模データの場合はデータベースに接続し、集約済みのデータだけをStreamlitに渡すアーキテクチャが定石だ。
Streamlit学習におすすめの書籍
※ 上記はAmazonアソシエイトリンクです