tree-sitter-cli とは
tree-sitter-cli は、Tree-sitter パーサーを開発するためのコマンドラインツールです。Tree-sitter はパーサージェネレーターであり、インクリメンタルなパースライブラリでもあります。ソースファイルの具象構文木を作り、編集に合わせて少ないコストで更新するため、Neovim、Helix、Zed、GitHub がハイライト、折りたたみ、テキストオブジェクト、コードナビゲーションに使っています。文法はこの CLI で作られます。文法リポジトリの雛形を作り、grammar.js から C のパーサーを生成し、共有ライブラリや WebAssembly にコンパイルし、コーパステストを走らせ、ファイルのパース・クエリ・ハイライト・タグ付けを行い、Web の playground も立ち上げます。Rust 製の単一バイナリで、入力するコマンドは tree-sitter です。
tree-sitter init が書き出す tree-sitter.json の構成、--js-runtime native の裏にある組み込み QuickJS ランタイムは、どれもアーカイブで固定されたバージョンより後に登場しました。現行の CLI で生成した文法リポジトリは、コントリビューター全員のマシンと CI に同じかそれ以降のバージョンを求めます。Debian stable の 0.22.6 も Ubuntu 24.04 の 0.20.8 もその大半より前のもので、上流の Linux バイナリは glibc 2.39 を必要とするため、Debian 12 や Ubuntu 22.04 では起動すらしません。
⚡ tree-sitter-cli の主な機能
🧱 コマンド 1 つで文法リポジトリ
tree-sitter init がいくつか質問し、grammar.js、tree-sitter.json、バインディングとパッケージのファイルを書き出します。文法は初日から Node.js、Python、Rust、Go、Swift、C 向けに公開できます。
⚙️ パーサー生成
tree-sitter generate は grammar.js を src/ 内の依存のない C パーサーに変換し、コンフリクトを報告します。文法の実行には node を使うか、--js-runtime native で組み込みの QuickJS ランタイムを使います。
🔨 ネイティブと WebAssembly のビルド
tree-sitter build はパーサーをエディタが読み込む共有ライブラリにコンパイルし、--wasm は web-tree-sitter と playground 用の .wasm モジュールを出力します。
🧪 コーパステスト
tree-sitter test は test/corpus の例をパースし、期待される S 式と木を比較し、ハイライトとタグのテストも実行します。意図した変更の後は --update で期待値を書き換えます。
🔍 パース・クエリ・ハイライト・タグ
parse は構文木を表示し、query は .scm クエリを実行してキャプチャを一覧にし、highlight はターミナルや HTML に描画し、tags は定義と参照を抽出します。
🛝 Web playground
tree-sitter playground はローカルのページを立ち上げます。コードを打ち込むと編集に合わせて木が更新され、その場でクエリも試せます。ルールがなぜマッチしないのかを知る一番の近道です。
apt upgrade を実行するだけで、常に最新版を使い続けられます。
📦 deb.griffo.io からインストールする
ステップ 1: リポジトリを追加する
sudo install -d -m 0755 /etc/apt/keyrings
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | sudo gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(lsb_release -sc 2>/dev/null) main" | sudo tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
sudo apt updateinstall -d -m 0755 /etc/apt/keyrings
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(lsb_release -sc 2>/dev/null) main" | tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
apt update🆓 ずっと無料のミラーがあります。 deb-free.griffo.io は、アカウントもサブスクリプションもなしでパッケージをずっと無料で配布しています。上流より最大2か月遅れ、セキュリティ修正は即座に公開されます。現在収録しているのは cliamp、Ghostty、lazydocker、Oh My Posh、Uncloud と Zed です。tree-sitter-cli は含まれていないため、今日入手する方法は上のリポジトリだけですが、ご要望があれば追加できます。
ステップ 2: tree-sitter-cli をインストールする
# 最新の tree-sitter-cli をインストール
sudo apt install tree-sitter-cli
# インストールを確認。コマンドは tree-sitter-cli ではなく tree-sitter です
tree-sitter --version# 最新の tree-sitter-cli をインストール
apt install tree-sitter-cli
# インストールを確認。コマンドは tree-sitter-cli ではなく tree-sitter です
tree-sitter --versionステップ 3: 最初の文法を作る
# コマンドは tree-sitter です。パーサーのビルドとテストには C コンパイラが必要で、
# generate は組み込みランタイムを選ばない限り node で grammar.js を実行します
sudo apt install build-essential nodejs
# いくつかの質問に答えて文法リポジトリの雛形を作る
mkdir tree-sitter-mylang && cd tree-sitter-mylang
tree-sitter init
# パーサーを生成し、コンパイルし、コーパステストを走らせる
tree-sitter generate
tree-sitter build
tree-sitter test
# bash、zsh、fish、nushell の補完はパッケージに含まれています
tree-sitter --help# コマンドは tree-sitter です。パーサーのビルドとテストには C コンパイラが必要で、
# generate は組み込みランタイムを選ばない限り node で grammar.js を実行します
apt install build-essential nodejs
# いくつかの質問に答えて文法リポジトリの雛形を作る
mkdir tree-sitter-mylang && cd tree-sitter-mylang
tree-sitter init
# パーサーを生成し、コンパイルし、コーパステストを走らせる
tree-sitter generate
tree-sitter build
tree-sitter test
# bash、zsh、fish、nushell の補完はパッケージに含まれています
tree-sitter --help🎯 基本的な使い方
文法を開発する:
# grammar.js を変更するたびに再生成。組み込み QuickJS を使えば node は不要
tree-sitter generate --js-runtime native
# 名前が一致するテストだけを実行し、新しい出力を期待値として受け入れる
tree-sitter test --include 'function'
tree-sitter test --update
# 共有ライブラリ、または web-tree-sitter 用の WebAssembly モジュールをビルド
tree-sitter build -o mylang.so
tree-sitter build --wasmファイルをパースする:
# ファイルの構文木を表示
tree-sitter parse examples/hello.mylang
# 多数のファイルを静かにパースし、成功した数を報告
tree-sitter parse examples/*.mylang --quiet --stat
# パースの時間を計測。文法の変更で遅くなったときに便利
tree-sitter parse examples/big.mylang --timeクエリ、ハイライト、タグ:
# ファイルにクエリを実行し、キャプチャしたものを一覧表示
tree-sitter query queries/highlights.scm examples/hello.mylang
# ファイルをターミナルでハイライト、または単体の HTML ページに描画
tree-sitter highlight examples/hello.mylang
tree-sitter highlight --html examples/hello.mylang > hello.html
# tags クエリで定義と参照を抽出
tree-sitter tags examples/hello.mylang既存の文法と playground:
# 既存の文法で作業する
git clone https://github.com/tree-sitter/tree-sitter-json
cd tree-sitter-json
tree-sitter generate && tree-sitter test
# 設定ファイルを作り、parser-directories に文法のチェックアウト先を書く
tree-sitter init-config
# WebAssembly にビルドし、ブラウザで対話型の playground を開く
tree-sitter build --wasm
tree-sitter playground🔧 ツール連携
Tree-sitter CLI は、文法とそれを読み込むツールの間に位置します:
- Neovim: nvim-treesitter の main ブランチは
tree-sitterCLI でパーサーをコンパイルし、Debian stable や Ubuntu LTS に入っているものより新しいリリースを求めます - Helix: ハイライト、インデント、テキストオブジェクトは Tree-sitter クエリです。
highlights.scmの変更は、hx --grammar buildで文法を再ビルドする前にtree-sitter queryで確認できます - Zed: 言語拡張は文法リポジトリとコミットを固定するので、固定先を更新する前にローカルで文法を生成・テストします
- CI:
tree-sitter generateの後にgit diff --exit-code src/を実行すれば、コミット済みのパーサーが古いプルリクエストを失敗させられます - パッケージレジストリ:
tree-sitter initが書き出すバインディングで、同じ文法を npm、PyPI、crates.io に公開できます
🚀 deb.griffo.io を選ぶ理由
- 公式 Ubuntu: universe に tree-sitter-cli はありますが、24.04 LTS は 0.20.8、26.04 もすでに上流より遅れており、22.04 にはパッケージ自体がありません
- 上流のバイナリ: 最新ではありますが、上流のビルド済み Linux バイナリは glibc 2.39 にリンクされているため Debian 12 や Ubuntu 22.04 では起動せず、apt の管理外の
/usr/local/binに置くことになります - cargo または npm:
cargo install tree-sitter-cliには Rust ツールチェーンが必要で、更新のたびにフルビルドになります。npm パッケージは同じビルド済みバイナリをダウンロードするので、glibc の要件も同じです - deb.griffo.io: 最新版を自動更新で
- ✅ 同じパッケージの、新しい版: Ubuntu 自身の
tree-sitter-cliと同じ名前で、同じ/usr/bin/tree-sitterに入るので、apt はこれを 2 つ目のインストールではなくアップグレードとして扱います - ✅ 上流タグからビルド: 上流のビルド済み Linux バイナリが glibc 2.39 を要求するため、Ubuntu 22.04 上で上流のタグ付きソースから cargo でコンパイルしています。Bookworm と Jammy 以降のすべてのスイートで動作します
- ✅ 自動更新: 上流のリリースから数時間以内にパッケージを更新
- ✅ 全部入り: 上流のソースタグからビルドした
tree-sitterバイナリに、bash、zsh、fish、nushell の補完。依存はlibc6とlibgcc-s1だけです - ✅ 4 つのアーキテクチャ: amd64、arm64、armhf、i386。Raspberry Pi にも古い 32 ビットのノート PC にも同じ tree-sitter を
- ✅ マルチディストリビューション: Ubuntu 22.04、24.04、25.10、26.04 で動作
- ✅ 手間のかからない運用: 更新は通常の apt コマンドだけ
📦 パッケージのビルドリポジトリ
Ubuntu パッケージは、この GitHub リポジトリで自動的にビルド・管理されています:
- 🌲 tree-sitter-cli-debian - 最新リリースのビルド
🔗 関連パッケージ
deb.griffo.io では、こちらも配布しています:
- Neovim - nvim-treesitter はこの CLI でパーサーをビルドします
- Helix - ハイライトとテキストオブジェクトが Tree-sitter クエリでできたエディタ
- Zed - 言語拡張が Tree-sitter の文法を同梱するエディタ
- difftastic - Tree-sitter パーサーを使った構造的 diff
