4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Rubocopに速度が早くなる「serverモード」ができたみたいなので試してみる ~RubyKaigi 2022に影響されるエンジニア~

Last updated at Posted at 2022-09-10

概要

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倍近く速度が変わることがわかった
すごい...
もっと大量のコードで試してみたい気持ちがありますが、手軽に試してちゃんと速度的成果がでているのがとてもすごいと思った。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?