8
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【LSP】なぜリアルタイムで構文エラーがわかるのか

Posted at

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 │
│(クライアント)│             │   (サーバー)     │
└─────────────┘             └─────────────────┘

具体的な流れ

  1. エディタでコードを編集
  2. エディタがLanguage Serverに情報を送信
  3. Language Serverがコードを解析
  4. 解析結果をエディタに返送
  5. エディタが結果を表示(自動補完、エラー表示など)

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開発で複数エディタに対応
  • 自動補完、エラー検出、定義ジャンプなど便利機能満載
  • 大抵のエディタで簡単に導入可能
8
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?