Agent Skills by ALSEL
Anthropic Claudeソフトウェア開発⭐ リポ 0品質スコア 50/100

marimo-notebook

Pythonファイルとして、正しいフォーマットでmarimoノートブックを記述します。

description の原文を見る

Write a marimo notebook in a Python file in the right format.

SKILL.md 本文

marimo ノートブックに関する注記

marimo は Jupyter と異なり、JSON ではなく Python を使用してノートブックを作成します。以下はノートブックの例です:

# /// script
# dependencies = [
#     "marimo",
#     "numpy==2.4.3",
# ]
# requires-python = ">=3.14"
# ///

import marimo

__generated_with = "0.20.4"
app = marimo.App(width="medium")


@app.cell
def _():
    import marimo as mo
    import numpy as np

    return mo, np


@app.cell
def _():
    print("hello world")
    return


@app.cell
def _(np, slider):
    np.array([1,2,3]) + slider.value
    return


@app.cell
def _(mo):
    slider = mo.ui.slider(1, 10, 1, label="number to add")
    slider
    return (slider,)


@app.cell
def _():
    return


if __name__ == "__main__":
    app.run()

ノートブックの構造では、関数がセルの内容を表しています。各セルは @app.cell デコレータで定義され、関数の入出力がセルの入出力になります。marimo は通常、セル間の依存関係を自動的に処理します。

Marimo ノートブックの実行

# スクリプトとして実行 (非対話的、テスト用)
uv run <notebook.py>

# ブラウザで対話的に実行
uv run marimo run <notebook.py>

# 対話的に編集
uv run marimo edit <notebook.py>

スクリプトモード検出

mo.app_meta().mode == "script" を使用して CLI と対話的モードを判定します:

@app.cell
def _(mo):
    is_script_mode = mo.app_meta().mode == "script"
    return (is_script_mode,)

重要な原則: シンプルに保つ

すべての UI 要素は常に表示します。 スクリプトモードではデータソースのみを変更します。

  • スライダー、ボタン、ウィジェットは常に作成・表示される
  • スクリプトモードでは、ユーザー入力を待つ代わりに合成/デフォルトデータを使用する
  • 全てを if not is_script_mode の条件分岐で囲まない
  • 通常の制御フローに try/except を使用しない

良いパターン

# ウィジェットは常に表示
@app.cell
def _(ScatterWidget, mo):
    scatter_widget = mo.ui.anywidget(ScatterWidget())
    scatter_widget
    return (scatter_widget,)

# データソースのみモードに基づいて変更
@app.cell
def _(is_script_mode, make_moons, scatter_widget, np, torch):
    if is_script_mode:
        # テスト用に合成データを使用
        X, y = make_moons(n_samples=200, noise=0.2)
        X_data = torch.tensor(X, dtype=torch.float32)
        y_data = torch.tensor(y)
        data_error = None
    else:
        # 対話モードではウィジェットデータを使用
        X, y = scatter_widget.widget.data_as_X_y
        # ... データ処理 ...
    return X_data, y_data, data_error

# スライダーは常に表示 - 両モードで .value を使用
@app.cell
def _(mo):
    lr_slider = mo.ui.slider(start=0.001, stop=0.1, value=0.01)
    lr_slider
    return (lr_slider,)

# スクリプトモードでは自動実行、対話モードではボタンを待機
@app.cell
def _(is_script_mode, train_button, lr_slider, run_training, X_data, y_data):
    if is_script_mode:
        # スライダーのデフォルト値で自動実行
        results = run_training(X_data, y_data, lr=lr_slider.value)
    else:
        # ボタンクリックを待機
        if train_button.value:
            results = run_training(X_data, y_data, lr=lr_slider.value)
    return (results,)

状態とリアクティビティ

セル間の変数はほとんどのユースケースでノートブックのリアクティビティを定義します。特別な状態管理は不要です。セル間でオブジェクトを変更しないでください (例: my_list.append())。代わりに新しいオブジェクトを作成してください。双方向 UI 同期または累積コールバック状態が必要でない限り mo.state() を避けてください。詳細は STATE.md を参照してください。

セルを if ステートメントで保護しない

marimo のリアクティビティはセルが依存関係の準備ができた時のみ実行されることを意味します。不要な保護を追加しないでください:

# 悪い例 - if ステートメントがチャートの表示を妨げる
@app.cell
def _(plt, training_results):
    if training_results:  # 間違い - これをしないでください
        fig, ax = plt.subplots()
        ax.plot(training_results['losses'])
        fig
    return

# 良い例 - marimo に依存関係を処理させる
@app.cell
def _(plt, training_results):
    fig, ax = plt.subplots()
    ax.plot(training_results['losses'])
    fig
    return

セルは training_results に値が入るまで実行されません。

try/except を制御フローに使用しない

