52:予備カラムを用意しない

プログラミング迷子: 社内フローのシワ寄せで生まれてしまう予備カラム

  • 後輩W:将来的に、データベースにカラムが必要になるかもしれません。

  • 先輩T:たしかにそうだね。

  • 後輩W:ですので、今のうちに予備用のカラムをいくつか作っておこうと思います。

  • 先輩T:それは良くないよ。あとから追加すれば十分じゃない?

  • 後輩W:社内の運用上、私がデータベースの操作をする権限がないので、先に十分な量を作っておいたほうがいいかなと。

  • 先輩T:必要なときにカラムを足すほうが良いよ。アプリケーションの開発が大変になってしまうよ。

予備カラム 」という言葉が聞こえたら、できる限り避けることを考えましょう。

具体的な失敗

class Sale(models.Model):
    product = models.ForeignKey(...)
    bought_by = models.ForeignKey(...)

    yobi_001 = models.CharField("予備1", max_length=1023)
    yobi_002 = models.CharField("予備2", max_length=1023)
    yobi_003 = models.CharField("予備3", max_length=1023)
    yobi_004 = models.CharField("予備4", max_length=1023)
    yobi_005 = models.CharField("予備5", max_length=1023)

この例では今後のことを考えて yobi_ という予備カラムが5つあります。 将来的に予備カラムが使われるようになったとして、以下の問題があります。

  • カラム名が意味を説明できない

    • yobi_001 はキャンペーンIDが入っている」と直感的にわからない

  • 文字列型など事前に決めた型でしか使えない

    • 文字列型として数値や日付を管理する必要が出る

    • 外部キーを貼れない

  • 事前に決めたカラムの大きさで使うしかない

ベストプラクティス

単純に、予備カラムを使わないようにしましょう。

class Sale(models.Model):
     product = models.ForeignKey(...)
     bought_by = models.ForeignKey(...)

cover

(中略)詳細は書籍 自走プログラマー をご参照ください