shibuso.net

プログラミングとかゲームとか

Railsでのboolean型の命名

2016年11月19日 | タグ: Rails , 開発 , Web

かれこれ4年近くRubyとRailsを触っているのですが、それでもいまだに初歩的なことで「これ、どうしよう?」と悩んだり、「以前はこうしたけど、今回はどうしよう?」という問題にぶつかる日々です。

先日再びぶつかったのがタイトルのとおり、boolean型の値を保持するカラムの命名です。この手の問題は命名規約と既存のテーブルの板挟みに合うことがよくありますが、今回は新プロジェクトだったことと、Railsでのboolean型に関しては命名規約が見当たらなかったので余計に悩みました。

候補として挙がるのは2案ですね。例として削除フラグ(論理削除は筋悪という議論は置いておきます)を作ろうとした場合

1. deleted
2. is_deleted

この2つの間で悩みます。PHPをやってた頃はdelete_flagみたいな名前をつけているのを見かけましたが、Ruby界隈ではあまり見ない気がします。それと海外の文献を見ててもあまり見かけない気がしますが、私の観測範囲はそんなに広くないので偏見かもしれません。

話を戻して、1番か2番かで悩んでいるわけですが、今回参考にしたのはStack Overflowの回答でした。公式ドキュメントとかじゃないのかってツッコミは勘弁して下さい、見つけられなかったのです…。
convention - rails boolean fields: `is_foo` or just `foo`? - Stack Overflow
http://stackoverflow.com/questions/3112078/rails-boolean-fields-is-foo-or-just-foo

Railsでeven?, nil?, empty?, blank?といった使われ方をしているのに対してisで始まるのはis_a?ぐらいしか思い浮かばない、だから`is_`を取り除いた方が良いのではないだろうかというコメントが支持されていますね。Rubyでは変数の後ろに`?`を付けるとtrue falseの判定が行われるので、それもこのシンプルさの手助けをしています。

というわけで私はひとまず1番のdeletedを採用しました。とはいえ正解・不正解を見つけたわけではないのであくまで主観です。それに変数名によっては変更せざるを得ないので(例:public等の予約語)、高度の柔軟性を維持しつつ臨機応変に対処する必要がありそうです。