「PythonでWebアプリを作りたいけど、HTMLやCSSは書きたくない」「データ分析の結果をチームに見せたいけど、どうやって共有すればいいかわからない」そんな悩みを抱えていませんか?
Streamlitなら、Pythonのコードだけで、数分でWebアプリが作れます。フロントエンドの知識は不要です。この記事では、Streamlitの基礎から実際にアプリを作るまでを3ステップで解説します。
Streamlitとは?Pythonだけで作るWebアプリフレームワーク
Streamlitは、PythonのコードだけでインタラクティブなWebアプリケーションを作成できるオープンソースフレームワークです。2019年に登場して以来、データサイエンティストやエンジニアの間で急速に普及しています。
Streamlitの特徴
1. Pythonだけで完結
HTML、CSS、JavaScriptを書く必要がありません。Pythonのコードだけで、ボタン、スライダー、グラフなどのUI要素を配置できます。
2. 爆速でプロトタイプ作成
数十行のコードで、データ可視化やモデル推論のデモアプリを作成できます。開発からデプロイまで、わずか数分で完了することも。
3. リアルタイム更新
コードを保存すると、ブラウザが自動でリロードされます。コーディングと確認のサイクルが高速です。
4. 無料でデプロイ可能
Streamlit Cloudを使えば、GitHubリポジトリと連携するだけで、無料でアプリを公開できます。
Streamlitが向いているケース
- データ分析結果のダッシュボード: Pandas、Matplotlibと組み合わせて可視化
- 機械学習モデルのデモ: ユーザー入力を受け取って推論結果を表示
- 社内ツール: CSVアップロード、データ変換、レポート生成
- プロトタイプ検証: アイデアを素早く形にしてフィードバック収集
Streamlitが向いていないケース
- 複雑なWebアプリ: 認証、DB管理、複雑なルーティングが必要な場合
- 高度なデザインカスタマイズ: CSSを細かく調整したい場合
- 大規模トラフィック: 数千人が同時アクセスするサービスには不向き
ステップ1: Streamlitをインストールする
まずはStreamlitをインストールしましょう。Python 3.8以上が必要です。
インストールコマンド
# pipでインストール
pip install streamlit
インストール確認
streamlit --versionインストールが完了したら、動作確認をしてみましょう。
# デモアプリを起動
streamlit helloブラウザが自動で開き、Streamlitのデモアプリが表示されます。グラフのプロット、マップ表示、データフレーム表示などのサンプルが確認できます。
仮想環境での管理(推奨)
プロジェクトごとに環境を分けたい場合は、仮想環境を使いましょう。
# 仮想環境を作成
python -m venv streamlit_env
仮想環境を有効化(Mac/Linux)
source streamlit_env/bin/activate
仮想環境を有効化(Windows)
streamlit_env\Scripts\activate
Streamlitをインストール
pip install streamlitステップ2: 最初のStreamlitアプリを作る
それでは、実際にStreamlitアプリを作ってみましょう。まずは簡単なテキスト表示から始めます。
Hello Worldアプリ
app.pyというファイルを作成し、以下のコードを書きます。
import streamlit as st
タイトルを表示
st.title('最初のStreamlitアプリ')
テキストを表示
st.write('Hello, Streamlit!')
マークダウンを表示
st.markdown('太字と斜体も使えます')アプリを起動します。
streamlit run app.pyブラウザが自動で開き、アプリが表示されます。デフォルトではhttp://localhost:8501でアクセスできます。
データフレームを表示する
Streamlitの真価は、データを簡単に表示できることです。Pandasのデータフレームもそのまま表示できます。
import streamlit as st
import pandas as pd
import numpy as np
st.title('データフレーム表示')
サンプルデータを作成
df = pd.DataFrame({
'名前': ['田中', '佐藤', '鈴木', '高橋'],
'年齢': [25, 30, 28, 35],
'スコア': [85, 92, 78, 88]
})
データフレームを表示
st.dataframe(df)
静的なテーブルとして表示
st.table(df)st.dataframe()はインタラクティブなテーブルで、ソートや列の並び替えができます。st.table()は静的な表示です。
グラフを表示する
Streamlitは、Matplotlib、Plotly、Altairなど、主要なグラフライブラリをサポートしています。
import streamlit as st
import pandas as pd
import numpy as np
st.title('グラフ表示')
ランダムデータを生成
chart_data = pd.DataFrame(
np.random.randn(20, 3),
columns=['A', 'B', 'C']
)
折れ線グラフ
st.line_chart(chart_data)
エリアチャート
st.area_chart(chart_data)
棒グラフ
st.bar_chart(chart_data)ステップ3: インタラクティブな要素を追加する
Streamlitの最大の魅力は、ユーザー入力を簡単に受け取れることです。ボタン、スライダー、テキスト入力など、様々なウィジェットが用意されています。
基本的なウィジェット
import streamlit as st
st.title('インタラクティブアプリ')
テキスト入力
name = st.text_input('名前を入力してください')
st.write(f'こんにちは、{name}さん!')
スライダー
age = st.slider('年齢を選択', 0, 100, 25)
st.write(f'選択された年齢: {age}歳')
セレクトボックス
hobby = st.selectbox(
'趣味を選択',
['読書', 'スポーツ', '音楽', '映画']
)
st.write(f'選択された趣味: {hobby}')
チェックボックス
agree = st.checkbox('利用規約に同意する')
if agree:
st.write('ありがとうございます!')
ボタン
if st.button('クリック'):
st.write('ボタンがクリックされました!')実践例: BMI計算アプリ
それでは、学んだことを組み合わせて、実用的なBMI計算アプリを作ってみましょう。
import streamlit as st
st.title('BMI計算アプリ')
st.write('身長と体重を入力してBMIを計算します')
サイドバーに入力欄を配置
st.sidebar.header('入力')
height = st.sidebar.number_input('身長(cm)', 100, 250, 170)
weight = st.sidebar.number_input('体重(kg)', 30, 200, 60)
BMI計算
height_m = height / 100
bmi = weight / (height_m ** 2)
結果を表示
st.header('計算結果')
st.metric(label='BMI', value=f'{bmi:.1f}')
BMIの判定
if bmi < 18.5:
category = '低体重'
color = 'blue'
elif bmi < 25:
category = '普通体重'
color = 'green'
elif bmi < 30:
category = '肥満(1度)'
color = 'orange'
else:
category = '肥満(2度以上)'
color = 'red'
st.write(f'判定: {category}')
BMIチャートを表示
import pandas as pd
import numpy as np
BMI範囲のデータ
bmi_ranges = pd.DataFrame({
'カテゴリ': ['低体重', '普通体重', '肥満1度', '肥満2度'],
'範囲': ['< 18.5', '18.5 - 25', '25 - 30', '≥ 30']
})
st.table(bmi_ranges)このアプリでは以下の機能を実装しています:
- サイドバー:
st.sidebarで入力欄を左側に配置 - 数値入力:
st.number_input()で身長・体重を入力 - メトリクス表示:
st.metric()で結果を見やすく表示 - 条件分岐: BMI値に応じて判定を変更
ファイルアップロード機能
Streamlitでは、CSVファイルなどをアップロードして処理することもできます。
import streamlit as st
import pandas as pd
st.title('CSVファイル分析アプリ')
ファイルアップロード
uploaded_file = st.file_uploader('CSVファイルをアップロード', type=['csv'])
if uploaded_file is not None:
# CSVを読み込み
df = pd.read_csv(uploaded_file)
# データを表示
st.subheader('アップロードされたデータ')
st.dataframe(df)
# 基本統計量を表示
st.subheader('基本統計量')
st.write(df.describe())
# 数値列を選択してグラフ表示
numeric_columns = df.select_dtypes(include=['float64', 'int64']).columns
if len(numeric_columns) > 0:
selected_column = st.selectbox('グラフ表示する列を選択', numeric_columns)
st.line_chart(df[selected_column])Streamlitの便利な機能
基本的な使い方を理解したら、さらに便利な機能も活用しましょう。
キャッシュ機能
データの読み込みや計算が重い処理は、@st.cache_dataデコレータでキャッシュできます。
import streamlit as st
import pandas as pd
import time
@st.cache_data # この関数の結果をキャッシュ
def load_data():
# 重い処理をシミュレート
time.sleep(3)
return pd.DataFrame({
'col1': range(100),
'col2': range(100, 200)
})
st.title('キャッシュのデモ')
初回は3秒かかるが、2回目以降は即座に表示
data = load_data()
st.dataframe(data)レイアウト調整
複数のカラムに分けて要素を配置することもできます。
import streamlit as st
st.title('レイアウトのデモ')
2つのカラムに分割
col1, col2 = st.columns(2)
with col1:
st.header('左カラム')
st.write('ここは左側の内容です')
st.button('左ボタン')
with col2:
st.header('右カラム')
st.write('ここは右側の内容です')
st.button('右ボタン')
展開可能なセクション
with st.expander('詳細を表示'):
st.write('ここに詳細情報を記載します')プログレスバー
時間のかかる処理には、プログレスバーを表示できます。
import streamlit as st
import time
st.title('プログレスバーのデモ')
if st.button('処理を開始'):
progress_bar = st.progress(0)
status_text = st.empty()
for i in range(100):
# 進捗を更新
progress_bar.progress(i + 1)
status_text.text(f'処理中... {i + 1}%')
time.sleep(0.01)
status_text.text('完了!')
st.success('処理が完了しました')Streamlitアプリをデプロイする
アプリが完成したら、Streamlit Cloudで無料公開できます。
デプロイ手順
1. GitHubにコードをプッシュ
プロジェクトをGitHubリポジトリにアップロードします。必要なファイル:
app.py: メインのアプリファイルrequirements.txt: 依存パッケージのリスト
requirements.txtの例:
streamlit==1.31.0
pandas==2.1.4
numpy==1.26.32. Streamlit Cloudにサインアップ
- https://streamlit.io/cloudにアクセス
- GitHubアカウントでログイン
3. アプリをデプロイ
- 「New app」をクリック
- リポジトリ、ブランチ、ファイルパスを選択
- 「Deploy」をクリック
数分でアプリが公開され、https://yourusername-appname.streamlit.appのようなURLでアクセスできます。
Streamlitの次のステップ
基本をマスターしたら、以下のトピックに挑戦してみましょう:
- 機械学習モデルの統合: scikit-learn、TensorFlowなどのモデルを読み込んで推論
- データベース接続: PostgreSQL、MySQLなどと連携
- 認証機能:
streamlit-authenticatorでログイン機能を追加 - マルチページアプリ: 複数のページを持つアプリを構築
- カスタムコンポーネント: JavaScriptで独自のウィジェットを作成
Pythonアプリ開発をさらに効率化する関連記事
Streamlitでアプリ開発の基礎を学んだら、他のPython開発ツールやAI支援ツールも活用して、さらに開発効率を向上させましょう:
AI開発・データ分析
- Genstack - AI開発を効率化する汎用SDK・マルチモデル統合プラットフォーム - PythonでAI開発を効率化
- Capalyze – Webスクレイピングからデータ可視化までを自動化するAI分析プラットフォーム - データ分析ワークフローの自動化
フルスタック開発
- Emergent – 英語入力でフルスタックアプリを自動生成するAIコード開発プラットフォーム - AIでアプリ開発を加速
- v0.app by Vercel – AIを活用したフルスタックアプリケーション構築プラットフォーム - フロント・バックエンド統合開発
コーディング支援
- opencode - ターミナル向けAIコーディングエージェント!複数モデル対応で柔軟な開発支援を実現 - ターミナルからPythonコーディングを効率化
- Cipher by Byterover – AIコーディング支援のための共有メモリー管理プラットフォーム - コーディング支援の記憶管理
ノーコード・ローコード
- Instruct – 自然言語指示だけでAI自動化を実現する次世代ノーコードプラットフォーム - ノーコードでワークフロー自動化
- a0.dev - AIでiOSアプリを数分で開発・公開できる次世代開発プラットフォーム - AIでモバイルアプリ開発
まとめ: Streamlitで始めるPython Webアプリ開発
この記事では、Streamlitの基礎から実践的なアプリ作成まで、3ステップで解説しました。
Streamlitの主な特徴:
- Pythonだけで完結: HTML/CSS/JavaScriptの知識不要
- 高速プロトタイピング: 数分でアプリを作成可能
- リアルタイム更新: コード保存で即座に反映
- 無料デプロイ: Streamlit Cloudで簡単公開
3ステップで作るStreamlitアプリ:
- ステップ1:
pip install streamlitでインストール - ステップ2:
st.write()、st.dataframe()でコンテンツ表示 - ステップ3:
st.button()、st.slider()でインタラクティブ要素追加
主な機能:
- データ表示: DataFrame、グラフ、メトリクス
- ウィジェット: ボタン、スライダー、テキスト入力、ファイルアップロード
- レイアウト: カラム、サイドバー、展開可能セクション
- キャッシュ:
@st.cache_dataで処理を高速化
Streamlitは、データサイエンティストやエンジニアが、フロントエンドの知識なしでWebアプリを作れる強力なツールです。プロトタイプ作成、社内ツール開発、機械学習モデルのデモなど、様々な用途に活用できます。
まずは簡単なアプリから始めて、徐々に機能を追加していきましょう。Streamlitのシンプルさと強力さに、きっと驚くはずです!
