😽

Kysely が Knex をリプレイスする日も近いかもしれない

2021/07/29に公開

Node.js の RDB 向けの Query Builder は Knex が有名ですが、 Kysely というのが台頭しそうな予感がします。

https://github.com/koskimas/kysely

Knex と非常に似た構文をしていますが、大きな違いは、 TypeScript で書かれている ことです。 TS 4.1 で導入された Template Literal Type を駆使し、複雑な Join や As を使ったエイリアスでも可能な限り型推論できるようになっています。

作者の Koskimas 氏は Knex を利用した ORM である Objection.js の作者で、 Knex には熟知していることでしょう。 Knex は肥大化し、今から TypeScript にするのも現実的ではないため、新しく Kysely を作った、とのことです。

https://github.com/Vincit/objection.js

公開されて3日後くらいから、ちょいちょい見ているんですが、頻繁に更新されています。 Koskimas 氏は Objection.js のコミュニティでも親切に対応していますし、実装を見ても非常に整頓されたコードとなっていて、大いに期待が持てます。現在は PostgreSQL にのみ対応しているが、 Production での使用はお勧めしないとのことです。

Prisma や Type-ORM など、 Knex に依存しない ORM は増えていますが、やはり多数の DB の Dialect に対応する手間などはあるでしょう。また Objection.js や Mikro-ORM なども Knex ベースですし、 NPM でのダウンロード数を比べても Knex が不要になる時代はまだ先になりそうです。

Weekly Downloads

  • Knex 765,893
  • TypeORM 685,728
  • Prisma 172,875
  • Mikro-ORM 20,505

個人的には SQL に型が付くというのは非常に嬉しく、 Kysely は ORM を使わない開発で重宝しそうです。 ORM は好みも分かれるし、学習コストやパフォーマンスなどを考えると素の SQL に近い書き方をしたい。ただ、素の SQL だとさすがに書きにくい。そういう時に Kysely は有力な選択肢になってくれると良いなと思います。

ちなみに素の SQL でいい感じに書ける Slonik というライブラリもあり、こちらも良いのですが、やはり TypeScript の型定義やエディタ支援を使いたい気持ちがあり、実戦投入は難しいと思います。

https://github.com/gajus/slonik

Discussion