![見出し画像](https://assets.st-note.com/production/uploads/images/8004330/rectangle_large_type_2_cb7e2a7049b2875a0753aad9ecbcda06.jpg?width=1200)
VSCode のおかげで Vim の開発環境がめちゃくちゃ良くなった
=== 追記 ===
2020年になって、どんな環境でやっているのかも書いた。
=== 追記ここまで ===
Qiita でちろっと書いたのですけど、最近 Ruby / PHP を書く機会がちょこちょこあるんで、せっかくだからと Vim での開発環境構築に勤しんでおりました。
いきなり脱線するけど、やっぱ環境構築めっちゃ好きだわ…。ここ何年か普通にサラリーマン(と子育て)やってて忙しかったから環境構築系のことにあんまり時間使わないでデフォルトで使える環境で生きていこうなんて思ってたけど、やっぱ無理…ヴィムリたい…。全力でヴィムがいい…
というわけで、いろいろプラグインあさっててわかったんですけど、補完やらコードジャンプやらリファレンスの参照やらはどうも今後は Language Server に集約されていきそうなムーブメントがあることがわかりました。
ちょっと前なら補完用のプラグイン+各言語用にたとえば「deoplete-XXX」みたいな感じのをそれぞれセットアップする感じだったと思うんですけど、いまからやるなら Language Server 使って構築したほうが断然将来性抜群かと。
IDE が必要な機能をアウトソースした Language Server
で、Language Server なんぞやって話なんですけど、Language Server は Microsoft が仕様を公開した Language Server Protocol の実装です。
いわゆる IDE に必要な機能ってコード補完にドキュメントや定義元の参照、エラーチェックにテキスト整形などなど、言語が変わってもやりたいことは同じです。とはいえ言語毎に特別な実装がないとこれらの機能は提供できないです。多くの IDE は開発ツールであるエディタ本体の機能と言語特有の機能をひとつのパッケージとして提供しています。これっていわゆる密結合ですよね。想像するだけで複雑そう。「対応言語追加して」とか言われても気軽にできなそう。
そこで登場するのが Language Server Protocol で、こういった言語ごとに違う部分を抽象化して、開発ツールから使えるようにするための仕様です。略して LSP 。
つまりですよ、つまり、LSP に準拠した Langeage Server を用意すれば、LSP に対応した開発ツールからだとどの言語も同じインターフェイスで利用できるわけです。夢が広がりまくりじゃないですか!!なんで今までなかったし!
Visual Studio Code で活用されている LSP
ぜんぜん調べてないので適当言ってるかもしれないですけど、Microsoft が開発している Visual Studio Code は基本的に LSP 使って拡張する仕組みっぽくて、便利に使うためには言語毎に Language Server の環境を用意するっぽい。ここらへんやっぱ対応する言語を増やしやすくするために LSP 作ったんじゃないでしょうか。
いや〜、さすが開発ツールやマウスを作るのに定評がある Microsoft です!素晴らしすぎる!!
ちなみに LSP 実装としては Ruby だと Solargraph、PHP だと php-language-server あたりのやつが使える感じです。
VSCode のおかげで Vim の開発環境がめちゃくちゃ良くなってた
というわけで Vim なんです。Vim にも Language Server とお話できるプラグインとして LanguageClient-neovim や vim-lsp というのがあって、これを使うと前述した Solargraph や php-language-server の機能を使うことができるんです。ちゃんと変数のクラスに合わせた補完もしてくれるし、メソッド一覧も見れるし超便利。
言語毎にプラグインを探そうとすると最初の導入のハードルが高くて、ちゃんと動くプラグインを見つけて、他となるべく使い方を揃えてとか、そういうのなかなか億劫なもんだけど、これからは Language Server を見つければ OK という。しかも情報もまとまってるし。
自分はいま neovim を使ってるんですけど、プラグインではなく本体のほうで LSP をサポートするように進んでるみたいで、これも楽しみです!
Vim の環境をセットアップしてるときに「IDE が便利すぎるからもう Vim とかオワコンでしょww」とか言ってる人を見かけて、お、おうマジすか…と思いつつも、もしかして今後新しい言語がでてもプラグインがない…みたいな寂しい状態になるかもなんて思いましたけど、もう大丈夫。VSCode が最強の環境である限り LSP は生き残っていきそうですからね!
というわけで引き続き Vim ラブのままでもまったく問題なく今後の開発環境の変化についていけそう!やっほーい。