Skip to content

パッケージと実行入口 ​

実行入口パッケージ実行環境
JavaScript / WASM@libraz/formulonブラウザ、ワーカー、Node
Native Node@libraz/formulon-nativeNode.js N-API アドオン。npm には公開していないため、ソースからビルドします(Native Node)。リリース CI は darwin-arm64、linux-x64、linux-arm64 向けにビルドします
Pythonformulonwasmtime で動く py3-none-any wheel
CLIGitHub Releases の formulon-<version>-<os>-<arch>.tar.gz単体の formulon バイナリ。darwin-arm64、linux-x64、linux-arm64 向け
C ABIsrc/c_api/formulon_c.h と formulon_static(または共有ライブラリの formulon)独自ホスト向け。ソースからビルドします
MCP@libraz/formulon-mcpエージェント向け stdio MCP サーバー
表計算 UI@libraz/formulon-cellブラウザ向け表計算 UI キット

すべての実行入口は同じ計算コアを呼び出します。違いはパッケージ構成、ホスト言語、メモリ所有権と、後述のメソッド差分です。

コアC ABI実行入口WASM の上に構築C++17 計算コアすべての実行入口が共有formulon_c.h + コアライブラリ直接または間接に到達@libraz/formulonWASM・ブラウザ /Node@libraz/formulon-nativeNative Node・ソースビルドformulon (Python)wasmtime 上の wheelformulon (CLI)単体バイナリformulon-cellブラウザ用の表計算 UI キットformulon-mcpエージェント向け stdio サーバーコアC ABI実行入口WASM の上に構築C++17 計算コアすべての実行入口が共有formulon_c.h + コアライブラリ直接または間接に到達@libraz/formulonWASM・ブラウザ / Node@libraz/formulon-nativeNative Node・ソースビルドformulon (Python)wasmtime 上の wheelformulon (CLI)単体バイナリformulon-cellブラウザ用の表計算 UI キットformulon-mcpエージェント向け stdio サーバー
すべての実行入口が同じ計算コアを共有します。formulon-cell と formulon-mcp は C ABI を直接バインドせず、WASM パッケージの上に作られています。

formulon-cell と formulon-mcp は C ABI に直接接続せず、WASM パッケージの上に構築されています。ブラウザや Node から @libraz/formulon を使う場合と同じ経路で計算コアに到達します。

用語: 実行入口

共有する C++17 計算コアを各ホスト環境から呼び出すためのパッケージ境界です。WASM、Python、CLI などは、直接または間接に C ABI 経由で同じコアを呼びます。ホスト言語、メモリ所有権、入出力の形、文書化された互換性の境界は実行入口ごとに異なる場合がありますが、共通の数式挙動は共有コアが定めます。

実行入口ごとの成熟度 ​

実行入口成熟度補足
WASM最も広い JS API生成された formulon.d.ts。ブラウザ、ワーカー、Node 対応
Python広いワークブック APIwasmtime で動くラッパー。with ブロックを抜けるとワークブックを解放
CLI用途を絞ったツールeval / recalc / dump / paginate
Native NodeWASM と同じメソッド構成のネイティブバイナリ戻り値の形と値の意味は WASM と同じ。違いは下表のとおり
C ABI低レベル API 境界他の実行入口が包んでいるすべての関数
MCPエージェント向け APIWASM の上に構築し、許可リストに基づいて呼び出す
formulon-cellUI キットTypeScript、React、Vue から埋め込める表計算 UI

メソッド差分 ​

3 つのライブラリ用バインディングは、ワークブックモデル、ジオメトリ、テーマとスタイル、型付き AutoFilter、入力規則、コメント、画像、ピボットテーブル、印刷設定、プロファイル関連のヘルパーを共通で持ちます。違いがあるのは次の項目です。

機能WASMNative NodePython
ワークブックの解放delete()。メソッド実行中は TypeErrordispose()(GC による最終化は予備)。メソッド実行中は TypeErrorclose() または with ブロック
メモリ使用量の推定—memoryUsage()memory_usage()
並列再計算recalcParallel()。ワーカーを使うのは @libraz/formulon/threads だけrecalcParallel()—
スカラーの読み取り専用評価evaluateFormulaText()evaluateFormulaText()—(evaluate_formula_array() を使う)
反復計算の進捗コールバックsetIterativeProgress()setIterativeProgress()—
ログの受け取り先setLogSink()setLogSink()—(set_log_min_level() のみ)
テーブルの作成createTable() / updateTable() / removeTable()—table_create() / table_update() / table_remove()
シートの AutoFilter XMLgetSheetAutoFilterXml() / setSheetAutoFilterXml()—get_auto_filter_xml() / set_auto_filter_xml()
名前付きスタイルの XF レコードaddCellStyleXf()—add_cell_style_xf()
スタイルの一括登録、有効化だけの反復切り替え——add_batch()、set_iterative_enabled()

引数の契約はバインディング間で共通です。2 つの JS パッケージは、エンジン呼び出しの前にすべての位置引数を検査します。引数の欠落、型の誤り、オブジェクトが宣言された位置へのプリミティブまたは null は TypeError で、どちらのパッケージも既定値で補いません。メソッドがステータスで報告する不正な引数は、どちらも kInvalidArgument(2)を返します。@libraz/formulon-native の TypeScript 宣言は @libraz/formulon と同じ列挙型(PivotAxis、PivotAggregation、PivotSortOrder など)を使うため、一方のパッケージの型で書いたコードは他方でもコンパイルできます。Python は Value のペイロードを検証し(ValueError または TypeError)、整数引数の範囲を検査します(ValueError)。C ABI は不正な UTF-8 を kBindingUtf8EncodingError(7002)で拒否し、インデックス、個数、アウトラインレベルの引数の範囲を検査します。どのバインディングもこれらのステータスを返します。C の公開レコードは固定レイアウトなので、ネイティブのクライアントはリンクするヘッダーに合わせて再コンパイルする必要があります。

CLI が公開するのは一部だけです。並列再計算の --threads、--iterative、4 つのサブコマンドがあります。

実行入口ごとの結果が食い違ったとき ​

同じワークブック・同じプロファイルで 2 つの実行入口が異なる値を返したら、不具合か、文書化された互換性差分として扱います。リポジトリの make parity-test は、CLI、npm の WASM パッケージ、Python wheel で共有の検証用ワークブックを評価し、ビルドされていないチャネルと値の不一致を分けて報告します。その他の違いはネイティブスレッド、コピーコスト、WASM のメモリ上限などの運用面です。

次に読むもの ​