Fastererメモ

Fast Rubyの内容をチェックする静的コード解析ツール(おそらくすべてではない)。fasterer 0.9.0で確認。

盲従するのでなく、パフォーマンス問題が発生したタイミングでとっかかりとして使うのが良いはず。

以下の点に注意。

  • 対応しようとしている箇所がパフォーマンス問題の原因と考えられるか確認する。
    • 1日1回しか実行されないコードが100ms速くなっても意味があるとはいえない。
  • 利用しているRubyのバージョンでも従うべきか確認する。
    • Fast Rubyにベンチマーク用のコードがある。
  • 対応した結果、有意に速度改善がなされていることを確認する。
    • 当該箇所のベンチマークをとって確認する。
  • 対応した結果、有意にシステムの速度改善に繋がっていることを確認する。
    • 当該箇所を利用している機能が速くなっていることを確認する。

以下のGemをインストールする。

group :development do
  gem 'fasterer', require: false
end

.fasterer.ymlファイルを以下の内容で作成する。

speedups:
  rescue_vs_respond_to: true
  module_eval: true
  shuffle_first_vs_sample: true
  for_loop_vs_each: true
  each_with_index_vs_while: false
  map_flatten_vs_flat_map: true
  reverse_each_vs_reverse_each: true
  select_first_vs_detect: true
  sort_vs_sort_by: true
  fetch_with_argument_vs_block: true
  keys_each_vs_each_key: true
  hash_merge_bang_vs_hash_brackets: true
  block_vs_symbol_to_proc: true
  proc_call_vs_yield: true
  gsub_vs_tr: true
  select_last_vs_reverse_detect: true
  getter_vs_attr_reader: true
  setter_vs_attr_writer: true

exclude_paths:
  - 'vendor/**/*.rb'
  - 'db/schema.rb'

bundle exec fasterer ファイルパスで実行。