ニュース

Biff.graph: Clojure向け軽量グラフクエリレイヤー

Biff.graphは約600行のライブラリで、データベースと派生データを統合グラフとしてクエリ可能にします。Pathomに触発されつつ、理解とデバッグが容易になるよう設計されています。

July 12, 2026· 1 min read· 出典: GitHub
Biff.graph: Clojure向け軽量グラフクエリレイヤー

Biff.graphは、Biff Clojureウェブフレームワークの新しいライブラリで、軽量なグラフベースのデータモデリングレイヤーを提供します。データモデルをクエリ可能なグラフとして構造化し、データベースアクセスと派生/ビジネスロジックを単一の統一インターフェースに統合します。

このライブラリは基本的にPathomの簡略版ですが、フットプリントははるかに小さく、コード全体で約600行、クエリ実行エンジンはわずか200行です。主なトレードオフとして、biff.graphはPathomが使用するクエリ計画ステップをスキップするため、一部のクエリは効率が低下する可能性がありますが、コードベースはPathomの全機能を必要としない開発者にとってはるかに親しみやすくなっています。

動作の仕組み

Biff.graphはEQLDatomic pullパターンのサブセットを使用してデータ形状を記述します。「リゾルバ」、つまり特定のデータを処理する小さな独立した関数を定義します。各リゾルバには入力クエリと出力クエリがあります。ライブラリのクエリエンジンはこれらのリゾルバを連鎖させ、要求された形状でデータを返します。

例えば、データベースからブログ記事を取得するリゾルバと、絵文字を削除して記事タイトルを整形する別のリゾルバを定義できます。クリーンなタイトルを持つ記事をクエリすると、biff.graphは自動的に両方のリゾルバを呼び出し、結果を結合します。

主要な設計判断

このライブラリはバッチリゾルバとキャッシングをサポートしており、クエリ計画の欠如をある程度補っています。作者のJacob O'Bryantは、Pathomの使用を好んでいたものの、Biffのターゲットユーザー(グラフデータモデリングパターンに馴染みのない小規模プロジェクトの開発者)には複雑すぎるのではと懸念し、biff.graphを作成しました。

Biff.graphは現在リリース候補ステータス(バージョン2.0.0-rc7)であり、他のすべてのBiff 2ライブラリがリリースされるまでその状態が続きます。破壊的変更は予想されていません。

実用的な使い方

推奨されるパターンは、データベーステーブルごとに1つのリゾルバを自動生成し、入力を主キー、出力をすべてのカラムと外部キー用の結合キーとすることです。派生データ用の追加リゾルバは、必要に応じて徐々に追加できます。このライブラリはRingリクエストハンドラでの使用のためにbiff.fxと統合されています。

デバッグは、:biff.graph/traceキーを含む例外データを介して処理され、グラフトラバーサル内のエラー発生箇所を正確に示します。リゾルバのテストは簡単で、:biff.graph/resolve-fnの下に保存され、:biff.graph/inputの下に入力を持つ単一のコンテキストマップを受け取ります。