rubocop-daemonでneovimでのオートコレクトを速くする
速くなるっぽいので、試してみる!!
動作
使ったやつ: rubocop-daemon
普通の場合
(ruby-formatter/rufoのissuesのここに書かれたサンプルrubyファイルで試した。)
:w
で保存 -> オートコレクトが終わるまでに 2.5秒ぐらい。
ウラでrubocop-daemonが動いている場合
:w
で保存 -> オートコレクトが終わるまでに 0.6秒 ぐらい。
2秒ぐらい速くなった!!!
設定・今回どう動かしたか
fohte/rubocop-daemonにvimの説明が無かったので、適当に設定しました。完全オレオレ設定です。
daemonの起動
rubocop-daemonはneovim経由ではなく普通に動かす。
rubocop-daemon gemが必要になる。
$ rubocop-daemon start
neovim側の設定
【2019/05/12更新】
すでにaleで保存時にオートコレクトが走るようにしているので、neovim上でrubocop
コマンドを叩いた時、代わりにrubocop-daemon exec
が叩かれるようにする。
READMEのここに書かれてるラッパースクリプトを利用する。
# ラッパースクリプトのダウンロード。
$ curl https://raw.githubusercontent.com/fohte/rubocop-daemon/master/bin/rubocop-daemon-wrapper -o /tmp/rubocop-daemon-wrapper
$ sudo mv /tmp/rubocop-daemon-wrapper /usr/local/bin/rubocop-daemon-wrapper
$ sudo chmod +x /usr/local/bin/rubocop-daemon-wrapper
aleの設定で、実行ファイルをrubocop-daemon-wrapper
に指定。
" ~/.config/nvim/init.vimで。
let g:ale_ruby_rubocop_executable = 'rubocop-daemon-wrapper'
設定は以上!
この設定の所感
- .rubocop.ymlに修正が入ったり、利用するrubocopのバージョンが変わる時にいちいちdaemonのリスタートが必要。
その他所感
元々、テキストエディタ上のlinterとして使うにはrubocop -a
が遅いと言っている人がいる
- https://github.com/rubocop-hq/rubocop/issues/6492
- https://github.com/ruby-formatter/rufo/issues/2#issuecomment-439104627
そして、そもそもコマンド起動時にライブラリを全部読み込むところが遅いというコメントがある。
これ実際私も時間を測ってみたのだが、たしかに! という印象だった。
エディタ上のauto-correctは確かに遅いが、別にauto-correctじゃなくても遅そう。
なので、エディタ上でrubocopを使うのにおいて、「ライブラリを全部読み込む時間を、daemon活用によりショートカットする」というアプローチは、ある程度納得できる気がする。
1週間ぐらい仕事で使ってみて様子を見たい。
photograph: www.flickr.com,Alexandre Dulaunoy