開発

BABLR公開、Tree-sitterに挑戦する次世代パーサーフレームワーク

5年の開発期間を経てJavaScript向け汎用パーサーフレームワーク「BABLR」が公開された。Tree-sitterやESTreeに対抗する新技術スタックが注目を集める。

6分で読める SINGULISM 編集チームが確認・編集

BABLR公開、Tree-sitterに挑戦する次世代パーサーフレームワーク
Photo by Pankaj Patel on Unsplash

フロントエンドエンジニアのConrad氏が、5年間の開発期間を経て汎用パーサーフレームワーク「BABLR」の最新版を公開した。同時に、パースツリーのための新しいデータ言語「CSTML」や、パースツリーフォーマット「agAST」も合わせて発表されており、これら3つの技術を組み合わせた統合プラットフォームとしての位置づけだ。

IDEの常識を問い直す試み

BABLRの根底にある思想は、統合開発環境(IDE)の在り方そのものを問い直すという野心的なものだ。

従来のIDEは「テキストファイルエディタ」を起点として構築されてきたが、Conrad氏は「コードドキュメントエディタ」を起点にしたらどうなるか、という問いを出発点にしている。

実際のところ、開発者の日常にはすでにドキュメント駆動のコーディングツールが浸透している。インデントを整えるフォーマッタ、よくあるミスを検出するリンタ、新しい言語構文を変換するトランスパイラ、数十から数十万ファイルにわたるリファクタリングを実行するコードモッドなどだ。BABLRはこれらの延長線上にあり、より根本的なレベルでコードの構造にアクセスするための基盤技術を提供しようとしている。

3つの柱となる技術

今回のリリースで公開されたのは、以下の3つのコア技術だ。 BABLR — パーサーフレームワーク。Tree-sitterと競合する位置づけの汎用パーサーであり、JavaScript上で動作する。特筆すべきはその軽量さで、ブラウザネイティブ対応かつ追加サイズはわずか約10KB程度に抑えられているという。これにより、ドキュメントサイトやブログ記事上でもコード解析を実行できるほどの柔軟性を実現している。 agAST — パースツリーフォーマット。従来JavaScriptエコシステムで広く使われてきたESTreeと競合する新しいツリー形式を提案するものだ。 CSTML — パースツリー専用に設計された新しいデータ言語。BABLRパーサーがCSTMLおよびagASTのツリーを生成し、データ構造とアルゴリズムのライブラリがそれらのツリーを実用的に活用可能にする役割を担う。 この3つの技術は単独でも利用可能だが、組み合わせることで相互に補完し合い、各技術の総和を超えるプラットフォームとして機能することが目指されている。

「Bedazzlr」が示すコード理解の新体験

BABLRの実用性を示す具体例として、同ページ上で稼働しているシンタックスハイライトツール「Bedazzlr」

が披露されている。これは他のツールが提供する基本的なトークンの色分けを超えた体験を目指している。 Bedazzlrは、ASTExplorerのような体験をウェブページ内に埋め込むことに近い機能を提供する。ユーザーはセマンティックな選択を通じて構造を調査でき、構文木に埋め込まれたノードの名前を確認できる。こうしたノード名は、新しい言語を学ぶ際に色分けよりもはるかに有用な情報となり得る。 また、フロントエンド側でこれらの情報を計算できるという特性は、構文木の構造を直接見せることによる言語学習支援が英語話者に限定されないことを意味する。言語に依存しない形でコードの構造的な理解を促せる点は、グローバルな開発者コミュニティにとって大きな利点となり得る。

3つのコアステークホルダーへの価値提案

Conrad氏は、BABLRプラットフォームの長期的な成長は、言語作者、ツール作者、ユーザーという3つの主要なステークホルダーの間でどれだけ良い妥協点を築けるかに依存すると述べている。

それぞれのグループがプラットフォーム上に他の2つのグループと出会える場を見出せたとき、初めて価値が生まれるという構想だ。

言語作者にとっては、自らの言語のパーサーを容易に構築・提供できる基盤が得られること。ツール作者にとっては、標準化されたツリー形式を通じて多言語対応のツールを効率的に開発できること。そしてユーザーにとっては、より豊かなコード理解と編集の体験が得られること。これらがBABLRの提供する価値の核心をなす。

Tree-sitterエコシステムへの挑戦

BABLRが直接的な競争相手として挙げているTree-sitterは、GitHubのエディタAtom向けに開発が始まり、現在ではNeovimやHelixなど多くのエディタやツールで採用されているインクリメンタルパーシングライブラリだ。

Tree-sitterがC言語で実装され、多言語のパーサー生成に実績があるのに対し、BABLRはJavaScriptネイティブで動作し、ブラウザ環境での利用を重視している点に違いがある。 また、パースツリーフォーマットの面では、ESTreeが長年にわたりJavaScript ASTのデファクトスタンダードとして機能してきた。agASTがこれに代わる新たな選択肢を提示できるかは、エコシステムの採用如何にかかっている。

今後の展望 BABLRはまだ発展途上のプロジェクトであり、Conrad氏自身も「長期的に

impressive な成長を遂げられるかどうかは、3つのステークホルダー間のバランスにかかっている」

と率直に述べている。コードエディタとしてのビジョンはウェブページ上で稼働する視覚的で触覚的なプログラマブルなエディタを構想しており、Bedazzlrはその第一歩と位置づけられる。 5年という開発期間を費やした末に公開されたこのプラットフォームが、Tree-sitterやESTreeが築いてきたエコシステムに対してどこまで食い込めるか。開発者コミュニティの反応と採用の広がりが、今後の鍵を握りそうだ。

よくある質問

BABLRとTree-sitterの主な違いは何ですか?
BABLRはJavaScriptネイティブで動作し、ブラウザ環境での利用を前提とした軽量設計が特徴です。一方、Tree-sitterはC言語で実装されており、主にネイティブエディタ向けのインクリメンタルパーシングを得意としています。BABLRはブラウザ上でのコード解析やインタラクティブなシンタックスハイライトといったユースケースに強みを持っています。
CSTMLとは何ですか?
CSTMLはBABLRプロジェクトで提案されたパースツリー専用の新しいデータ言語です。BABLRパーサーが出力する構文木のデータ形式として設計されており、agASTツリーフォーマットとともに利用されることを想定しています。コードの構造情報をよりリッチに表現するための基盤技術です。
Bedazzlrはどのようなツールですか?
BedazzlrはBABLR上で動作するシンタックスハイライトツールです。従来のトークンの色分けにとどまらず、構文木のノード名を表示したり、セマンティックな選択でコード構造を調査したりできるインタラクティブな機能を提供します。約10KBという軽量さでウェブページ上に埋め込めることが特長です。
出典: Lobsters

コメント

← トップへ戻る