blogyuji.developerによる落書き。プログラミングやカメラをメインにだらだらと書いてます。apps2018年2月1日木曜日RuboCopの起動が激遅になってしまったので何とかした話RuboCop使ってますか?Rubyでそれなりの規模のコード書くなら必ずと言っていいほど使いますよね。僕はお仕事だとRailsを使っているのでRuboCopもガッツリ使っています。最近RuboCopを実行しようとすると起動までがめっちゃ遅いっていう現象に悩まされていたんですよね。動き出してしまえば普通なんですが。-Lとかして対象ファイルをリストアップするだけなのに4分とかかかるんです。原因と解決方法を調べてみました。原因はどうもRuboCopが検索するファイル数が多いと遅くなるってことのようです。解決するには以下のような感じで除外ディレクトリを指定すれば良かったです。'tmp/**/*'こんな感じにしたら4分かかっていたのが2秒以下になりました。劇的に改善してますね。これで実行するのにストレスを感じずに済みそうです。Railsのデフォルトで用意されるpublic、log、tmpあたりのディレクトリは、通常はRubyコード置きませんしファイル数も多くなりがちなので除外しちゃうのが良いです。ビックリすることにRuboCopは.gitディレクトリも検索対象に含んでしまうのです!.gitt配下のファイルをRuboCopで処理したいことなんてないと思うのでデフォルトで除外してほしいところですよね。v0.52.1で確認してます。subtreeを使っていると話が変わってきます。pushしたりすると.git/subtree-cacheにファイルが溜まります。pushするたびに.git/subtree-cacheに1万ファイルくらい増えているのを観測しました。僕の環境では200万ファイルくらい溜まっていました。これがRuboCopが激遅になってしまった原因だったのです。subtreeがRuboCopに影響するなんて思ってもみませんでした。subtree便利なんですが、ハマりどころも多くてまたかーって気持ちになりました。RuboCopの起動速度改善してよかったです。これで快適なRuboCopライフが送れます。追記(2018/03/25).gitディレクトリが検索対象に含まれてしまう問題はv0.53.0で解消したようです。記事を読んでデフォルトの修正を直すべきだなーと思ったので、直してみました。デフォルトでExcludeされるようになります。11:48コメントありがとうございます。たしかにRubocopのデフォルトの設定を修正すべきですね。英語を書くのが億劫でPRしていませんでした......。