特定の予期された例外を処理する場合を除き、try/except ブロックでコードを囲まないでください。エラーは自然に表面化させてください。

# 悪い例 - try/except の後ろにエラーを隠す
@app.cell
def _(scatter_widget, np, torch):
    try:
        X, y = scatter_widget.widget.data_as_X_y
        X = np.array(X, dtype=np.float32)
        # ...
    except Exception as e:
        return None, None, f"Error: {e}"

# 良い例 - 何かが間違っていれば失敗させる
@app.cell
def _(scatter_widget, np, torch):
    X, y = scatter_widget.widget.data_as_X_y
    X = np.array(X, dtype=np.float32)
    # ...

try/except を使用するのは:

  • 特定の既知の例外型を処理する場合
  • 例外が通常の操作で予期される場合 (ファイルが見つからない等)
  • 有意義な復旧アクションがある場合

セル出力レンダリング

marimo はセルの最終式のみをレンダリングします。インデントされた、または条件付きの式はレンダリングされません:

# 悪い例 - インデントされた式はレンダリングされない
@app.cell
def _(mo, condition):
    if condition:
        mo.md("This won't show!")  # 間違い - インデント済み
    return

# 良い例 - 最終式がレンダリングされる
@app.cell
def _(mo, condition):
    result = mo.md("Shown!") if condition else mo.md("Also shown!")
    result  # これは最終式なのでレンダリングされる
    return

PEP 723 依存関係

marimo edit --sandbox で作成されたノートブックはこれらの依存関係がファイルの上部に自動的に追加されていますが、ノートブックを作成する際にこれらが存在することを確認することも良い実践です:

# /// script
# requires-python = ">=3.12"
# dependencies = [
#     "marimo",
#     "torch>=2.0.0",
# ]
# ///

marimo check

ノートブックに取り組むときは、ノートブックが実行できるかを確認することが重要です。そのため marimo は一般的なエラーを見つけるためのリンターとして機能する check コマンドを提供しています。

uvx marimo check <notebook.py>

ノートブックをユーザーに返す前にこれらがチェックされていることを確認してください。

重要: アンダースコア接頭辞を持つ変数を過度に使用する傾向があります。これは最大でも 1、2 個の変数にのみ適用してください。marimo で全セルの接頭辞を付ける代わりに、新しい変数を作成することを検討してください。

API ドキュメント

ユーザーが特定の marimo 関数を使用するよう求めた場合、以下で局所的にドキュメントをチェックできます:

uv --with marimo run python -c "import marimo as mo; help(mo.ui.form)"

テスト

デフォルトでは、marimo はノートブック内のテストを検出して実行します。 オプションの pytest 依存関係が存在する場合、marimo はテスト専用コードのみで構成されるセル - つまり名前が test_ で始まる関数 - に対して pytest を実行します。 ユーザーがテストを追加するよう求めた場合、pytest 依存関係が追加されていることを確認し、テストコードのみを含むセルがあることを確認してください。

pytest を使用したテストの詳細は PYTEST.md を参照してください

テストが追加されたら、コマンドラインからノートブック上で pytest を実行できます。

pytest <notebook.py>

追加リソース

  • marimo での SQL 使用については SQL.md を参照してください
  • marimo の UI 要素については UI.md を参照してください
  • 関数/クラスをトップレベルインポートとして公開する場合は TOP-LEVEL-IMPORTS.md を参照してください
  • ノートブックのエクスポート (PDF、HTML、markdown など) については EXPORTS.md を参照してください
  • 状態管理とリアクティビティについては STATE.md を参照してください
  • marimo ノートブックのデプロイについては DEPLOYMENT.md を参照してください
  • anywidget を使用したカスタムインタラクティブウィジェットについては ANYWIDGET.md を参照してください
  • 外部編集と --watch モードについては WATCHING.md を参照してください
  • 負荷の高いノートブック (キャッシング、遅延評価、mo.stop) については EXPENSIVE.md を参照してください
  • 設定 (pyproject.toml、marimo.toml) については CONFIGURATION.md を参照してください
  • リアクティビティモデル (DAG、変数スコーピング、変更) については REACTIVITY.md を参照してください

ライセンス: Apache-2.0(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
marimo-team
リポジトリ
marimo-team/skills
ライセンス
Apache-2.0
最終更新
不明

Source: https://github.com/marimo-team/skills / ライセンス: Apache-2.0

関連スキル

汎用ソフトウェア開発⭐ リポ 39,967

doubt-driven-development

重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 1,175

apprun-skills

TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。

by yysun
OpenAIソフトウェア開発⭐ リポ 797

desloppify

コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。

by Git-on-my-level
汎用ソフトウェア開発⭐ リポ 39,967

debugging-and-error-recovery

テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 39,967

test-driven-development

テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 39,967

incremental-implementation

変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。

by addyosmani
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: marimo-team · marimo-team/skills · ライセンス: Apache-2.0