**Tree‑sitter 対 言語サーバー**

2026/01/22 23:47

**Tree‑sitter 対 言語サーバー**

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

概要:
Tree‑sitter と Language Server Protocol(LSP)は、モダンなコードエディタにとって相補的なツールです。Tree‑sitter はソースファイルを高速かつ許容的に解析し、正確な言語要素を抽出するためにクエリ可能な構文木を生成します―これが高速で正確なシンタックスハイライトに最適です。一方 LSP はエディタと各プログラミング言語ごとの単一サーバー間の JSON ベースの通信チャネルを定義し、定義検索・オートコンプリート・診断・セマンティックトークン(可変性などの情報を含むハイライト)といった機能を可能にします。Emacs の Eglot は現在 LSP ベースのセマンティックハイライト(

eglot-semantic-tokens-mode
)をサポートしており、Rust の
rust-analyzer
などはこれらのトークンを使用して可変性を表示します。Tree‑sitter は依然として構文描画のデフォルトであり続けますが、LSP は言語サーバーがより豊富なコンテキストやファイル横断的解析を提供できる場合に有用です。LSP が進化するにつれ、ハイライト品質で Tree‑sitter に匹敵または上回る可能性があり、エディタと開発者は複数の言語固有ツールを必要とせずに恩恵を受けられるでしょう。

本文

2026年1月21日

本日、良い質問をいただきました。「Tree‑sitter と言語サーバーの違いは何ですか?」
どちらも深く掘り下げて理解しているわけではないので、観察可能で実践的な視点から説明します。


Tree‑sitter

Tree‑sitter は パーサージェネレーター です。
プログラミング言語の仕様を与えると、その言語を解析するプログラムを生成してくれます。

Tree‑sitter の特徴:

  1. 高速 – パースが素早い。
  2. 構文エラーに強い – 文法的に不正な入力も許容できるため、コードが一時的に無効でも編集しやすい。

これらの性質はテキストエディタのシンタックスハイライトエンジンに最適です。入力中に文法上間違っていても、単純な正規表現ベースのハイライターだと崩れたりちらついたりしますが、Tree‑sitter はそれを回避できます。また、パーサツリーを検索するクエリ言語も備えており、私の Emacs パッケージ(Citar で Typst をサポート)では正規表現より安全かつ堅牢に特定構文オブジェクトを取得しています。

要するに、Tree‑sitter は「実際に言語実装がパースする方法」に忠実なシンタックスハイライトを提供し、偶発的な正規表現マッチに頼りません。


言語サーバー

言語サーバー はプログラムを解析して、テキストエディタへ有用情報を Language Server Protocol(LSP)経由で送信します。
LSP はエディタとサーバ間の JSON 形式メッセージを定義したオープンスタンダードですので、どんな言語でも LSP に対応すれば任意のエディタが利用できます。

主なサービス:

  • シンボル定義の位置検索
  • カーソル位置での補完候補提示
  • 診断情報やリファクタリング提案など

言語サーバーは「(N \times M)」問題を解決します。すなわち、各エディタごとに N 個の解析器を書く代わりに、1 つの言語用サーバを作れば、LSP をサポートする任意のエディタで利用できます。

さらに強力なのは、言語のランタイムやコンパイラツールチェーンにフックして、意味的に正確な回答を返せる点です。たとえば

pop
関数が 2 つ存在(スタックライブラリ用とヒープライブラリ用)すると、Emacs の単純ジャンプパッケージはどちらへ飛ぶか混乱します。しかし言語サーバーなら完全なスコープ情報を持っているので、その問題は起きません。


ハイライトに言語サーバーを使う

LSP を利用してシンタックスハイライトを行うことも可能です。Tree‑sitter より優れている理由があるわけではなく、むしろ LSP から得られる情報(例えば変数参照が可変かどうか)を活用できる点だけが差異です。

Emacs の組み込み LSP クライアント Eglot は最近

eglot-semantic-tokens-mode
を追加しました。Rust コードで試したところ動作は良好でしたが、Tree‑sitter で十分にハイライトできるため、特別な理由がない限り Tree‑sitter にこだわります。


本文について

上記の文章はすべて私自身で執筆しました。LLM は一切使用していません。ブログで何かを読むときは 100 % 私(アシュトン・ウィアーズド)の手作業です。

