16
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Streamlit v1.43.0〜1.44.0で個人的に気になったアップデートまとめ

Last updated at Posted at 2025-04-05

この記事について

Pythonで手軽にフロントエンドを作れるライブラリ「Streamlit」を、久しぶりに触れてみました。その中で特に気になった新機能があったので、いくつかピックアップしてご紹介します。

Streamlitのリリースノートを見てみる

記事執筆時点(4/5)の最新バージョンはv1.44.0のようでした。
https://docs.streamlit.io/develop/quick-reference/release-notes/2025
今回は1.44.0のアップデートを2つ、1.43.0のアップデート(2025/3/4)を1つ取り上げてみたいと思います。

前提 実行環境はuvを使っています。uvがインストールされていることを前提に以下記載しています。詳しくは公式ページをご覧ください。

ざっくり導入手順

プロジェクトを作成

uv init

インストール対象のライブラリを追加

uv add streamlit

仮想環境が自動的に作成されるのでactivate

. .venv/bin/activate

実際にライブラリをインストール

uv sync

st.chat_inputがファイル入力を受け付けるようになった(v1.43.0)

📁 Announcing the option to accept files with st.chat_input!

従来、ファイルアップロードをできるUIを作るには、st.file_uploaderを使う必要がありましたが、
st.chat_inputにおいて、accept_fileをTrueにすることで、ファイルアップロード用のUIを表示できるようになりました。(以下参照)
file_typeを指定することで、アップロードすることのできる拡張子を指定することができます。

このアップデートで、マルチモーダルなチャットUIの構築がさらに手軽になった印象です。

prompt = st.chat_input(
    "メッセージとファイルを入力してください",
    accept_file=True,
    file_type=["jpg", "jpeg", "png"]
)

スクリーンショット 2025-04-05 17.00.55.png

とても雑な作りですがこんなAIとマルチモーダルに対話するUIが簡単に作れました。詳細なコードの解説はここでは割愛しますが、入力されたプロンプトから質問のtextとアップロードされたfileを抽出し、それをAmazon BedrockのConverseAPIに渡す形で作っています。(作成にあたっては一部こちらを参照しました)

(イメージ)

if prompt:
    question = prompt["text"]
    files = prompt["files"]
    
    if files:
        uploaded_file = files[0]
        .....
        # bedrockのAPIを呼び出す処理(question,uploaded_fileを引数で渡してあげる)

chat_inputを使って入力されたpromptの中身をターミナルに出力して確認してみると、以下のような形式になっています。

ChatInputValue(text='説明して', files=[UploadedFile(file_id='XXXX', name='0000096860.pdf', type='application/pdf', size=2031020, _file_urls=file_id: "XXXXX"
upload_url: "XXXXXXXXXX"
delete_url: "XXXXXXXXX"
)])

スクリーンショット 2025-04-05 16.51.17.png

②エラーの内容を、Google検索やChatGPTで質問できるようになった(v1.44.0)

🤖 st.exception includes links to open Google or ChatGPT with the contents of the exception. This includes uncaught exceptions displayed in the app.

エラー内容を、ChatGPTやGoogleで検索できるようになりました。
簡単な例ではありますが、Pythonコードを書きエラーを発生させてみます。

import streamlit as st

st.title("📌 Streamlit v1.44.0新機能")

try:
    x = 1 / 0  # わざとゼロ除算してみる
except Exception as e:
    st.exception(e)

$ streamlit run app.py

でローカル(localhost:8501)でアプリをstreamlitで立ち上げ、ブラウザを確認してみます。
ゼロ除算をしているのでこのコードは当然エラーになります。
エラー画面に注目すると、Ask Google Ask ChatGPTというリンクが表示されています。
スクリーンショット 2025-04-05 13.52.48.png

実際に各リンクを押してみると、Ask Googleの方はエラー内容を自動的に検索ボックスに入れて検索、Ask ChatGPTの方ではエラー内容自動的にチャットに入力し、ChatGPT内で質問が走るようになっていました。
スクリーンショット 2025-04-05 13.57.00.png
スクリーンショット 2025-04-05 13.56.06.png

開発をしていてエラーに直面した際、エラー内容をいちいちペタペタ貼って検索するのは面倒ではあるので、その手間を省いてくれる点で役立ちそうです。

Ask ChatGPTの方に関しては、エラー内容がそのままチャットに入力→送信されるので、プロジェクト固有の情報が入っているソースコードなどで利用する際は、安全性はしっかりと確認した上で利用した方がいいかもしれません。

③ユーザーのlocaleを取得できるようになった(v.1.44.0)

🗺️ You can access the user's locale through st.context (#10563).

st.context provides a read-only interface to access headers and cookies for the current user session.

st.contextを使うことで、ユーザーのlocale(言語設定)を取得できるようになりました。これにより、アプリ側で表示言語を切り替えるといった多言語対応がより実現しやすくなりそうです。

こちらも簡単なコードではありますが試してみます。

import streamlit as st

context = st.context
locale = context.locale
st.write(locale)

if locale == "ja":
    st.write("こんにちは")
else:
    st.write("Hello!")

スクリーンショット 2025-04-05 14.24.33.png

ユーザーのロケールを正しく取得していることがわかりました。

他にも以下のような情報が取得できるようです。
スクリーンショット 2025-04-05 14.18.53.png

まとめ・所感

簡単ではありましたが、今回はstreamlitの機能をいくつかピックアップして紹介してみました。
最近ではOIDCによるユーザー認証が追加されたり(v1.42.0〜)と、開発者にとって便利な機能が続々と追加されているStreamlitですが、今回取り上げた機能は「劇的な変化」ではないものの、あると嬉しい便利機能がしっかりと詰まっていると感じました。今後のアップデートも引き続き追っていきたいと思います。

おまけ

Streamlitを使ったLLMチャットアプリの作り方が解説されている公式チュートリアルです。興味がある方はこちらもぜひチェックしてみてください。

16
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?