Microsoftが策定したエディタやIDEによらないコーディング支援のためのプロトコルがイケてるらしいという噂を小耳に挟んだので仮想環境で試してみました。
github.com microsoft.github.io
まずはベースを整える
今回は、Ubuntu18.04の仮想マシンを作成してホストの環境を汚さない環境上で開発環境を整えます。
$ vagrant version Installed Version: 2.1.1 Latest Version: 2.2.4 To upgrade to the latest version, visit the downloads page and download and install the latest version of Vagrant from the URL below: https://www.vagrantup.com/downloads.html If you're curious what changed in the latest release, view the CHANGELOG below: https://github.com/hashicorp/vagrant/blob/v2.2.4/CHANGELOG.md
おもむろにvagrant init
します、boxのイメージがホスト上にない場合には若干時間がかかりますが私の環境では既にadd
済みなので一瞬でinitできました。
$ vagrant init ubuntu/bionic64 A `Vagrantfile` has been placed in this directory. You are now ready to `vagrant up` your first virtual environment! Please read the comments in the Vagrantfile as well as documentation on `vagrantup.com` for more information on using Vagrant.
おもむろにvagrant up && vagrant ssh
し、パッケージリポジトリを更新します。
vagrant@ubuntu-bionic:~$ sudo apt update
素のUbuntuだとrubyが入っていなかったりするので、普通にaptでruby ruby-dev
をインストールします(Canonical製のイケてるパッケージマネージャsnapを使うとrbenvを使わずとも異なるバージョンのrubyをインストールできたりしますが普通にということで)。Ruby用のLanguageServerのsolargraphがgem Nokogiriに依存するので依存するパッケージもインストールしておきます。
vagrant@ubuntu-bionic:~$ sudo apt install ruby vagrant@ubuntu-bionic:~$ sudo apt install ruby-dev Reading package lists... Don vagrant@ubuntu-bionic:~$ sudo apt install build-essential Reading package lists... Done Building dependency tree vagrant@ubuntu-bionic:~$ sudo apt install libxml2 libxml2-dev libxslt1-dev Reading package lists... Done Building dependency tree
2.5系をインストールしました。
vagrant@ubuntu-bionic:~$ ruby -v ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux-gnu] vagrant@ubuntu-bionic:~$ gem -v 2.7.6
gem solargraphのインストール
Ruby用のLanguage Serverであるsolargraphをインストールします。
異なる言語で開発したいよという方は他言語用のLanguage Serverを動かしておくだけでIDE並のコーディング支援が受けられます、すごい。
vagrant@ubuntu-bionic:~$ sudo gem install solargraph
help I want to use LSP. 下二つが重要でLSPはソケットモードと標準出力モードに対応していることがわかります。ソケットモードならLanguage Serverだけ隔離してネットワーク越しに動作させることもできるんですね、すごい。
vagrant@ubuntu-bionic:~$ solargraph help Commands: solargraph --version, -v # Print the version solargraph available-cores # List available documentation versions solargraph clear-cores # Clear the cached core documentation solargraph config [DIRECTORY] # Create or overwrite a default configuration file solargraph download-core [VERSION] # Download core documentation solargraph help [COMMAND] # Describe available commands or one specific command solargraph list-cores # List the local documentation versions solargraph reporters # Get a list of diagnostics reporters solargraph socket # Run a Solargraph socket server solargraph stdio # Run a Solargraph stdio server
vim-plug LanguageClient-neovimのインストール
solargraphをインストールしただけではただLanguage Serverを用意しただけにすぎないので、vim側でサーバからhinting情報を受け取ってよしなに表示してくれるプラグインが必要になります。今回はプラグインを管理するために軽量そうなプラグインマネージャのvim-plugで、LanguageClinet-neovimをインストールしてvimをLSPに対応させます。neovimといいつつvimに対応させてくるニクいプラグインです。
公式ドキュメントも参考にしつつ、vim-plugをインストールします。1ファイルだけで構成されているのがすごい。
vagrant@ubuntu-bionic:~$ curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ > https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 74434 100 74434 0 0 12829 0 0:00:05 0:00:05 --:--:-- 22679 vagrant@ubuntu-bionic:~$ ls ~/.vim/autoload/ plug.vim
.vimrcにLangugageClient-neovimをインストールするための設定を書き込んでインストールします。
vagrant@ubuntu-bionic:~$ cat << EOF > ~/.vimrc > call plug#begin('~/.vim/plugged') > Plug 'autozimu/LanguageClient-neovim', { 'branch': 'next', 'do': 'bash install.sh' } > call plug#end() > EOF vagrant@ubuntu-bionic:~$ vim #:PlugInstall
ここまででおおよそ設定はできたのですがソケット設定、キーマップ設定などを.vimrcに書き込んで完成です!
vagrant@ubuntu-bionic:~$ cat << EOF >> ~/.vimrc > let g:LanguageClient_serverCommands = { 'ruby': ['tcp://localhost:7658'] } > let g:LanguageClient_autoStart = 1 > let g:LanguageClient_autoStop = 0 > autocmd FileType ruby setlocal omnifunc=LanguageClient#complete > nnoremap <silent> def :call LanguageClient#textDocument_definition()<CR> > EOF
solargraphの起動
以下でバックグラウンドで起動、おもむろにvimを起動します。
vagrant@ubuntu-bionic:~$ solargraph socket &
ほら、クラス名・メソッド名の上でdef
とタイプすると簡単にコードジャンプできます。ctrl+pでメソッド名などを補完できますが若干コード解析までに時間がかかるのか追加したクラスにジャンプできるようになるまでディレイがあります。
株式会社あしたのチームではともに快適な開発環境を追い求めるエンジニアを募集しています。