AI に反対ではありません。翻訳や定型コード生成には LLM を活用していますが、ほとんどの場合は自分で素早く書けるため、今回の内容も私自身の思考と努力の直接的な成果です。

どうぞお楽しみください。そしてさらに創作を続けてください!

同じ日のほかのニュース

一覧に戻る →

2026/01/23 0:20

**GPTZero、NeurIPS 2025受理論文で新たに100件の幻覚現象を発見**

2026/01/18 8:29

**Scheme を WebAssembly にコンパイル**

## Japanese Translation: --- ## Summary Pythonで実装されたオープンソースScheme実装「Bob」は、15周年を記念してネイティブWASMバイナリを生成するWebAssembly(WASM)コンパイラを追加しました。新しい `WasmCompiler` は解析済みのScheme式を直接WASMテキストに変換し、その後 wasm‑tools スイートでコンパイルされ、Node.js経由で実行されます。 コンパイラの核心は、Schemeプリミティブを実装する約1,000行のWASMコードから成ります: - **オブジェクト表現** – SchemeオブジェクトはWASM GC型にマッピングされます: - `$PAIR` 構造体は `car` と `cdr` を `(ref null eq)` 参照として保持します。 - `$BOOL` 構造体は単一の `i32`(0 = false、非ゼロ = true)を保持します。 - `$SYMBOL` 構造体は線形メモリ内でオフセットと長さを表す2つの `i32` を保存します。 - **数値** – 整数値は `i31` 型を使用してボックス化されていない整数を直接参照します。 - **シンボル** – シンボルは線形メモリに固定オフセット(例: `(data (i32.const 2048) "foo")`)で発行され、アドレス/長さペアで参照されます。 - **組み込み関数** – `write` 関数はWASMテキスト内で直接実装され、ホスト関数として `write_char` と `write_i32` の2つだけをインポートします。 Bobはすでにインタープリタ、コンパイラ、VM、およびカスタムマーク・アンド・スウィープGCを備えたC++ VMを提供しています。追加されたコンパイラは今後さらに進化する予定ですが、現在のwasmtime用Pythonバインディングは2023年10月に仕様に組み込まれたWASM GC提案をまだサポートしていないため、SchemeをWebAssembly上で完全にガベージコレクション実行することが制限されています。 それでもユーザーは今やSchemeを直接WebAssemblyとして実行できるようになり、クロスプラットフォームのデプロイメントとJavaScript/Node.js環境とのより緊密な統合の可能性が開かれます。

2026/01/23 2:41

**CSS の光学的錯覚**

## Japanese Translation: (すべての主要なポイントを統合したもの) > 記事は、マウスホバーに応じて反応するインタラクティブな CSS ベースの錯視デモの CodePen ギャラリーを提示しています。 > 各デモは、Poggendorff の歪んだ線(傾いた 2 つのグラデーションと `::before`/`::after` を使用)、誘導グラデーション効果、Cornsweet & White の色コントラストトリック(黒白格子に `mix-blend-mode` を適用)、リングおよびチェッカーボードパターン、重なり合う線の色球体、曲率盲点、Café Wall イルлю(3 本のグラデーションで平行線を斜めにする)、ペノース三角形やエビングハウス円、カニッツァ四角形など、古典的な視覚現象を示しています。 > ギャラリーには、エビングハウス錯視のアニメーション版、回転する「タワー」、色のファン、逆スピーク、モーションバインディング、メンツラインズ、ウォッリングカラーなども含まれ、ドット線の動きやコントラスト非同期、息を吸う四角形、トロックラー消失といった静的に動きを示唆するパターンも掲載されています。 > すべての効果は CSS グラデーション、疑似要素、`mix-blend-mode`、およびキーフレームアニメーションで実現され、微妙な背景やホバー変更がどれほど印象的な視覚トリックを生み出せるかを示しています。 > コレクションは Patrick Pester の「35 optical…」リストと Michael Bach の「154 Visual Phenomena & Optical Illusions」に触発されています。 > Medium と DEV に公開されており、著者は将来の追加や改良の可能性について読者にコメントを残すよう呼びかけています。 *この改訂された要約は、すべての主要なポイントを完全に反映し、推測を加えず、明確で簡潔に保っています。*