こんにちは、JS2IIUです。
Webアプリを簡単に作れるPythonライブラリ「Streamlit」では、状態を管理するために st.session_state を使うことができます。特に、ボタンのクリック回数や入力フォームの値を保持する際に便利ですが、「今、どんな状態が保存されているのか?」を確認するには、ちょっとした工夫が必要です。
本記事では、st.session_state の中身を開発中にデバッグ表示する方法を、わかりやすくステップごとに解説します。さらに、実践的なコード例を使って、さまざまな場面での使い方を紹介します。
🔰 st.session_stateとは?
Streamlitはステートレス(状態を保持しない)仕組みが基本ですが、st.session_state を使うことで、ユーザーごとのセッション状態を保持できます。
たとえば、以下のような用途で活躍します:
- ボタンを押した回数のカウント
- フォームの入力値の保持
- 条件によってUI表示を変更したいときのフラグ保存
ただし、値が正しく保存されているかどうかを確認するには、開発中に session_stateの中身を確認 する必要があります。
🔍 方法1: st.write(st.session_state) を使う
最も手軽な方法は、st.write() を使って session_state の内容を表示することです。
✅ サンプルコード
import streamlit as st
st.write(st.session_state)このコードをStreamlitアプリに追加するだけで、現在の session_state の内容がそのまま表示されます。辞書形式で出力されるため、キーと値の一覧を簡単に確認できます。
🧾 方法2: st.json(st.session_state) で整形表示する
もう少し見やすく表示したい場合は、st.json() を使いましょう。
✅ サンプルコード
import streamlit as st
st.json(st.session_state)JSON形式で階層構造が分かりやすく表示されるため、複雑な値やネストされたデータ構造を扱うときに便利です。
💡 実践例①:ボタンのクリック回数をカウント&デバッグ
ステップ1:セッションに初期値を設定
if 'count' not in st.session_state:
st.session_state.count = 0ステップ2:ボタンをクリックするたびにカウントアップ
if st.button('カウントアップ'):
st.session_state.count += 1ステップ3:カウントと session_state を表示
st.write(f"現在のカウント:{st.session_state.count}")
st.json(st.session_state)🔁 完成コード
import streamlit as st
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.json(st.session_state)ボタンを押すたびにカウントが1ずつ増え、session_state に保存された値が表示されます。

💡 実践例②:フォームの入力内容を保持して表示
ステップ1:st.text_input にキーを指定
name = st.text_input('お名前を入力してください', key='username')ステップ2:挨拶メッセージと session_state を表示
if st.session_state.username:
st.write(f"こんにちは、{st.session_state.username} さん!")
st.json(st.session_state)📄 完成コード
import streamlit as st
name = st.text_input('お名前を入力してください', key='username')
if st.session_state.username:
st.write(f"こんにちは、{st.session_state.username} さん!")
st.json(st.session_state)フォームに入力した名前が session_state に自動的に保存され、再描画後も維持されます。

💡 実践例③:セレクトボックスとチェックボックスの状態を表示
ステップ1:選択式のウィジェットにキーを指定
fruit = st.selectbox('好きなフルーツを選んでください', ['りんご', 'バナナ', 'ぶどう'], key='selected_fruit')
confirmed = st.checkbox('選択を確認しました', key='confirmed')ステップ2:選択内容を表示& session_state 確認
if confirmed:
st.write(f"あなたの好きなフルーツは:{fruit} です")
st.json(st.session_state)✅ 完成コード
import streamlit as st
fruit = st.selectbox('好きなフルーツを選んでください', ['りんご', 'バナナ', 'ぶどう'], key='selected_fruit')
confirmed = st.checkbox('選択を確認しました', key='confirmed')
if confirmed:
st.write(f"あなたの好きなフルーツは:{fruit} です")
st.json(st.session_state)複数の状態をまとめて表示できるのが session_state の強みです。

💡 応用:開発中だけデバッグ表示する
本番ではデバッグ表示を消したいこともあります。そんなときは、サイドバーにチェックボックスを作って切り替え可能にしましょう。
✅ 実装コード
import streamlit as st
st.title("デバッグ表示切り替えの例")
# 状態を管理
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}")
# デバッグ表示のON/OFF
show_debug = st.sidebar.checkbox("デバッグ表示をONにする")
if show_debug:
st.json(st.session_state)これで、サイドバーから「デバッグ表示」を切り替えることができます。

📝 まとめ
st.session_stateは、Streamlitで状態管理をするための便利な仕組みです。- 状態を確認したいときは、
st.write()またはst.json()で中身を表示できます。 - フォームやボタンなど、複数のウィジェットで状態を管理したいときに特に役立ちます。
- 開発中に確認し、本番では非表示にする工夫も簡単にできます。
状態の確認ができれば、Streamlitアプリ開発がぐっとスムーズになります。ぜひ、あなたのアプリでも st.session_state のデバッグ表示を活用してみてください!
🔗 参考リンク
当ブログのStreamlit関連記事一覧です。こちらも参考にしていただけますと幸いです。ぜひご覧ください。

最後まで読んでいただきありがとうございます。


コメント