#はじめに
pre-commitと併用して導入したので、こちらも書き留めておく。
#Rubocopとは
Rubyの静的コードアナライザー(リンター)及び、コードフォーマッターである。要は解析分析するツールのことを指す。
つまり、ソースコードを自動的にチェック/修正を行ってくれるツールだよってことらしい。
#機能
原文の翻訳をそのまま拝借
- すべての主要なRuby実装で動作する
- 検出したコード違反の多くの自動修正を行う
- 堅牢なコードフォーマット機能である
- インタラクティブな使用と他のツールへのデータの供給の両方のための複数の結果フォーマッター
- コードベースのさまざまな部分に対してさまざまな構成を持つ機能
- 特定のファイルまたはファイルの一部に対してのみ特定の警官を無効にする機能を持つ
- RuboCopをほぼすべてのスタイルと好みに適応させることができる非常に柔軟な構成
- カスタム警官とフォーマッターでRuboCopを拡張するのは簡単です
- 既製の膨大な数の拡張(例えばrubocop-rails、rubocop-rspec、rubocop-performance及びrubocop-minitest)
- 幅広いエディター/ IDEサポート
- 多くのオンラインサービスは内部でRuboCopを使用しています(例:HoundCI、Sider、CodeClimate)
- 史上最高のロゴ/ステッカー
Ruby上で動作する広い互換性と拡張性を備えた人気のツールであり、信頼性の高い自動修正を行うみたい。
#導入
システム全体にインストール
gem install rubocop
bundlerを使用してRubocopをインストールする場合、
Gemfile
に下記を記述する。
gem 'rubocop', require: false
ただ、公式では不要な更新を防ぐために、Gemfile
で保守的なバージョンロックを推奨していると書いてある。
#保守的なバージョンロック
gem 'rubocop', '~> 1.15', require: false
拡張機能
# Railsの拡張機能
gem 'rubocop-rails', require: false
# プロジェクトのパフォーマンス拡張機能
gem 'rubocop-performance', require: false
# RSpecの拡張機能
gem 'rubocop-rspec'
#操作
現在のディレクトリ内の全てのRubyソースファイルをチェック
下記はコードの違反を判定するのみで自動修正は行われない。
#引数なしのコードスタイルチェッカー
rubocop
自動修正を含めたチェックを行う(オートコレクトモード)
# 推奨
rubocop -a
rubocop --auto-correct
# 非推奨
rubocop -A
rubocop --auto-correct-all
非推奨のオートコレクトモードではrubocop -a
と同じように自動的に違反を修正するコマンドである。
ただし、一部の違反では自動修正が行えない上、コードのセマンティクスが(わずかに)変更される場合がある。
つまり、元のコードとほぼ同等であるが100%同等ではないコードが生成されるため「安全ではない」らしい。
rubocop -a
はカレントディレクトリ内の全ファイルに対して実行される。
特定のファイルを指定したい場合はrubocop -a ファイル名
で実行する。
#操作(オプション)
#lintのみをチェックする
rubocop -l
rubocop --lint
#コードレイアウト(フォーマット)のみをチェック
rubocop -x
rubocop --fix-layout
#コマンドラインオプションの確認
rubocop -h
#Rubocopの動作を変更するには?
Rubocopの動作は、.rubocop.yml
構成ファイルを介して制御を行うもののようだ。
.rubocop.yml
をもとに特定のチェックを無効/有効にしたり、パラメータを受け入れた場合にその動作を変更することができるものだと書いてある。
詳細はConfigurationに書いてあるが、今回は省略して別の記事としてまとめたいと思う。