はじめに
みなさん、こんにちは。torihaziです。
今日はRuby経験1週間に満たないこの私が
rubyではお馴染み(らしい)rubocopとかいう人について
調査するとともにその凄さを身をもって知ろう
という趣旨で書いていこうと思います!!
それではltg.
あんた誰。
調べたところ、自分が書いたrubyのコードをチェックしてくれる人だそうです。
コード解析という部類の人ですね。
自身が書いたコードについて、
- この表記ダメじゃない?
- ここタイポだよ
とか色々指摘してくれるみたいです。
あんまりひどいと逮捕されちゃいそうですね。
この人と会うには。
この"rubocop"というものは gemを使ってインストールする必要があります。
以下は引用です。この方のものを参考にしてください。
職質を受けてみた。
では早速職質されてみましょう。
以下は私が書いてみたコードです。
array = ("A".."F").to_a num = rand(2..4) a = array.sample(num) b = array - a p a.sort,b.sort
これをrubocopに通すためには
rubocop
というコマンドを実行します。
そうすると実行したディレクトリ配下に存在するファイル全てを
調査してくれます。
ちなみに私の結果はこうでした。
root@b19dbd1d07d3:/com/practice_ruby/practice_group# rubocop Inspecting 1 file C Offenses: random.rb:1:1: C: [Correctable] Style/FrozenStringLiteralComment: Missing frozen string literal comment. array = ("A".."F").to_a ^ random.rb:1:10: C: [Correctable] Style/StringLiterals: Prefer single-quoted strings when you don't need string interpolation or special symbols. array = ("A".."F").to_a ^^^ random.rb:1:15: C: [Correctable] Style/StringLiterals: Prefer single-quoted strings when you don't need string interpolation or special symbols. array = ("A".."F").to_a ^^^ random.rb:5:9: C: [Correctable] Layout/SpaceAfterComma: Space missing after comma. p a.sort,b.sort ^ random.rb:5:16: C: [Correctable] Layout/TrailingEmptyLines: Final newline missing. p a.sort,b.sort 1 file inspected, 5 offenses detected, 5 offenses autocorrectable
任意同行求められた感じでしょうか。とりあえず現行犯ではなさそうです。
署で話を聞いてみるとかけられている容疑は以下のようです。
- 後述のコメント書いてない罪
- シングルクォートで囲っていない罪
- カンマの後にスペースない罪
- 最後改行してない罪
これだけあれば捕まりそうな気はしますが。
1 について
これは ruby2.3以降から始まったルールだそうです。
文字列リテラルをfreezeさせることでメモリ使用率を削減させる目的があるらしいです。
ただそうさせるには追加で記述するものがあるらしく。
方法はrobocop.ymlに書く方法と対象のrubyファイルに書く2通りがあります。
今回は後者を採用してファイルの最上行に次のように書きます。
# frozen_string_literal: true
この後rubocop
を通してみると
root@b19dbd1d07d3:/com/practice_ruby# rubocop Inspecting 1 file C Offenses: practice_group/random.rb:2:1: C: [Correctable] Layout/EmptyLineAfterMagicComment: Add an empty line after magic comments. array = ("A".."F").to_a ^ ~~~~ 残り4つは同じ 1 file inspected, 5 offenses detected, 5 offenses autocorrectable
あら文が変わりました。
コメントの下には空行を開けろ
だそうです。
Inspecting 1 file C Offenses: ~~~~~ 残り4つは同じ 1 file inspected, 4 offenses detected, 4 offenses autocorrectable
最下行に注目してください。5 offences
から4 offences
になりました。
この調子で言われたことを直して、完璧にしていってください。
全部やるのはめんどくさいあなたへ。
rubocop -a
である程度勝手に直してくれるそうです。
直してくれる対象の基準はその変更が大きな影響を与えないか
です。
(この大きな影響というのはごめんなさい。よくわかっていません。)
影響なんていいから直す際はrubocop -A
です。
試しにrubocop -a
を実行して対象のファイルを見ると
# frozen_string_literal: true array = ('A'..'F').to_a num = rand(2..4) a = array.sample(num) b = array - a p a.sort, b.sort
確かに、全て変わっていますね。
これで最後にrubocop
としてみると
root@b19dbd1d07d3:/com/practice_ruby# rubocop Inspecting 1 file . 1 file inspected, no offenses detected
となって、全部OK!!だそうです。
終わりに
いかがだったでしょうか。
rubocop兄ちゃん、なかなかやりますね。
自分が齧ったことのあったPHPではこんなものありませんでした。
(私の知る限り・・・)
みなさんもこの人と仲良くなって、コードの品質を担保していきましょう!!
僕も頑張ります!!