Streamlitとは?できること・使い方・料金を実例コードで解説【Python】
Streamlit(ストリームリット)は、Pythonのコードだけでデータアプリやダッシュボードを作れるオープンソースのWebアプリフレームワークです。HTML・CSS・JavaScriptを書かずに、数行のコードでグラフやウィジェットを備えた画面を公開できるため、データ分析の結果を手早く共有したいエンジニアやデータサイエンティストに広く使われています。
この記事では、Streamlitの概要から「できること・できないこと」、インストールと最初のアプリ、売上ダッシュボードを作る実践コード、Gradio・Dashなど他ツールとの比較、料金とデプロイ方法までを、動作確認済みのコードを交えて整理します。「とは」をさらに深く知りたい場合はStreamlitとは?特徴とデメリットの詳しい解説もあわせてご覧ください。
目次
まとめ
Streamlitは、Pythonだけでデータアプリやダッシュボードを素早く作れるオープンソースフレームワークです。少ないコードで可視化やインタラクティブな操作を実現でき、Community Cloudを使えば無料で公開・共有まで完結します。一方で、操作ごとの再実行という仕組みや本格Web開発には不向きという特性を理解し、キャッシュの活用や用途に応じたツール選定(Gradio・Dash・FastAPIなど)を意識すると、Streamlitの強みを最大限に引き出せます。まずはpip install streamlitから、手元で動かして試してみてください。
Streamlitとは?Pythonだけでデータアプリを作れるフレームワーク
Streamlitは、PythonスクリプトをそのままインタラクティブなWebアプリに変換できるフレームワークです。通常のWeb開発ではフロントエンド(HTML/CSS/JavaScript)とバックエンドを分けて実装しますが、Streamlitではその知識がなくても、見慣れたPythonの書き方だけでUIを構築できます。データの読み込みはPandasやNumPy、可視化はMatplotlibやPlotlyといった既存のライブラリをそのまま活かせる点も特長です。
プロジェクトの基本情報も押さえておきましょう。Streamlitはデータ基盤大手のSnowflakeが開発・提供しており、ライセンスはApache License 2.0のオープンソースです。対応するPythonは3.10〜3.14で、本体はpip install streamlitで無償導入できます(本記事の検証時点の安定版は1.5x系)。商用プロジェクトにも追加費用なく組み込めます。
なお検索時は表記ゆれに注意が必要です。読み方は「ストリームリット」で、「streamlit とは」「ストリームリット 使い方」などでも同じツールを指します。
Streamlitでできること・できないこと
導入を判断するうえで、得意な領域と苦手な領域を先に把握しておくと選定で迷いません。
できること(得意な領域)
Streamlitが力を発揮するのは、データを「見せる・触らせる」用途です。具体的には次のようなことが少ないコードで実現できます。
- データの可視化:
st.line_chart・st.bar_chart・st.area_chartなどにデータフレームを渡すだけでグラフ化。地図表示はst.map。 - インタラクティブな操作:
st.slider・st.selectbox・st.checkboxなどのウィジェットで、ユーザー操作に応じて表示をリアルタイムに更新。 - ダッシュボード構築:
st.sidebarに操作パネルを置き、複数のグラフや指標をまとめた画面を作成。 - 分析結果の共有:
streamlit runで即起動し、Community CloudにつなげばURLで共有可能。 - 機械学習・LLMのデモ:チャットUI向けの部品や状態管理も備え、モデルの試用画面を手早く用意できる。
主な活用シーン
実務では、次のような場面でStreamlitが選ばれています。いずれも「分析の結果を、関係者が自分で触れる形にして共有する」という共通点があります。
- 社内向けデータツール:売上やKPIのダッシュボードを内製し、担当者が条件を切り替えて確認できるようにする。
- 機械学習・生成AIのデモ:学習したモデルやLLMの挙動を、エンジニア以外の関係者にも試してもらう試用画面を用意する。
- データ探索・レポート共有:Jupyter Notebookで行った分析をそのままアプリ化し、URLで配布する。
- プロトタイピング:アイデアの検証段階で、作り込み前に動く画面を素早く用意して合意形成に使う。
逆に、不特定多数に向けた商用サービスや作り込んだUIが前提のプロダクトでは、後述のとおり別の選択肢が適することもあります。
できない・苦手なこと
一方で、Streamlitには構造上の割り切りがあります。ユーザーが操作するたびにスクリプト全体を上から再実行するという仕組みのため、重いデータ処理をそのまま書くと毎回走って遅くなります。これは@st.cache_dataや@st.cache_resourceでキャッシュし、状態を保持したい値はst.session_stateに逃がすことで対処します。
また、細かなURLルーティングやピクセル単位の自由なデザイン、多人数同時アクセスを前提とした本番運用、独自の認証・課金を組み込んだ本格的なWebサービスといった用途は得意ではありません。たとえば会員登録とログインを備えた一般公開のサービスや、ページごとにURLを分けて細かく制御したい場合は、Streamlit単体では作り込みが難しくなります。こうしたケースでは、APIや本格的なWebを担うFastAPIのようなフレームワークや、後述のDashなどを検討するほうが向いています。
インストールと最初のアプリ(ハンズオン)
まずは環境を整えます。Python 3.10以上を用意し、プロジェクトごとに仮想環境を作ってインストールするのがおすすめです。
python -m venv .venv
source .venv/bin/activate # Windowsは .venv\Scripts\activate
pip install streamlit
streamlit hello # 動作確認用のデモが起動
次に、最初のアプリを作ります。app.pyを作成し、以下を記述します。
import streamlit as st
st.title("はじめてのStreamlit")
st.write("Pythonだけで作るWebアプリです。")
name = st.text_input("お名前は?")
if name:
st.write(f"こんにちは、{name} さん!")
保存したら、ターミナルで次のコマンドを実行します。ブラウザが自動で開き、アプリが表示されます。コードを保存し直すと画面も自動でリロードされるため、試行錯誤しながら開発を進められます。
streamlit run app.py
実践:インタラクティブな売上ダッシュボードを作る
基本を押さえたら、実際にデータを扱うダッシュボードを作ってみましょう。ここではデータ準備にPandasを使い、サイドバーのウィジェットで地域と期間を切り替えられるアプリを作ります。@st.cache_dataでデータ読み込みをキャッシュし、再実行のたびに重い処理が走らないようにしている点がポイントです。
import streamlit as st
import pandas as pd
import numpy as np
st.title("売上ダッシュボード")
st.write("Streamlitで作る、最小構成のデータアプリです。")
@st.cache_data
def load_data():
rng = pd.date_range("2026-01-01", periods=180, freq="D")
df = pd.DataFrame({
"日付": rng,
"売上": np.random.randint(80, 200, size=len(rng)).cumsum(),
"地域": np.random.choice(["東日本", "西日本"], size=len(rng)),
})
return df
df = load_data()
region = st.sidebar.selectbox("地域を選択", ["すべて", "東日本", "西日本"])
days = st.sidebar.slider("表示日数", min_value=30, max_value=180, value=90)
filtered = df if region == "すべて" else df[df["地域"] == region]
filtered = filtered.tail(days)
st.line_chart(filtered, x="日付", y="売上")
st.dataframe(filtered, width="stretch")
このわずか20数行で、サイドバーで条件を選ぶと折れ線グラフと表が連動して更新される対話型アプリになります。たとえば地域を「東日本」に絞れば該当データだけがその場でグラフと表に反映され、表示日数のスライダーを動かせば対象期間も同時に切り替わります。ウィジェットの値はそのまま変数として使えるため、コールバックやイベント処理を書く必要がありません。
標準のグラフ機能で物足りない場合は、使い慣れた可視化ライブラリをそのまま統合できます。たとえばMatplotlibで作った図はst.pyplotで表示できます。
import streamlit as st
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
fig, ax = plt.subplots()
ax.plot(x, np.sin(x))
st.pyplot(fig)
マウス操作で拡大・詳細表示ができるインタラクティブなグラフが欲しいときは、Plotlyをst.plotly_chartで渡すとよいでしょう。目的に応じて可視化ライブラリを選べるのがStreamlitの強みです。
Streamlit・Gradio・Dash・Flaskの違いと選び方
PythonでWebアプリやUIを作るツールはStreamlit以外にもあります。代表的な選択肢を比較すると、それぞれ向いている用途が明確に分かれます。
| 項目 | Streamlit | Gradio | Dash | Flask |
|---|---|---|---|---|
| 主な用途 | データ可視化・ダッシュボード | MLモデルのデモUI | 本格・大規模ダッシュボード | 汎用Webアプリ全般 |
| コード量 | 少ない | 最少 | 多め | 多い(HTML/CSS/JS必要) |
| 学習コスト | 低い | 低い | 中〜高 | 中〜高 |
| 強み | 最速でデータアプリ化・豊富なウィジェット | 画像/音声/LLMチャットのデモを即共有 | 高いカスタム性・コールバックで高性能・多人数向き | 自由度が高く何でも作れる |
| 向くケース | 社内ツール・可視化・プロトタイプ | 機械学習/生成AIのデモ | 顧客向けの本番ダッシュボード | フルスタックなWebサービス |
ざっくり言えば、とにかく速くデータアプリを形にしたいならStreamlit、機械学習・LLMのデモUIならGradio、細かい制御や高い性能が要る本格ダッシュボードならDash、という住み分けです。DashはStreamlitと違って呼ばれた処理だけを実行するため大規模時の性能で有利な一方、記述量は増えます。ノートブック感覚で使える新興ツールに関心があればmarimoも選択肢になります。
料金とデプロイ:Community CloudとStreamlit in Snowflake
Streamlit本体はオープンソースで無料です。作ったアプリの公開には、主に2つの道があります。
個人開発や学習、プロトタイプの共有にはStreamlit Community Cloudが手軽です。公開GitHubリポジトリと連携すれば、コードをプッシュするだけで自動デプロイされ、URLで共有できます。無料で公開アプリをホスティングできる一方、CPU・メモリなどのリソースには上限があり、公開リポジトリ前提という制約もあります。
企業利用でプライベートなアプリや高い可用性・セキュリティが必要な場合は、エンタープライズ向けのStreamlit in Snowflakeが用意されています。各プランの具体的な料金や制限は変更されることがあるため、最新の条件はStreamlitの料金とStreamlit in Snowflakeの解説および公式情報で確認してください。
よくある質問(FAQ)
Q. Streamlitの読み方は?
「ストリームリット」と読みます。検索では「streamlit とは」「ストリームリット 使い方」などの表記でも同じツールを指します。
Q. 無料で使えますか?ライセンスは?
本体はApache License 2.0のオープンソースで無料です。pip install streamlitで導入でき、商用プロジェクトにも追加費用なく組み込めます。
Q. HTMLやJavaScriptの知識は必要ですか?
基本的には不要です。Streamlitはフロントエンドをライブラリ側が肩代わりする設計のため、Pythonだけでアプリを完結できます。
Q. FlaskやDjangoとは何が違いますか?
FlaskやDjangoは本格的なWeb開発フレームワークで、ルート設計やHTML/CSSが必要です。Streamlitはデータの可視化・共有に特化し、UI構築の知識がなくても数行で動くアプリを作れる点が異なります。
Q. 動作が重い・遅いときは?
Streamlitは操作のたびにスクリプト全体を再実行します。重い読み込みや計算は@st.cache_dataや@st.cache_resourceでキャッシュし、保持したい値はst.session_stateに置くことで改善できます。
Q. どのPythonバージョンに対応していますか?
本記事の時点では3.10〜3.14に対応しています。最新の対応状況は公式ドキュメントで確認してください。
Q. アプリの見た目(デザイン)はカスタマイズできますか?
テーマ機能で配色やフォントを変更でき、レイアウト用の部品(カラムやコンテナ、サイドバーなど)も用意されています。さらに作り込みたい場合はカスタムコンポーネントで拡張できますが、ピクセル単位で自由にデザインしたいときは本格的なWebフレームワークのほうが向きます。