ねこものがたり

いちにちいっぽ

RailsにおけるDBのカラムの命名について

背景

本日、Kaigi on Rails_2022_newというイベントがありました。Kaigi on Rails_2022_new自体の感想は別途書くとして、@maimux2xさんの「初めてのDB定義」*1という発表を聞いているときに、「そういえば自分はカラムの命名規則で迷うことがあるな」と思ったので、それをTwitterで呟いてみました。

いただいたリプライやKaigi on Rails_2022_newの懇親会で思考が整理できたので、それをまとめてみたいと思います。

迷いだったこと

結論

迷っていた背景

DBの本か何かで「カラム名にはテーブル名のプレフィックスがある方が良い」というのを読んだ記憶がありました。ツイートにも記載した通り、それがなんの本だったかすぐに思い出せないのですが、その本以外にも現実で同意見を述べる人には何度か出会ったことがあったので「DBの気持ちになるとそういう考えになるのかな」と思っていました。

自分の理解のソースが曖昧だった代わりにこのツイートでは10年以上前の個人記事を紹介させていただきました。オフィシャルな根拠としては薄いと思いますが、自分の理解と記事に書いてあることがおよそ一緒だったので、その瞬間の私の認識の代弁にはなっていたと思います。

結論の根拠

  1. ActiveRecordが適切なSQLの発行を担ってくれているから

    これは言われるまで考えてなかったのですが、リプを読んだ瞬間に腹落ちしました。*2

  2. usersテーブルのnameカラムで情報として必要十分と考えられるから
    • users.user_nameは冗長
    • テーブルというのは何かの集合を表しているものなので、カラム名にその集合名が入るのは違和感を覚える by @yancyaさん*3

参考

やんちゃさんがgistに幾つかのパターンをまとめてくださいました。

カラム名にテーブル名を含めるべきか否か考える

めちゃくちゃ短時間で書き上がってきてすごく驚いたというのが一番大きな感想だったりしますが、それはさておいて、自分がこのブログを書けるくらいに整理できたのはこのgist+会話の影響が大変大きいです。またgistに書いてあることには「確かにそうだな」って思っています。

結論とともに(改めて)思ったこと

  • その時々のベストとその理由を自分の頭で考えるのが大事
    • このツイートが全て
      • 「その時々の一番いい選択をする」ということの大事さはお仕事で身をもって学ばせてもらっているので、 @yotii23 さんにこのリプもらって「はい!!!」(正座!!!背筋は真っ直ぐ!!!)っていう思いになるばかりでした。
  • Railsでは「プレフィックスなくて大丈夫」と強く言って大丈夫そうだけど、他ではそうじゃないかも知れないので、もしRails以外のWEB開発とかDB設計とかする機会が訪れたら、アンラーニングする心構えで取り組んでいこう思いました(そんな日が来るかはわからない)
  • 些細なことでもモヤッとしてることは言語化したり聞いたりした方がいい
    • この疑問は多分1年くらいずっと考えていたもので、「あーそういえばこれどうなんだろうなー」と心で引っかかりはする瞬間は何度かありました。しかしスルーしていつも通りやって仕舞えば済むケースが多くて流してしまっていました。1年越しで整理できたのはよかったのですが、その時間と少からずこの点で幾度か自分の少ない脳内リソースを消費していたことがもったいなかったなと思います。

最後に

Twitterで助言をくださったお二人、Kaigi on Rails_2022_newの懇親会で一緒に議論してくださった皆さんのおかげで理解が深まり、意見を整理することができました。ありがとうございました。

2022/10/12追記

@tmtms さんが感想を呟いてくださっていました。やっぱりそうしたい考え方もあるのだなあと参考になりました。現時点で参考になるだけでなく、きっと将来見返してこのようなDB詳しい人からの意見を吟味したい時がいつか来るように思うので、すぐ見返せるようにツイートを追記しておきます。

*1: スライド: 初めてのDB定義

*2:いつもありがとうActiveRecordという気持ちになりました

*3:懇親会で口頭で話した内容。自分も同意見ではあったのですが、やんちゃさんの発言の意図とはくちがっていないだろうか