Small Changes

RuboCopのエラー名だけをgrepで抽出する



仕事で開発環境構築をしていてRuboCopを導入しています。

実際に導入してrubocopを実行するとほとんどコードは書いていない状態にも関わらず結構なエラーが出ました。自動fixしても60個くらいエラーが残りました。

このことから今後もデフォルトの設定だと次のようなことが考えられます。

  • 厳しめの設定のため、結構エラーが出ること

  • それを調整するために時間がかかること

ですが、今のフェーズを考えるとできるだけそこに時間を割くというよりは価値提供するために時間を割きたいということもありました。

少し調べてみると、RuboCop AirbnbというAirbnbがメンテしているgemが存在していることを知りました。

Airbnbが使用しているRuby Style Guideを見てみると、良い感じのルールで統一されていました。また、Airbnb内で使われているものなので、おそらく色んなことが考慮されたうえでプロジェクト向きな設定が採用されていることが予想されます。

これらのことから、あまりRuboCopの設定周りに時間を割かずに良い感じの設定を手に入れたいという要望にマッチしそうだったので採用してみたいと思いました。

RuboCopのエラー名だけをgrepで抽出する

RuboCop → RuboCop Airbnbにするにあたって、RuboCopのエラー名だけを抽出して比較したかったので今回はgrepを使って抽出してみました。

RuboCopのエラー名をgrepで抽出する

grep -o "[C|W]:.*:" rubocop.txt

  • rubocop.txt

    • rubocop時に出力されたエラーを保存したテキストファイルです。

  • -o

    • 検索結果に一致した文字を表示する

  • "[C|W]:.*:"

    • C: または W: で始まり、:で終わる文字列に一致するものを検索するパターン

上記のgrep -o "[C|W]:.*:" rubocop.txtで取得した文字列をsortしたうえでuniqして重複を排除した結果を手に入れます。

grep -o "[C|W]:.*:" rubocop.txt | sort | uniq
C: Layout/SpaceInsideArrayLiteralBrackets:
C: Metrics/MethodLength:
C: Naming/MethodParameterName:
C: Style/Documentation:
C: Style/Documentation: Missing top-level documentation comment for class Api::
C: Style/Documentation: Missing top-level documentation comment for class Types::
C: [Correctable] Bundler/OrderedGems:
C: [Correctable] Layout/ArgumentAlignment:
C: [Correctable] Layout/EmptyLineAfterGuardClause:
C: [Correctable] Layout/EmptyLines:
C: [Correctable] Layout/EmptyLinesAroundBlockBody:
C: [Correctable] Layout/ExtraSpacing:
C: [Correctable] Layout/FirstHashElementIndentation:
C: [Correctable] Layout/HashAlignment:
C: [Correctable] Layout/SpaceAroundOperators:
C: [Correctable] Layout/SpaceInsideArrayLiteralBrackets:
C: [Correctable] Layout/TrailingWhitespace:
C: [Correctable] Style/BlockComments:
C: [Correctable] Style/ExpandPathArguments:
C: [Correctable] Style/FrozenStringLiteralComment:
C: [Correctable] Style/GlobalStdStream:
C: [Correctable] Style/IfUnlessModifier:
C: [Correctable] Style/NumericLiterals:
C: [Correctable] Style/RedundantFetchBlock:
C: [Correctable] Style/StringLiterals:
C: [Correctable] Style/SymbolArray:
W: [Correctable] Lint/UnusedMethodArgument:
W: [Correctable] Lint/UselessMethodDefinition:

RuboCop Airbnbのエラー名をgrepで抽出する

基本的にはRuboCopのとき同じです。

grep -o "[C|W]:.*:" rubocop_airbnb.txt | sort | uniq
C: Layout/EmptyLines:
C: Layout/EmptyLinesAroundBlockBody:
C: Layout/ExtraSpacing:
C: Layout/HashAlignment:
C: Layout/LineLength:
C: Layout/SpaceAroundOperators:
C: Layout/SpaceInsideArrayLiteralBrackets:
C: Layout/TrailingWhitespace:
C: Style/BlockComments:
C: Style/TrailingCommaInArrayLiteral:
C: Style/TrailingCommaInHashLiteral:

まとめ

ちょっとしたことですが、grepを使うことで欲しい結果を得ることができました。テキスト周りの加工や検索する術を知っていると仕事も効率的に進めていけると思うので少しずつ自分のものにしていきたいです。

References