🎛️ Streamlit 入力ウィジェット ― 選択・スイッチ・スライダー・アップロード

対象バージョン v1.58 | 最終更新 2026-06-19 | 更新確認の目安:毎月

最新の実バージョンはプレイグラウンドst.__version__ を表示)で常に確認できます。

このページでわかること

  • Streamlit の入力UIが、関数1つで「選ぶ・切り替える・送る」を実現できること
  • 各ウィジェットがどのバージョンから使えるか(Tierバッジで明記。特に v1.40 の新しめUIに注意)
  • 同じ入力UIを React で組む場合との使い分け
  • 実際に触れるプレイグラウンドと、ui-memo の対応ページへの導線

ウィジェット一覧

選択・スイッチ・スライダー・アップロードなどの入力UIは、いずれも関数1つでUIと値の受け取りが完結するのが Streamlit の強み。導入バージョンの新しい順に紹介します(特に st.pillsst.segmented_control は v1.40 で追加された新しめのUI)。

st.pills のタグ状の複数選択

st.pills

Tier A導入 v1.40〜新しめ

タグ(ピル)状の選択UI。selection_mode="multi" で複数選択、"single" で単一選択。少数の選択肢を見せたまま選ばせたいときに。v1.40 で追加

python
selected = st.pills("技術", options, selection_mode="multi")

Reactとの比較:タグ選択は自前かライブラリで組む領域。Streamlit は1行で複数選択のピルになる。

タグ入力(Pills)の実装比較を見る →
st.segmented_control のセグメント切替

st.segmented_control

Tier A導入 v1.40〜新しめ

横並びのセグメント切替(単一選択)。期間切替やビュー切替など、選択肢が少なく常時見せたい場面に。v1.40 で追加

python
view = st.segmented_control("期間", ["日", "週", "月"])

Reactとの比較:ラジオ的な単一選択を横並びボタンで。React なら自前のトグルボタン群。

チェックボックス・ラジオの実装比較を見る →
st.audio_input のマイク録音UI

st.audio_input

Tier A導入 v1.40〜新しめ

マイクからの録音入力。音声をその場で録ってアップロードでき、音声系アプリの入口に。v1.40 で GA

python
audio = st.audio_input("音声を録音")

Reactとの比較:MediaStream API を自前で扱う領域を、Streamlit は録音UIごと1行で提供する。

st.link_button のリンクボタン

st.link_button

Tier B導入 v1.27〜

外部URLへ遷移するボタン。見た目はボタン、挙動はリンク。v1.27 で追加

python
st.link_button("開く", "https://...")

Reactとの比較:<a> をボタン風に当てる定番を、Streamlit は専用関数で。

ボタンの実装比較を見る →
st.toggle のオン/オフスイッチ

st.toggle

Tier B導入 v1.26〜

オン/オフのスイッチUI。st.checkbox の代替として、設定の有効・無効に。v1.26 で追加

python
on = st.toggle("有効化", value=True)

Reactとの比較:スイッチUIは自前かライブラリ。Streamlit は1行でブール値が返る。

チェックボックス・ラジオの実装比較を見る →
st.button の基本ボタン

st.button

Tier C導入 初期〜

基本のボタン。type="primary" で強調。押された瞬間だけ True を返す。

python
if st.button("送信", type="primary"):
    ...

Reactとの比較:onClick を自前で。Streamlit は if の中に処理を書くだけ。

ボタンの実装比較を見る →
st.selectbox の単一選択ドロップダウン

st.selectbox

Tier C導入 初期〜

単一選択のドロップダウン。選んだ値がそのまま返る。

python
choice = st.selectbox("枠組み", ["Next.js", "Remix"])

Reactとの比較:select/combobox を組む領域を1行で。

セレクトボックスの実装比較を見る →
st.multiselect の複数選択

st.multiselect

Tier C導入 初期〜

複数選択。選んだ項目がタグで表示され、リストで返る。

python
picked = st.multiselect("技術", options, default=["React"])

Reactとの比較:マルチセレクトUIを1行で。

