静的解析の実行

前のセクションで追加したrubocopを使い静的解析を実行します。

初めての静的解析

tic_tac_toeフォルダ直下で以下のコマンドを実行し

メインロジックを実装しているファイルを静的解析にかけます。

rubocop

実行してみるとめちゃくちゃ怒られます(50の警告が出ました)。

tic_tac_toe.rb:1:1: C: [Correctable] Style/FrozenStringLiteralComment: Missing frozen string literal comment.
# 説明: ゲーム板の状態をコンソールに出力する
^
tic_tac_toe.rb:4:15: C: [Correctable] Style/MethodDefParentheses: Use def with parentheses when there are parameters.
def put_board board
              ^^^^^
tic_tac_toe.rb:5:8: C: [Correctable] Style/StringLiterals: Prefer single-quoted strings when you don't need string interpolation or special symbols.
  puts ""
       ^^
tic_tac_toe.rb:8:13: C: [Correctable] Style/StringLiterals: Prefer single-quoted strings when you don't need string interpolation or special symbols.
      print " N " if 0 == e
...(長過ぎるので割愛)

1 file inspected, 50 offenses detected, 39 offenses corrected, 7 more offenses can be corrected with `rubocop -A`

プロジェクトに初めて静的解析ツールを入れると大体の場合はこうなります。

設定ファイルの使用

次は、プロジェクト用に作成した設定ファイルを使ってrubocopを実行してみます。

code直下に.rubocop.ymlを作成して以下の内容を貼り付けてください。

AllCops:
  NewCops: enable

EnforcedStyle: double_quotes

Style/YodaCondition:
  EnforcedStyle: require_for_all_comparison_operators

Style/NumericPredicate:
  Enabled: false

Style/NegatedIf:
  Enabled: false

Metrics/AbcSize:
  Max: 70

Metrics/CyclomaticComplexity:
  Max: 25

Metrics/PerceivedComplexity:
  Max: 25

Metrics/MethodLength:
  Max: 15

Metricsに関してはwin?メソッドが反応してしまうので、一旦大きめの値に設定しています。

設定ファイルを配置した状態で再びrubocopを実行します。

tic_tac_toe.rb:1:1: C: [Correctable] Style/FrozenStringLiteralComment: Missing frozen string literal comment.
# 説明: ゲーム板の状態をコンソールに出力する
^
tic_tac_toe.rb:4:15: C: [Correctable] Style/MethodDefParentheses: Use def with parentheses when there are parameters.
def put_board board
              ^^^^^
tic_tac_toe.rb:22:10: C: [Correctable] Style/MethodDefParentheses: Use def with parentheses when there are parameters.
...(長過ぎるので割愛)

1 file inspected, 27 offenses detected, 26 offenses auto-correctable

設定ファイルを書いて条件を緩めたりコーディングスタイルを限定したので

警告は少なくなりましたが、まだ27警告も残っています。

自動修正を実行

以下のコマンドを使用することで実は自動修正してくれます。

体力を消耗する前に自動実行で出来るだけ警告を消します。

rubocop -a

もう一度rubocopコマンドを叩いて、警告の数を確認します。

tic_tac_toe.rb:1:1: C: [Correctable] Style/FrozenStringLiteralComment: Missing frozen string literal comment.
# 説明: ゲーム板の状態をコンソールに出力する
^
tic_tac_toe.rb:55:3: C: [Correctable] Style/YodaCondition: Reverse the order of the operands player == 1.
  player == 1 ? 2 : 1
  ^^^^^^^^^^^

1 file inspected, 2 offenses detected, 2 offenses auto-correctable

2つだけになりました!これなら何とかなりそうです。

手動修正

残りの3エラーは手動で修正していきます。

Style/FrozenStringLiteralComment

tic_tac_toe.rbの一番上に下記のコメントを追加して修正しました

# frozen_string_literal: true

Style/YodaCondition

一部Yoda記法になっていないコードがあったので、そこを修正しました

全部直し終わったのでもう一度rubocopを実行してみます

Inspecting 1 file
.

1 file inspected, no offenses detected

ようやく警告がなくなりました!

ここまでのコード実装を下記のリポジトリに置いておきました。

詰まったら参考にしてみてください。

最終更新