Rubocopとは
Rubyの静的コード解析ツールこと。
静的コードってカリキュラムに書いてあるけどよくわからんから、ChatGPT君に小学生でもわかるように以下解説してもらった。
公式GitHub
ChatGPT質問
Rubocopについて小学生でもわかるように説明してください。
もちろんです!RuboCopは、Rubyプログラムの品質を向上させるためのツールです。ルールベースの静的解析ツールとして知られており、Rubyのコーディング規約に基づいてコードをチェックし、潜在的な問題や一貫性のない部分を見つけることができます。
例えば、小学生が日本語の文章を書く際にもルールがありますよね?同じように、RuboCopはプログラムのコードにもルールを適用します。これにより、コードが読みやすく、保守しやすくなります。
RuboCopを使うと、コードのスタイルや構文エラー、未使用の変数、長いメソッドなど、さまざまな側面で問題を検出することができます。これにより、プログラムの品質を向上させることができます。
小学生がRuboCopを使う場合、まずは先生や保護者のサポートを受けながら、RuboCopの設定や使い方を学ぶ必要があります。RuboCopを使えば、自分の書いたコードをチェックし、改善点を見つけることができます。
RuboCopは、エンジニアやプログラマーがより良いコードを書くための手助けとして広く使われています。ただし、小学生がプログラミングを学ぶ際には、基本的なコーディングスキルを磨くことが重要です。RuboCopは、そのスキルを向上させるためのツールの一つとして利用できます。
RuboCopには多くの設定オプションがありますが、初めは基本的なルールに従ってコードをチェックすることから始めると良いでしょう。コードの品質向上や良いプログラミング習慣を身に付けるために、RuboCopは役立つツールです。
ふむ、簡単に言うと自分の書いたコードをチェックして、改善点を見つけることができるGemのことなんだな!
Rubocopの導入方法
1. Gemfileのgroup :development do〜end内に以下追記する。
group :development do
gem 'rubocop', require: false #追記
end
% bundle install
% touch .rubocop.yml
2. .rubocop.ymlの中身を以下に変更する(コピペ推奨)
AllCops:
# 除外するディレクトリ(自動生成されたファイル)
# デフォルト設定にある"vendor/**/*"が無効化されないように記述
Exclude:
- "vendor/**/*" # rubocop config/default.yml
- "db/**/*"
- "config/**/*"
- "bin/*"
- "node_modules/**/*"
- "Gemfile"
# 1行あたりの文字数をチェックする
Layout/LineLength:
Max: 130
# 下記ファイルはチェックの対象から外す
Exclude:
- "Rakefile"
- "spec/rails_helper.rb"
- "spec/spec_helper.rb"
# RSpecは1つのブロックあたりの行数が多くなるため、チェックの除外から外す
# ブロック内の行数をチェックする
Metrics/BlockLength:
Exclude:
- "spec/**/*"
# Assignment: 変数への代入
# Branch: メソッド呼び出し
# Condition: 条件文
# 上記項目をRubocopが計算して基準値を超えると警告を出す(上記頭文字をとって'Abc')
Metrics/AbcSize:
Max: 50
# メソッドの中身が複雑になっていないか、Rubocopが計算して基準値を超えると警告を出す
Metrics/PerceivedComplexity:
Max: 8
# 循環的複雑度が高すぎないかをチェック(ifやforなどを1メソッド内で使いすぎている)
Metrics/CyclomaticComplexity:
Max: 10
# メソッドの行数が多すぎないかをチェック
Metrics/MethodLength:
Max: 30
# ネストが深すぎないかをチェック(if文のネストもチェック)
Metrics/BlockNesting:
Max: 5
# クラスの行数をチェック(無効)
Metrics/ClassLength:
Enabled: false
# 空メソッドの場合に、1行のスタイルにしない NG例:def style1; end
Style/EmptyMethod:
EnforcedStyle: expanded
# クラス内にクラスが定義されていないかチェック(無効)
Style/ClassAndModuleChildren:
Enabled: false
# 日本語でのコメントを許可
Style/AsciiComments:
Enabled: false
# クラスやモジュール定義前に、それらの説明書きがあるかをチェック(無効)
Style/Documentation:
Enabled: false
# %i()構文を使用していないシンボルで構成される配列リテラルをチェック(無効)
Style/SymbolArray:
Enabled: false
# 文字列に値が代入されて変わっていないかチェック(無効)
Style/FrozenStringLiteralComment:
Enabled: false
# メソッドパラメータ名の最小文字数を設定
Naming/MethodParameterName:
MinNameLength: 1
Rubocopを実行する方法
コードレビュー等を依頼する前に、Rubocopを実行するようにするのがいいね。
# Rubocopを実行
% bundle exec rubocop
# Rubocopを実行し、check内容を自動修正
% bundle exec rubocop -a