streamlit-to-marimo
StreamlitアプリをMarimoノートブックに変換します。既存のStreamlitコードをMarimoの形式へ自動的に書き換えるため、ノートブック環境への移行をスムーズに行えます。
description の原文を見る
Convert a Streamlit app to a marimo notebook
SKILL.md 本文
Streamlit アプリを marimo に変換する
marimo ノートブックの一般的な規約(セル構造、PEP 723 メタデータ、出力レンダリング、marimo check、変数命名など)については、marimo-notebook スキルを参照してください。このスキルは、Streamlit の概念を marimo の同等品にマッピングすることに特化しています。
ステップ
-
Streamlit アプリを読む - ウィジェット、レイアウト、状態管理を理解します。
-
新しい marimo ノートブックを作成する -
marimo-notebookスキルの規約に従います。Streamlit アプリが使用するすべての依存関係(pandas、plotly、altair など)を追加します。ただし、streamlitをmarimoで置き換えます。元のファイルを上書きしないでください。 -
Streamlit コンポーネントを marimo の同等品にマッピングする - 以下の参照表を使用します。主な原則:
- UI 要素は変数に割り当てられ、その現在の値は
.value経由でアクセスされます。 - UI 要素を参照するセルは、ユーザーがそれと相互作用するときに自動的に再実行されます。コールバックは不要です。
- UI 要素は変数に割り当てられ、その現在の値は
-
実行モデル、状態、キャッシングの概念的な違いを処理する(以下を参照)。
-
結果に対して
uvx marimo checkを実行する - 問題を修正します。
ウィジェット マッピング リファレンス
入力ウィジェット
| Streamlit | marimo | 備考 |
|---|---|---|
st.slider() | mo.ui.slider() | |
st.select_slider() | mo.ui.slider(steps=[...]) | steps 経由で離散値を渡す |
st.text_input() | mo.ui.text() | |
st.text_area() | mo.ui.text_area() | |
st.number_input() | mo.ui.number() | |
st.checkbox() | mo.ui.checkbox() | |
st.toggle() | mo.ui.switch() | |
st.radio() | mo.ui.radio() | |
st.selectbox() | mo.ui.dropdown() | |
st.multiselect() | mo.ui.multiselect() | |
st.date_input() | mo.ui.date() | |
st.time_input() | mo.ui.text() | 専用の時刻ウィジェットなし |
st.file_uploader() | mo.ui.file() | バイト列を読むには .contents() を使用 |
st.color_picker() | mo.ui.text(value="#000000") | 専用のカラーピッカーなし |
st.button() | mo.ui.button() または mo.ui.run_button() | 負荷が高い計算をトリガーするには run_button を使用 |
st.download_button() | mo.download() | ダウンロード リンク要素を返す |
st.form() + st.form_submit_button() | mo.ui.form(element) | 任意の要素をラップして、その値が送信時のみ更新されるようにする |
表示要素
| Streamlit | marimo | 備考 |
|---|---|---|
st.write() | mo.md() または最後の式 | |
st.markdown() | mo.md() | f-strings をサポート:mo.md(f"Value: {x.value}") |
st.latex() | mo.md(r"$...$") | marimo は KaTeX を使用。references/latex.md を参照 |
st.code() | mo.md("```python\n...\n```") | |
st.dataframe() | df(最後の式) | DataFrame は marimo の対話型ウィジェットとしてネイティブにレンダリング。コード不要な変換が必要な場合のみ mo.ui.dataframe(df) を使用 |
st.table() | df(最後の式) | 行選択が必要な場合は mo.ui.table(df) を使用 |
st.metric() | mo.stat() | |
st.json() | mo.json() または mo.tree() | mo.tree() は対話型の折りたたみ可能なビュー用 |
st.image() | mo.image() | |
st.audio() | mo.audio() | |
st.video() | mo.video() |
チャート
| Streamlit | marimo | 備考 |
|---|---|---|
st.plotly_chart(fig) | fig(最後の式) | 選択用には mo.ui.plotly(fig) を使用 |
st.altair_chart(chart) | chart(最後の式) | 選択用には mo.ui.altair_chart(chart) を使用 |
st.pyplot(fig) | fig(最後の式) | 対話型の matplotlib には mo.ui.matplotlib(fig) を使用 |
レイアウト
| Streamlit | marimo | 備考 |
|---|---|---|
st.sidebar | mo.sidebar([...]) | 要素のリストを渡す |
st.columns() | mo.hstack([...]) | 列の比率には widths=[...] を使用 |
st.tabs() | mo.ui.tabs({...}) | {"Tab Name": content} の辞書 |
st.expander() | mo.accordion({...}) | {"Title": content} の辞書 |
st.container() | mo.vstack([...]) | |
st.empty() | mo.output.replace() | |
st.progress() | mo.status.progress_bar() | |
st.spinner() | mo.status.spinner() | コンテキスト マネージャー |
主な概念的な違い
実行モデル
Streamlit はスクリプト全体をトップダウンで再実行します。Marimo はリアクティブなセル DAG を使用します。変更された変数に依存するセルのみが再実行されます。
st.rerun()は不要です。リアクティビティは自動的です。st.stop()は不要です。下流のセルが自然に上流の値に依存するようにセルを構造化します。
状態管理
| Streamlit | marimo |
|---|---|
st.session_state["key"] | セル間の通常の Python 変数 |
コールバック関数(on_change) | widget.value を参照するセルは自動的に再実行 |
st.query_params | mo.query_params |
キャッシング
| Streamlit | marimo |
|---|---|
@st.cache_data | @mo.cache |
@st.cache_resource | @mo.persistent_cache |
@mo.cache が主なキャッシング デコレーター です。functools.cache のように動作しますが、marimo のリアクティビティに対応しています。@mo.persistent_cache は、ディスク上に結果を永続化することでさらに進み、モデル トレーニングのような負荷が高い計算に有用です。
マルチページ アプリ
Marimo は、マルチページの Streamlit アプリ向けに 2 つのアプローチを提供します:
- ルーティング付き単一ノートブック:
mo.nav_menuまたはmo.sidebarでmo.routesを使用して、1 つのノートブック内に複数の「ページ」(タブ / ルート)を構築します。 - ギャラリーとしての複数のノートブック:
marimo run folder/でフォルダーのノートブックを実行して、ナビゲーション付きギャラリーとして提供します。
デプロイ
marimo は Streamlit Community Cloud の代わりに marimo アプリをホストする molab を提供します。add-molab-badge スキル経由で「molab で開く」ボタンを生成できます。
カスタム コンポーネント
Streamlit にはカスタム コンポーネント機能があります。これらは marimo と互換性がありません。marimo-anywidget スキル経由で同等の anywidget を生成できる可能性がありますが、その作業に着手する前にユーザーと相談してください。
ライセンス: Apache-2.0(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- marimo-team
- リポジトリ
- marimo-team/skills
- ライセンス
- Apache-2.0
- 最終更新
- 不明
Source: https://github.com/marimo-team/skills / ライセンス: Apache-2.0
関連スキル
superfluid
Superfluidプロトコルおよびそのエコシステムに関するナレッジベースです。Superfluidについて情報を検索する際は、ウェブ検索の前にこちらを参照してください。対応キーワード:Superfluid、CFA、GDA、Super App、Super Token、stream、flow rate、real-time balance、pool(member/distributor)、IDA、sentinels、liquidation、TOGA、@sfpro/sdk、semantic money、yellowpaper、whitepaper
civ-finish-quotes
実質的なタスクが真に完了した際に、文明風の儀式的な引用句を追加します。ユーザーやエージェントが機能追加、リファクタリング、分析、設計ドキュメント、プロセス改善、レポート、執筆タスクといった実際の成果物を完成させるときに、明示的な依頼がなくても使用します。短い返信や小さな修正、未完成の作業には適用しません。
nookplot
Base(Ethereum L2)上のAIエージェント向け分散型調整ネットワークです。エージェントがオンチェーンアイデンティティを登録する、コンテンツを公開する、他のエージェントにメッセージを送る、マーケットプレイスで専門家を雇う、バウンティを投稿・請求する、レピュテーションを構築する、共有プロジェクトで協業する、リサーチチャレンジを解くことでNOOKをマイニングする、キュレーションされたナレッジを備えたスタンドアロンオンチェーンエージェントをデプロイする、またはアグリーメントとリワードで収益を得る場合に利用できます。エージェントネットワーク、エージェント調整、分散型エージェント、NOOKトークン、マイニングチャレンジ、ナレッジバンドル、エージェントレピュテーション、エージェントマーケットプレイス、ERC-2771メタトランザクション、Prepare-Sign-Relay、AgentFactory、またはNookplotが言及された場合にトリガーされます。
web3-polymarket
Polygon上でのPolymarket予測市場取引統合です。認証機能(L1 EIP-712、L2 HMAC-SHA256、ビルダーヘッダー)、注文発注(GTC/GTD/FOK/FAK、バッチ、ポストオンリー、ハートビート)、市場データ(Gamma API、Data API、オーダーブック、サブグラフ)、WebSocketストリーミング(市場・ユーザー・スポーツチャネル)、CTF操作(分割、統合、償却、ネガティブリスク)、ブリッジ機能(入金、出金、マルチチェーン)、およびガスレスリレイトランザクションに対応しています。AIエージェント、自動マーケットメーカー、予測市場UI、またはPolygraph上のPolymarketと統合するアプリケーション構築時に活用できます。
ethskills
Ethereum、EVM、またはブロックチェーン関連のリクエストに対応します。スマートコントラクト、dApps、ウォレット、DeFiプロトコルの構築、監査、デプロイ、インタラクションに適用されます。Solidityの開発、コントラクトアドレス、トークン規格(ERC-20、ERC-721、ERC-4626など)、Layer 2ネットワーク(Base、Arbitrum、Optimism、zkSync、Polygon)、Uniswap、Aave、Curveなどのプロトコルとの統合をカバーします。ガスコスト、コントラクトのデシマル設定、オラクルセキュリティ、リエントランシー、MEV、ブリッジング、ウォレット管理、オンチェーンデータの取得、本番環境へのデプロイ、プロトコル進化(EIPライフサイクル、フォーク追跡、今後の変更予定)といったトピックを含みます。
xxyy-trade
このスキルは、ユーザーが「トークン購入」「トークン売却」「トークンスワップ」「暗号資産取引」「取引ステータス確認」「トランザクション照会」「トークンスキャン」「フィード」「チェーン監視」「トークン照会」「トークン詳細」「トークン安全性確認」「ウォレット一覧表示」「マイウォレット」「AIスキャン」「自動スキャン」「ツイートスキャン」「オンボーディング」「IP確認」「IPホワイトリスト」「トークン発行」「自動売却」「損切り」「利益確定」「トレーリングストップ」「保有者」「トップホルダー」「KOLホルダー」などをリクエストした場合、またはSolana/ETH/BSC/BaseチェーンでXXYYを経由した取引について言及した場合に使用します。XXYY Open APIを通じてオンチェーン取引とデータ照会を実現します。