概要
Bonsai は、 OCaml で構築された高性能なリアクティブWebアプリ用UIライブラリ。 Jane Street 社内で幅広く利用されている。 状態管理とインクリメンタルな計算を分離して柔軟に構成可能。 テストやスタイリング、テンプレートなど周辺ツールも充実。 バックエンド・フロントエンドで OCaml 型を統一可能。
Bonsaiとは
- Bonsai は、 Elm に着想を得た OCaml 向けUIライブラリ
- Jane Street 社内のほぼ全Webアプリで利用
- 企業ディレクトリ、トレーディング監視ツールなど多用途
- 純粋関数型ステートマシンとしてコンポーネントを実装
- 状態変化時のみインクリメンタルに再描画
- 小規模なインタラクティブコンポーネントも容易に記述可能
Bonsaiの特徴
- 状態・インクリメンタリティ・描画 を分離して構成
- 必要な粒度で再計算や再描画を制御
- ビジネスロジックの高コストな計算にも応用可能
- 状態管理がコンポーネント階層に紐付かない
- タブUIなど複数状態を持つコンポーネントの組み込みが容易
- アプリ全体の状態管理がシンプル
- OCaml の型システムを活用
- バックエンド・フロントエンド双方で型・ロジックを共有
- 大規模コードベースの保守性・可読性向上
- 強力なテンプレート言語・スタイルシート・自動テスト対応
テスト機能
- プログラム的UI操作 とDOM変化の検証が容易
- テキスト入力やイベント発火なども自動化してテスト可能
- 差分表示や属性変化の確認も可能
- モックサーバー呼び出しや状態変化もテストに組み込める
- ブラウザを開かずにコンポーネント開発・検証が可能
ドキュメント・学習リソース
- Bonsai Quick Start や Thinking in Bonsai で実践的な入門が可能
- How-to記事やBonsaiの歴史、ポッドキャストエピソードも提供
- 公式サンプル集やAPIドキュメント(cont.mliファイル)あり
Bonsaiライブラリ群
- Bonsai :汎用的なインクリメンタル・コンポーザブル状態マシン
- Bonsai_web :Webブラウザ用UI構築向け
- サンプル、コンポーネント、テスト、ベンチマーク
- Bonsai_term :ターミナルUI構築向け
- サンプル、コンポーネント、テスト
- Bonsai_vr :バーチャルリアリティUI向け(エイプリルフールプロトタイプ)
- ppx_html :JSXライクなHTML記述用プリプロセッサ
- ppx_css :CSS記述用プリプロセッサ
Bonsai導入のメリット
- 状態管理と再描画の最適化による 高パフォーマンス
- 柔軟な 状態のスコープ管理、複雑なUI構成も容易
- 型安全性 によるエラー削減とメンテナンス性向上
- フロント・バックエンドの コード・型共有 による開発効率化
- 自動テスト の充実による品質向上と開発サイクルの高速化