textlintで日本語テキストの文字校正を試してみた とかで、lint 系の記事を目にしたので そろそろ導入してみるか、と思い立った。
RuboCop はRuby の静的コードアナライザ。 bbatsov/rubocop
The Ruby Style Guide に沿ったコーディングスタイルに矯正(注意)してくれる。 無駄なスペースが入力されている、とか、無駄な改行が入っている、とか、 この変数1度も使われてないよ?とかクラスの中の行数が多すぎる、とか、 1行の文字数が長すぎる、とか。
大人数で開発していると細かなコーディングスタイルを合わせるだけでも面倒なので こういうツールによって人間が矯正されると AI 時代に思いを馳せることができて良い感じですね。
RuboCop インストール
gem でインストールする。
1 2 3 |
|
実行はrubocop
コマンドにチェックしたいスクリプトを渡す。
例えば、以下のような Ruby スクリプトを
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
RuboCop でチェックすると以下のような感じで注意を受ける。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
|
無駄な改行とかスペースを注意されていますね。修正しましょう。
The Ruby Style Guide が自分(たち) の
コーディングスタイルに合わない場合は、カスタマイズが可能。
.rubocop.yml
を編集する。
いったん、今書いているものを正しいコーディングスタイルとみなした .rubocop.yml
を生成するには
--auto-gen-config
オプションをつけて rubocop を実行する。
1 2 3 |
|
上記コマンドにより、プロジェクトディレクトリ(/path/to/project)配下のコードが解析されて、cop と
呼ばれるルール群が .rubocp_todo.yml
というファイルで出力される。
.rubocp_todo.yml
の中身は、以下のように cop 単位にそのプロジェクトに沿った設定が入ったものが
出力されている。
以下は、出力された .rubocp_todo.yml
の一部を抜粋。
1 2 3 4 5 6 7 8 9 10 11 |
|
上記は、以下を示している。
- デフォルト 1 行 80 文字までがコーディング規約となっているが最大 137 文字の行がある
- 1 行あたり最大 137 文字まで許容する、という設定
- 1 行 80 文字以上 (違反: offense) に該当する箇所が 113 件
.rubocp_todo.yml
の修正不可能・修正困難部分のみを残したりチューニングして、.rubocop.yml
に
リネームしたら自分たちのコーディングスタイルに沿った現実的なルールを適用できる。
標準のコーディング規約に沿ってコードを修正していく場合は、.rubocop.yml
に以下の行を追加するか
1
|
|
rubocop --config .rubocop_todo.yml
を実行して、違反をつぶしていく。
コードの自動修正機能もある。
.rubocop_todo.yml
に # Cop supports --auto-correct.
と記述されている cop については、以下の
コマンドにより自動修正が可能。
1 2 |
|
vim と RuboCop を連携する
コーディングしながら RuboCop に注意されたいので、vim と連携する。
vim プラグインの scrooloose/syntastic を入れる。
NeoBundle を使っているので、手持ちの vimrc
を以下のように修正し、:NeoBundleInstall
してインストールする。
1 2 3 4 5 6 |
|
そうすると、:SyntaxCheck
を実行するか、保存:w
のタイミングで RuboCop が動いてくれる。
以下のように指摘してくれる。