最初にお断りをしとくと、業務として(つまり、お金を頂いて)携わるケースにおいては「郷に入りては郷に従う」を徹底しているので、個人的な嗜好は持ち込みません。あくまで「進言」として反対意見を述べることはありますが、自分の意に沿わないからといってヘソを曲げたりは致しません!
ただの中年エンジニアのぼやきです。先日、rails8を使ってみたときに衝撃的だったのがrubocopがデフォルトになっていたこと。型宣言を入れるかどうかの議論の時にも気になっていたんですけど、どちらも性悪説というか、制約を増やさないと人間は正しいコードを書けない、みたいな思考が根底にあるような気がして、なんとなく抵抗を感じてしまいます。
…いや、ちょっとニュアンスが違いますね…。人間は不完全でミスをするから、できる限り仕組みで対処しよう、という考え方に反駁する気はないんです。型宣言の場合は、機械がやってくれるなら良いけど、それ人間が全部指示しないとだめ…?みたいな心持ちです。だからRBSみたいな外付けのチェック機構が存在するのは逆に嬉しくて、場合によってはお世話になるかもしれません。rubocopに対する印象はちょっと別で、それはさすがに極端では…?という感じです。
例えば、インスタンス変数を参照するself.
は冗長だから外そうね、みたいな指示が出るんですが、ローカル変数と区別するためにあえて付けていたい場合もあって、これくらいなら冗長性残ってて良くない?という気がします。
class Foo
attr_accessor :bar
def a_method
a, b = 'a', 2
# some complicated task
"#{self.bar}-#{a}-#{b}"
end
end
シングルクォートとダブルクォートを統一して、というのも、そこバラついてたくらいで可読性落ちるのか…?と思ってしまうのが正直なところで、、今一つ大掛かりにやる必要性を感じません(lint系のツールもそうですね…)。
多分、これは自分がガリガリと大量のコードを書く側だから感じることで、こうした書き手を束ねて一つのシステムに統合していくマネージャ側から見ると景色が180度違うんだろうな、というのは薄々感じますが。冒頭に書いたようにマネージャの方針に従うべき場面の方が現実に多くなるだろうから、自由なところで本音を言語化しておく意義もあるかなと。
最近、子育て系のイベントで似たような議論を耳にしました。子どもの遊び場でも同じような葛藤がありますね。自由にさせておくとケガするしケンカもする。だからしっかりルールを決めてやれることを制限しよう。結果、パッと見は綺麗で秩序立ってるんだけど、誰も楽しめなくなってしまってないか?と。自由ってとてもめんどくさくて難しくて、要するに、何か衝突があればその都度自分たちで解決しなきゃいけない、それが嫌なら、誰とも絡まずに一人で居るしかない、でもそれだとそもそも楽しめない。みたいな葛藤に陥りがちです。
最初のコーディングの話に戻ると、私は「必要な時を自分たちで判断しながらツールに頼る」感じが理想かなぁと感じています。週に何回ベッドのシーツを替えますか?みたいな議論なので、どれが正解かを突き詰める気は全くありません。定期的に見直すルーチンだけ持ちつつ、あとは自分の五感を信じて「臭うな…」と感じたら随時やる感じですね(また抽象的に締めてしまった 笑)。
白河の清きに魚も棲みかねて もとの濁りの田沼恋しき