LSPとは?
LSP(Language Server Protocol) は、マイクロソフトが開発したプロトコル(通信規約)です。簡単に言うと、エディタと言語の解析ツールを橋渡しする仕組みのことです。
エディタでコードを書いているときの自動補完や構文エラーのリアルタイム表示などで利用されています。
なぜLSPが生まれたの?
昔は、エディタごとに言語サポート機能を個別に開発する必要がありました。
例えば:
- VS Code用のJavaScriptサポート機能
- Vim用のJavaScriptサポート機能
- Emacs用のJavaScriptサポート機能
同じような機能を何度も作っていて、非効率です。
そこで登場したのがLSPです!
LSPの仕組み
LSPはクライアント・サーバーモデルで動作します:
- クライアント:エディタ(VS Code、Vim、Emacsなど)
- サーバー:Language Server(言語解析を行うプログラム)
┌─────────────┐ LSP ┌─────────────────┐
│ エディタ │ ←─────────→ │ Language Server │
│(クライアント)│ │ (サーバー) │
└─────────────┘ └─────────────────┘
具体的な流れ
- エディタでコードを編集
- エディタがLanguage Serverに情報を送信
- Language Serverがコードを解析
- 解析結果をエディタに返送
- エディタが結果を表示(自動補完、エラー表示など)
LSPが提供する機能
LSPを使うことで、以下のような便利な機能が使えるようになります:
1. 自動補完(Auto Completion)
// 「console.」と入力すると...
console.log // ← こんな感じで候補が表示される!
console.error
console.warn
2. リアルタイムエラー検出
# typoがあると即座に赤い波線で教えてくれる
pirnt("Hello") # ← printのスペルミス
3. 定義ジャンプ
関数や変数の定義場所にワンクリックでジャンプできます。
4. ホバー情報
// 関数にマウスをホバーすると説明が表示される
Math.sqrt(16) // ← 「平方根を返す関数」的な説明が出る
5. コードフォーマット
# ぐちゃぐちゃなコード
def hello( name ):
print( "Hello, "+name )
# ↓ フォーマット後
def hello(name):
print("Hello, " + name)
人気のLanguage Server
各言語には専用のLanguage Serverがあります:
言語 | Language Server | 特徴 |
---|---|---|
TypeScript/JavaScript | TypeScript Language Server | 型チェック、リファクタリング |
Python | Pylsp, Pyright | 構文チェック、自動補完 |
Rust | rust-analyzer | 高速な解析、優秀な補完 |
Go | gopls | Google公式サポート |
Java | Eclipse JDT LS | Eclipseベース |
LSPの導入方法
VS Codeの場合
VS CodeはデフォルトでLSPに対応しているので、拡張機能をインストールするだけでOK!
# Python用
code --install-extension ms-python.python
# TypeScript用(デフォルトで入ってる)
# JavaScript/TypeScriptは標準サポート
Neovim/Vimの場合
LSPのメリット
開発者にとって
- ✅ 生産性向上:高速なコード補完とエラー検出
- ✅ 学習効率アップ:リアルタイムでAPIの使い方がわかる
- ✅ エディタ選択の自由:お気に入りのエディタでどの言語でも快適に開発
エディタ開発者にとって
- ✅ 開発コスト削減:言語サポートを一から作る必要なし
- ✅ 高品質な機能:専門チームが開発したLanguage Serverを活用
Language Server開発者にとって
- ✅ 幅広いユーザー:複数のエディタで使ってもらえる
- ✅ 効率的な開発:一度作れば様々なエディタで動作
まとめ
ポイント:
- LSP = エディタと言語解析ツールの橋渡し
- 一度のLanguage Server開発で複数エディタに対応
- 自動補完、エラー検出、定義ジャンプなど便利機能満載
- 大抵のエディタで簡単に導入可能