RDSにORM使ったけどモヤモヤが止まらないのでぜんぶ吐き出す!!!


 転職活動でバックエンドも出来るぜ!アピールとしてポートフェリオぽいの作った方が良いかもね・・?という事で、こんなリポジトリ作ってたわけなんですけど、コード書いてて気づいた事つらつらと書きます。

 何時もの奔放な個人開発じゃなく、気づき、ハマりのQiitaらしいアウトプットってことで。ちゃんと調べて書けーって怒られそうな気もするけどw

ORMの仕様とか親切で大惨事になるかも・・?

 今回Goの代表的なORMであるgormを使いましたが、Delete投げる時に消す情報を先に取得しないまま、動かすとテーブル内のレコードすべてが消えるのが仕様らしいんです!

  jsonData.Id = Ids
  DBMS.First(&jsonData) // この行無いと滅亡です!
  DBMS.Delete(&jsonData)

今回一番作ってて?となったとこ。ありえん。

RDS?ORM?どっちが悪いでしょーか

 RDSが一時的に不調っぽい時に動かすとダンマリでタイムアウトせず・・

  DB, err := gorm.Open(DBTYPE, CONNECT) // ずーーっと接続中
  if err != nil {
    fmt.Println("RDS access error!")
    panic(err.Error())
  }

せめてエラー応答して欲しかったなと。

Model定義の順番で構造が崩れる!?

  type test struct {
    gorm.Model
    Number int `gorm:"primary_key"`
  }

 みたいに先にgorm.Modelを書いて、DB側のテーブルの最初にNumberが居るとgorm.Modelから取得した値がNumberに浸食してきます。

  type test struct {
    Number int `gorm:"primary_key"`
    gorm.Model
  }

こんなふうにDBスキーマにもよるけど最後に書いた方が無難。

残るモヤ

 と、まあ学びを通じて残るモヤがまだまだありました。。

APIサーバー自身もマネージドサービスの方が良くね?という疑問

ORM以前からDB叩いてきたバックエンドエンジニアにはどう映ってるの?という疑問

VSCodeとかエコシステムが逆に足引っ張ってねーかい?という疑問

 こういうアンチナレッジが残る事自体が学びなんでしょうけど、技術的な選定して舵を取るという意味でテックリードって大事なんやなと改めて思った。むしろテックリード不在の組織ってこういうのどうオトしてんだろ??