セレクトボックスの実装比較を見る →
st.slider の範囲スライダー

st.slider

Tier C導入 初期〜

数値・範囲をドラッグ入力。(min, max) のタプルを初期値に渡すと範囲スライダーになる。

python
low, high = st.slider("価格帯", 0, 100, (20, 80))

Reactとの比較:スライダーUIを1行で。範囲指定も標準。

スライダーの実装比較を見る →
st.date_input の日付ピッカー

st.date_input

Tier C導入 初期〜

日付ピッカー。タプルを渡せば期間(範囲)選択にもなる。

python
d = st.date_input("公開日")

Reactとの比較:デートピッカーを1行で。

日付範囲ピッカーの実装比較を見る →
st.color_picker のカラーピッカー

st.color_picker

Tier C導入 初期〜

カラーピッカー。選んだ色の HEX 文字列が返る。

python
color = st.color_picker("色", "#cc0000")

Reactとの比較:カラーピッカーを1行で。

st.file_uploader のファイルアップロードUI

st.file_uploader

Tier C導入 初期〜

ファイルアップロード。type で拡張子制限、accept_multiple_files=True で複数可。アップロードされたファイルオブジェクトが返る。

python
f = st.file_uploader("CSV をアップロード", type=["csv"])

Reactとの比較:ドラッグ&ドロップ・進捗表示まで作る領域を、Streamlit は1行で。

ファイルアップロードの実装比較を見る →

Reactでやるなら(使い分けまとめ)

入力ウィジェットは、Streamlit の「関数1つでUIと値の受け取りが完結する」手軽さが最も出るゾーン。フォームや設定画面、絞り込みUIを、状態管理を意識せずに組める。

一方、公開プロダクトで入力の見た目・バリデーション表現・モバイルのタッチ操作・複雑なフォームフローまで作り込むなら、React のフォームライブラリ(React Hook Form 等)やコンポーネントライブラリの自由度が要る。

目安は、社内ツール・設定画面・データ絞り込みなら Streamlit、作り込んだ公開フォームなら React(公開Webが求めるSEO・デザイン制御・大量アクセスに Streamlit は構造的に弱く、逆に開発の速さで強いため)。Streamlit と React/Next.js の違いは Streamlit UI ガイド(総括) で詳しく解説。

この分野の深掘りは ui-memo のセレクトボックススライダーボタンタグ入力比較ページへ。

※トレードオフ(参考):Streamlit の入力UIは手軽な反面、見た目やバリデーション表現の作り込み、モバイル最適化は限定的。React は自由度が高い反面、同じフォームを出すまでの実装量は多い。

AIプロンプトテンプレ

Streamlit で入力ウィジェットを使うときの、AIへの指示テンプレ。

設定フォーム

text
Streamlit で selectbox・slider・toggle を使った設定フォームを作って、
入力値をまとめて1か所に表示して。

pills で絞り込み

text
Streamlit で st.pills(複数選択)でタグを選ぶと、
選んだタグで DataFrame を絞り込んで st.dataframe で表示する実装を書いて。

ファイルを受け取って表示

text
Streamlit で st.file_uploader で CSV を受け取り、
pandas で読み込んで st.dataframe で表示して。

▶ 実際に触ってみる ― 入力ウィジェット(プレイグラウンド)

本物の Streamlit がブラウザで動く。常に最新の実行バージョンを表示。

よくある質問

pills・segmented_control・radio はどう使い分けますか?

radio は縦並びの単一選択、segmented_control は横並びの単一選択、pills はタグ状で単一・複数選択に対応します。見た目と複数選択の要否で選びます。

pills や segmented_control はいつから使えますか?

いずれも v1.40 で追加されました。それ以前のバージョンでは radio / selectbox / multiselect で代替します。

入力した値はどうやって受け取りますか?

各ウィジェットは選択値を戻り値として返します。変数で受けるか、key を付けて st.session_state[key] から参照します。

ボタンを押したときだけ処理を実行するには?

st.button は押された瞬間だけ True を返すので、if st.button(...): の中に実行したい処理を書きます。