LSPの呪縛を解き放て:Tree-sitterで実現する「超軽量・超高速」な開発体験の構築術
大規模プロジェクトでLSP(Language Server Protocol)が重くなり、キー入力に0.1秒のラグを感じたことはないだろうか?その0.1秒の積み重ねが、エンジニアの「思考のフロー」を断ち切り、生産性を確実に蝕んでいる。
多くのエンジニアが「LSPがあれば万能」という幻想に囚われているが、真のテックリードは知っている。「解析はTree-sitter、補完は最小限のLSP、ナビゲーションは自作クエリ」という分離こそが、極限まで軽く、かつ強力な開発環境を作る唯一の解であることを。
本稿では、LSPのオーバーヘッドを排し、Neovimの深淵を操るための「実戦的アーキテクチャ」を伝授する。
—
1. なぜ「脱LSP」が最強なのか:Tree-sitterの本質
LSPは強力だが、裏側では巨大なバックグラウンドプロセスが常にファイルを監視し、メモリを食い合う。一方、`nvim-treesitter`は、エディタプロセス内で直接AST(抽象構文木)を操作する。
LSPなしでコードを解析する最大のメリットは、「どれだけ巨大なレポジトリを開いても、パフォーマンスが一切劣化しない」点にある。
現代のNeovimアーキテクトが選ぶ「神プラグイン」構成
LSPの機能を最小化し、Tree-sitterにオフロードする構成例:
- nvim-treesitter/nvim-treesitter: 解析のエンジン。
- nvim-treesitter/nvim-treesitter-context: 現在のスコープを常に上部に表示。これさえあれば、巨大な関数の終端を探すためにスクロールする時間はゼロになる。
- nvim-treesitter/nvim-treesitter-textobjects: ASTに基づくテキスト操作。`dif` (delete inner function) など、行ベースではない「論理構造ベース」の編集が可能になる。
—
2. Tree-sitterクエリによる「独自のハイライト」の魔術
標準のハイライトに満足してはいけない。例えば、チームで「TODO」や「FIXME」だけでなく、特定の命名規則を持つ「実験的コード」を視覚的に強調したい場合、`queries`ディレクトリを自作する。
`~/.config/nvim/after/queries/ruby/highlights.scm` を作成し、以下のように定義する:
; 独自のハイライトルール:’Experiment’で始まるメソッド名を警告色で強調
(method_name
(identifier) @function.method.experimental
(#match? @function.method.experimental “^Experiment.”))
この設定により、LSPの解析を待たずとも、Tree-sitterがファイルを読み込んだ瞬間に特定のコードパターンだけを抽出し、色付けする。これは、チーム固有のドメイン知識をエディタに直接埋め込む手法だ。
—
3. 実践:チーム開発における「環境共有」のベストプラクティス
個人のエディタ設定をチームに強制してはいけない。設定の共有化は、「論理分離」が鍵だ。設定ファイルは以下のディレクトリ構成で運用せよ。
.nvim/
├── init.lua # プロジェクト固有のLSP設定(軽量化のため最小限に)
├── treesitter.lua # プロジェクト特有のクエリやカスタムハイライト
└── keymaps.lua # チーム共通のショートカット(論理操作系)
特に、チーム開発では「LSPのサーバー設定」よりも「キーマッピングの共通化」に価値がある。例えば、`treesitter-textobjects`を使った高速編集をチームの共通言語にする。
— nvim-treesitter-textobjects の設定例
require(‘nvim-treesitter.configs’).setup({
textobjects = {
select = {
enable = true,
keymaps = {
[“af”] = “@function.outer”, — 関数全体を選択
[“if”] = “@function.inner”, — 関数内部を選択
[“ac”] = “@class.outer”, — クラス全体を選択
},
},
},
})
これらを共有するだけで、ペアプロ中のコードの書き換え速度が劇的に向上する。
—
4. プロの隠しショートカット:生産性を5倍にする「論理操作」
優秀なエンジニアは「行」単位で動かない。彼らは「ノード」単位で動く。以下のショートカットを今すぐ設定せよ。
- `vaf` (Visual Select Around Function): 関数全体を選択。
- `cit` (Change Inner Tag): HTML/XMLなどのタグの中身を一気に書き換える。
- `[m` / `]m`: 前後のメソッドへ瞬時にジャンプ。
これらはLSPのインデックス構築を待つ必要がない。Tree-sitterがすでに解析したASTを直接参照するため、どんな巨大なファイルでもレスポンスは常に1ms以下だ。
—
結論:エディタは「ツール」ではなく「思考の拡張」である
LSPに頼り切った開発は、エディタを「IDE」に変えるが、Tree-sitterを使いこなすことは、エディタを「自分の脳の延長」にすることだ。
1. LSPは補完だけに絞れ。
2. 解析とハイライトはTree-sitterに任せろ。
3. ASTを直接操作するショートカットを身体に叩き込め。
この構成を導入した瞬間、あなたの開発スピードは「マシンの性能」から解放される。それが、真のシニアエンジニアが歩む、軽量かつ最強の道である。
さあ、今すぐ `~/.config/nvim` を開き、LSPの肥大化した設定を削ぎ落とせ。あなたの指先が、最も論理的なコードを刻む準備はできているはずだ。