Skip to content

バインディング ​

バインディングはホスト環境にワークブック操作を公開し、計算はコアに残します。各言語で使いやすい型や操作方法に合わせて、C ABI を呼び出します。

用語: バインディング

ホスト側の型(Uint8Array / bytes / bytearray / バイト列のポインタと長さなど)をエンジン入力に、エンジン出力をホスト側の型に変換する薄い層です。バインディングは数式の意味論を実装せず、データの形を整え、リソースの寿命を管理します。

ホスト側の型バインディング境界コアUint8Array / BufferWASM・Native Nodebytes / bytearrayPythonバイト列のポインタ+ 長さC ABI への入力JSON 入力MCP ツールWASMシングルと pthread の入口@libraz/formulon-nativeソースからビルド、npm 未公開PythonコンテキストマネージャーCLIargv・stdio・終了コードMCPJSON 入出力・セッションC ABI互換性を保つインターフェースC++17 コアパーサ・評価器・計算グラフ・ファイル入出力ホスト側の型バインディング境界コアUint8Array / BufferWASM・Native Nodebytes / bytearrayPythonバイト列のポインタ + 長さC ABI への入力JSON 入力MCP ツールWASMシングルと pthread の入口@libraz/formulon-nativeソースからビルド、npm 未公開PythonコンテキストマネージャーCLIargv・stdio・終了コードMCPJSON 入出力・セッションC ABI互換性を保つインターフェースC++17 コアパーサ・評価器・計算グラフ・ファイル入出力
バインディングが行うのはホスト側の型と寿命の変換だけで、計算は常に C ABI の先にあるコアで行われます。

担当すること ​

  • ホストのバッファを C ABI が受け取れるワークブックのバイト列に変換します。
  • ワークブックハンドルとリソースの寿命(いつ解放するか)を管理します(WASM の delete()、Python のコンテキストマネージャー、Native Node の dispose() と GC フォールバック、CLI のプロセス終了、MCP セッションの終了)。
  • スプレッドシート値をホスト値に変換し、ValueKind を保ちます(セルエラーが例外ではなく値であり続けるようにします)。
  • 計算エラーと入出力エラーを公開します(スプレッドシートのエラー値を失わない形にします)。
  • 各ホスト用の API を公開します。

ロケールの挙動はコアに置きます。C ABI と JS / Python バインディングは、完全な Excel プロファイル ID を渡してプロファイル選択、関数名の変換、数式のローカライズ、ロケール情報の取得を行います。人間向けの関数メタデータはホスト側の責務で、エンジンのカタログではロケールに依存しません。

担当しないこと ​

バインディングは次のことを しません。

  • 数式の意味論を実装しません(パーサ / 評価器はコアが担当します)。
  • ワークブックの読み込みを重複実装しません(OOXML / XLSB のリーダーはコアが担当します)。
  • プロファイル固有の挙動を追加しません(プロファイルはワークブック状態であり、C ABI 経由で設定されます)。
  • 独自の再計算が必要なセルの集合・依存関係グラフ・再計算スケジューラを導入しません(すべてコアが担当します)。

バインディングで Excel を再実装しないこと

関数結果の特別扱いや、コアと異なる値変換が必要なら、コア側を修正します。評価器にケースを追加し、Oracle ゴールデンデータを追加すれば、すべてのバインディングが同じ挙動を取り込めます。バインディングごとに修正するとずれが広がります。

npm の WASM バインディングは、単一スレッドの @libraz/formulon 入口と pthread の @libraz/formulon/threads 入口を公開します。どちらも C ABI、ワークブック API、TypeScript 宣言を共有し、ワーカーを使う並列再計算に対応するのは後者だけです。

実例 ​

バインディングホスト側で扱う型・操作触らない領域
WASMUint8Array、ステータス付きの戻り値、ValueKind 列挙型、非同期モジュールファクトリ、直列版/pthread 版の入口選択関数の意味論・ファイルの読み込み・計算グラフ
Native NodeN-API Buffer、同期 API、dispose() / memoryUsage()関数の意味論・ファイルの読み込み・計算グラフ
Pythonbytes、コンテキストマネージャー、FormulonError、Value.to_python()関数の意味論・ファイルの読み込み・計算グラフ
CLIargv、stdin / stdout / stderr、終了コード関数の意味論・ファイルの読み込み・計算グラフ
MCPJSON 入出力、セッションマップ、許可リストに基づく呼び出し関数の意味論・ファイルの読み込み・計算グラフ

次に読むもの ​