コーディング規約とかガイドとかって難しいよねという話

注:細かくてどうでもいい話です

Cookpadの規約スタイルガイドについての話
https://github.com/cookpad/styleguide

[SHOULD] ハッシュのキーを Symbol にして良い場合は、文字列よりも高速に lookup できるので積極的に Symbol を使うこと。

ここの箇所、言いたいことは分かるんですがちょっと誤解を招くなと思った
具体的には

  • 「可読性と一貫性」*1を目的にしているならパフォーマンスの話をするのはおかしい
  • ハッシュのlookup速度が問題になるケースはかなり少ないので、一般的な状況ではキーをSymbolにすることにパフォーマンス上の優位点はない
  • SymbolはGCされないので新しいSymbolがガンガン作られる状況(ex. ユーザからの入力を.to_symする, 巨大な文字列の集合を.to_symしたものでハッシュをつくるなど)ではメモリリーク*2が発生する。

という問題があると感じた。

で、r7kamuraさんに聞いてみたところ
いくつか勘違いしていたことに気づいた

  • ガイドなので規約ではなく必ず守らなければならないものではないらしい*3
  • ずっとリテラルの話をしていてのこの節なのでインスタンスではなくリテラルの話だとわかるはず(つまり空気読めていなかった)

こうしたらいいんじゃないかなという解決策

↑のようなことを丁寧に書くとクソ長くなってしまうのでもっと率直な理由にすればいいのでは

[SHOULD] ハッシュのキーを Symbol にして良い場合は、タイプしやすいしかっこいいので積極的に Symbol を使うこと。

*1:https://github.com/cookpad/styleguide/blob/master/ruby.ja.md#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB

*2:これを厳密な意味でのメモリリークというかは知りません

*3:じゃあmustとか書かないほうがいいのでは