ここまでで、LSPとは何か、そしてEmacsがそれをどう扱うかを理解した。

最終回では、実際にPython補完を動かすための構築手順を示す。
目的は単純だ。「なんとなく動いた」ではなく、「なぜそうなるか」を理解したうえで、確信をもって環境を作ることである。
Emacsは設定が複雑なようでいて、理屈が分かれば極めて論理的な道具である。
Python用LSPサーバの選択肢
LSPサーバは、言語ごとに独立した解析プロセスである。
Python用には主に次の二つが使われている。
| サーバ | 実装 | 特徴 |
|---|---|---|
| python-lsp-server(pylsp) | Python製 | 標準的で扱いやすく、拡張が豊富。Emacsとの親和性が高い。 |
| pyright | TypeScript製(Microsoft) | 高速で型解析が強力。静的型を多用するコードベース向け。 |
どちらもLSP仕様に従うため、クライアント(lsp-mode/eglot)から見れば等価である。
決めるべきは、「柔軟なPython的挙動を重視するか」「型安全性と速度を取るか」だ。
サーバの導入
仮想環境を使っている場合は、その中にインストールするのが望ましい。
グローバルに導入する場合は以下のようにする。
pylspの場合
pip install "python-lsp-server[all]"
これで pylsp コマンドが使えるようになる。[all] オプションはflake8やmccabeなどLint系のプラグインもまとめて導入する。
pyrightの場合
npm install -g pyright
こちらはNode.js環境が必要である。型チェックを多用するプロジェクト向けだ。
Emacs側の準備
ここからは、LSPクライアントとして lsp-mode を例にとる。eglot を使う場合も設定は簡略化されるだけで、概念は同じだ。
基本設定例(use-package使用)
(use-package lsp-mode
:hook (python-mode . lsp-deferred)
:commands (lsp lsp-deferred)
:config
(setq lsp-prefer-flymake nil)) ; flycheckを使う場合
(use-package lsp-ui
:commands lsp-ui-mode)
(use-package company
:config
(global-company-mode))
これでPythonファイルを開いた時に自動でLSPサーバが起動し、
補完・定義ジャンプ・ドキュメント表示などが可能になる。
裏ではlsp-modeがpylspプロセスを立ち上げ、JSON-RPCで通信している。
動作確認
Emacsで任意の.pyファイルを開き、数行書いてみる。import os の後に os. と打てば、補完候補が即座に表示されるはずだ。
もし表示されない場合は、M-x lsp-describe-session でサーバの状態を確認できる。
通信が確立していれば、そこに pylsp または pyright のプロセス情報が出る。
周辺ツールの統合
LSPは補完だけではなく、周辺ツールとも密接に連携する。
特にPython環境では以下の3つが鉄板である。
自動整形:blacken
(use-package blacken
:hook (python-mode . blacken-mode))
保存時に black でコードを整形する。
構文チェック:flycheck
(use-package flycheck
:init (global-flycheck-mode))
エラーをリアルタイムで表示。pylspにも統合されているが、外付けで使うと制御しやすい。
仮想環境切替:pyvenv
(use-package pyvenv
:config
(pyvenv-tracking-mode 1))
プロジェクトごとに異なる環境を自動で反映する。
これらを組み合わせることで、補完だけでなく実行環境全体が整う。
eglot を使う場合
Emacs 29以降であれば、eglot は標準で使える。
設定は驚くほど少ない。
(use-package eglot
:hook (python-mode . eglot-ensure))
以上で完了だ。
補完はEmacs標準の completion-at-point に統合され、company も自然に動作する。
構造的には lsp-mode と同じ三層だが、設定と依存が極端に少ない。
LSPという機構そのものを理解する目的なら、まずはeglotで始めるのが良い。
実際の動作の理解
Python補完が動くとき、背後では次のやり取りが行われている。
Emacs → pylsp: "この位置の補完候補をくれ"
pylsp → Emacs: "print, property, process, ..."
単純だが、これがすべての基本である。
サーバが変わってもこの会話形式は変わらない。
だからこそ、EmacsでもVSCodeでも同じ補完が得られる。
LSPという共通言語が、エディタの枠を越えた知能を可能にしている。
まとめ
Python補完を動かすには、
- LSPサーバ(
pylsporpyright)を導入し、 - Emacsクライアント(
lsp-modeoreglot)で通信を確立し、 - UI層(
company,flycheck,blackenなど)で結果を扱う。
この三層を理解しておけば、どんな構成にも柔軟に対応できる。
Emacsは「設定地獄」と呼ばれがちだが、それは自由の裏返しである。
自分で理屈を掴み、構造を選び、道具を組み立ててこそEmacsである。
終わりに
この三部作を通じて伝えたかったのは、「LSPを理解すれば、Emacsは現代的IDEと同じ地平に立てる」という事実だ。
LSPはEmacsを変えるものではなく、Emacsの自由さを外の世界へ拡張する手段である。
設定例を丸写しにするのではなく、どう動くかを知り、自分の思想に合わせて構築してほしい。
Emacsは道具であり、思想である。
そしてLSPは、その思想を現代に接続するための共通語にすぎない。