Streamlitとは?Pythonで3ステップでWebアプリを作る方法

「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.3

2. Streamlit Cloudにサインアップ

3. アプリをデプロイ

  • 「New app」をクリック
  • リポジトリ、ブランチ、ファイルパスを選択
  • 「Deploy」をクリック

数分でアプリが公開され、https://yourusername-appname.streamlit.appのようなURLでアクセスできます。

Streamlitの次のステップ

基本をマスターしたら、以下のトピックに挑戦してみましょう:

  • 機械学習モデルの統合: scikit-learn、TensorFlowなどのモデルを読み込んで推論
  • データベース接続: PostgreSQL、MySQLなどと連携
  • 認証機能: streamlit-authenticatorでログイン機能を追加
  • マルチページアプリ: 複数のページを持つアプリを構築
  • カスタムコンポーネント: JavaScriptで独自のウィジェットを作成

Pythonアプリ開発をさらに効率化する関連記事

Streamlitでアプリ開発の基礎を学んだら、他のPython開発ツールやAI支援ツールも活用して、さらに開発効率を向上させましょう:

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のシンプルさと強力さに、きっと驚くはずです!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次