Tech & Design LAB

PgTyped - Node.jsで型安全にSQLを管理するには

#バックエンド #TypeScript #PostgreSQL #技術選定
author icon
Posted on
tech

弊社HiCustomerは、2021年のすごいベンチャー100に選ばれました。小田です。皆様今年もよろしくお願いいたします。直近の報告ですが、私はちょくちょくKafkaJSと遊んでおります。もうAWS SQSやCloud Pub/Subには戻れない身体になりそうで、タイミングをみてConfluent社の株を買っちゃいそうです。ギャンブラーとしてAll-inしちゃおうかな😜

最近のNode.jsのORM事情について

本題ですが、最近SaaSの新規案件を始める関係でORM周りライブラリの技術調査をしています。ちなみに環境と要件は以下です。

環境は以下:

要件は以下:

上記を条件にどうせPrismaTypeORMかなと思って両方のドキュメントを全部読んで試していました。ただ、ちょっと物足りないですね。。。どちらも複雑なリレーションや複数のqueryを含むトランザクションをかなり扱いづらいです。RubyにおけるActiveRecordみたいな立ち位置の存在が現れるのはまだまだ遠そうです。以下は雑感です。

仕方がないので、特定のデータベースに絞ったもの特定の機能に絞ったライブラリに手を伸ばして調査を継続しました。今回はその中でも最も興味ぶかかったPgTypedをご紹介します。他にも「Zero-Abstraction Postgres for TypeScript」を謳っているZapatosなどもかなり良かったです。

PgTypedについて

PgTypedの最大の特徴であり唯一の機能は、SQLを書くと対応する型とコードを自動生成してくれることです。これが全てです。具体的な開発の手順は以下になります。

例えば、customersテーブルにカスタマーを登録し、nameカラムがc01に一致するレコードを取得したい場合は以下になります。

いかがでしょうか?シンプルでなおかつ複雑なケースにも対応できるイメージがわきませんか?私は最初触ったときにこのシンプルさと10分で動いたことにちょっと感動してしまいました。利点と欠点をまとめると以下になります。

利点は以下:

欠点は以下:

実は最初はポピュラーではない点がかなり気になってはいたんですが、最近は直行性が高いのでどうでもよくなってきました。TypeORMがもっと便利になったら比較的低コストで乗り換えれるので。

お仕事一緒にしませんか?

どうでしょうか?読んでる方にとって、少しでもなにか得るものがあれば幸いです。唐突ですがこの内容に少しでも興味を持った方は一緒にお仕事をしてみませんか?フリーランスの方や副業前提の方もまずはカジュアル面談でも😉 仕事内容の確認やご応募は次のリンクからお願いします。 https://hicustomer.notion.site/HiCustomer-0d4844ffdcd046e994fe69c3ff787a03

author icon
シニアエンジニア

最近はAWS CDKとAWSのdata lake周りのソリューションが好きです🙋‍♀️よく、lwn.netとCrypto-Gram Newsletterを結構みています。djbと及川さんを尊敬しています。