/ #vim #ruby 

rubocop-daemonでneovimでのオートコレクトを速くする

速くなるっぽいので、試してみる!!

動作

rubocop_daemon

使ったやつ: rubocop-daemon

fohte/rubocop-daemon

普通の場合

(ruby-formatter/rufoのissuesのここに書かれたサンプルrubyファイルで試した。)

:w で保存 -> オートコレクトが終わるまでに 2.5秒ぐらい。

rubocop_daemon

ウラでrubocop-daemonが動いている場合

:w で保存 -> オートコレクトが終わるまでに 0.6秒 ぐらい。

2秒ぐらい速くなった!!!

rubocop_daemon


設定・今回どう動かしたか

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 が遅いと言っている人がいる

そして、そもそもコマンド起動時にライブラリを全部読み込むところが遅いというコメントがある。

これ実際私も時間を測ってみたのだが、たしかに! という印象だった。

エディタ上のauto-correctは確かに遅いが、別にauto-correctじゃなくても遅そう。

なので、エディタ上でrubocopを使うのにおいて、「ライブラリを全部読み込む時間を、daemon活用によりショートカットする」というアプローチは、ある程度納得できる気がする。

1週間ぐらい仕事で使ってみて様子を見たい。


photograph: www.flickr.com,Alexandre Dulaunoy


Author

hoshinotsuyoshi

星野剛志(ほしのつよし) web application engineer. ruby/rails/docker