Standard gemを試してみた
testdouble/standard: 🌟 Ruby Style Guide, with linter & automatic code fixer
Rubyに「ほどよい」Linterを用意したい
実はだいぶ前から Ruby に「ほどよい」Linter がないものかと思っていた。Rubocop は避けたかった。設定が面倒だし、よさげな設定を探して歩くのもイヤだ。あと話題になった当初の評判がよくなかったのもある。
JavaScript については Flycheck入れてみた (2019-09-16) | あーありがち の頃だから3年近く前かな、この時期に
にしている。今となってはなんとなく Standard っぽいかどうかを身体が覚えて何も考えずにそんな感じのコードになる。考えることが減ってよいと思っている。
翻って Ruby については Rubocop を避けた結果
troessner/reek: Code smell detector for Ruby
を入れたり入れてなかったりしていた。個人的には細かいところにあまり文句を言ってこないから割とよいかなと思っていたけど、
- インスタンス変数を使わないのならクラスになってる必要なくない? UtilityFunction
- なんでこんなに行数長いの? TooManyStatements
をちょいちょい踏み抜くので、これの ignore 設定を書くのがダルいなと思っていた。
実際に試してみた
さすがにいい加減決めちまおうと思って存在は知っていたけど評判を聞くことがほとんどなかった
testdouble/standard: 🌟 Ruby Style Guide, with linter & automatic code fixer
を実際に導入してみた。
結果、
- 文字列を double quote にしろと修正される。量は多いけど、まぁ「はいはい」と従うだけ
- 一方で、予想していたよりはあまり細かい指摘はない
- 特に block の do/end, {} を変に統一するようなものがなかったのは嬉しい
=begin
/=end
が使えないのは割とイヤだけど、ゆうて慣れそう- 普通に安全性やパフォーマンスに関する指摘をもらえるのはありがたい
- if 式などのインデントはつらい
最後のルールは Layout :: RuboCop Docs のことで、イヤだったのは
var = if cond
true
else
false
end
みたいなやつをダメって言ってるんだけど、さすがにこれは気持ち悪いなーと思ったら
var =
if cond
true
else
false
end
で回避できた。じゃーいっか。
で
すでに数年 JavaScript Standard に「合わせる」のに慣れてたためか、昔よりずっと「基準があるありがたさ」の方が感情的には優っている。もちろん Standard gem がいろいろなものを参考にしたうえで、妥協点として優れたポイントを見出してくれているということもあると思う。
少なくともこれで「すでに経験が豊富で強いこだわりがあるわけではない newbie が迷わずにコードを書けそう」と感じられた。これが収穫としていちばん大きいと思う。
うん、悪くないんじゃないかな。
※ Reek については知らないコードに対して実行することでにおいを嗅ぐのに使う程度でよさそう。
Rubocop については
RubocopでRubyコードのスタイルを強制せず、バグだけ検出 - スタディサプリ Product Team Blog
みたいな運用もアリかなと思うけど、できるだけ手間を掛けないという意味だと Standard gem でまぁいいんじゃないかなという気持ち。とりあえず身の回りのコードはこれに寄せていこうと思う。