概要
RubyKaigi2022の方に参加してきまして、様々な登壇者の発表を聞いてきました。
その中で、Rubocopの性能改善について話がありまして今の案件や過去の仕事で使っていたりしたので手元で動かして速度測ってみたくなったので動かしてみたという話です!
そもそも何が変わったのか
前段として、そもそもどうして性能が変わったのかという点について説明しますと、Rubocopの方で「server-clientモデル」が実装されましてRubocop-serverを立ち上げておいて処理を実行することで高速化を行ったというものでした。
また、そちらがデフォルトになるわけではなく、モードの指定を行わないとRubocop-serverは起動されないのでそのあたりのオプションを試してみたいと思います。
動かして見よう
環境
Ruby 3.1
Rubocop 1.36.0
少し前から実装されてるモードなのでここまで新しくなくても良さそうですけど、今回はこれでやっていきます
(補足)
おそらくRuboCop 1.31でサーバーモードは導入されているらしく、そちらを動かすにはRuby2.6以上が必要みたいです。
速度測定方法について
時間の測定にはtimeコマンドを利用します。
項目 | 意味 |
---|---|
real | プログラムの呼び出しから終了までにかかった実時間(秒) |
user | プログラム自体の処理時間(秒)(ユーザCPU時間) |
sys | プログラムを処理するために、OSが処理をした時間(秒)(システム時間) |
↑
引用
https://qiita.com/tossh/items/659e5934e52b38183200
/usr/bin/time -p bundle exec rubocop ファイル名.rb
※Macの場合ただのtimeコマンドだと想定していた数値が出なかったので明示的に呼び出してます
通常起動
結果
real 1.24
user 0.90
sys 0.23
real 1.27
user 0.84
sys 0.24
real 1.21
user 0.84
sys 0.23
server起動版
サーバーの起動
bundle exec rubocop --start-server
Rubocopの実行
/usr/bin/time -p bundle exec rubocop ファイル名.rb
real 0.81
user 0.52
sys 0.11
real 0.79
user 0.53
sys 0.11
real 0.75
user 0.52
sys 0.11
まとめ
確かに2倍とまで行かないまでも1.5倍近く速度が変わることがわかった
すごい...
もっと大量のコードで試してみたい気持ちがありますが、手軽に試してちゃんと速度的成果がでているのがとてもすごいと思った。