データベースツール
2022年版 Node.js ORM、クエリビルダー、データベースライブラリ トップ11
はじめに
Node.jsアプリ用のORMまたはクエリビルダーを選ぶのは難しい場合があります。JavaScriptアプリケーションからデータをクエリおよび操作できるさまざまなライブラリがあり、それぞれ設計と抽象化のレベルが異なります。
この記事は、ライブラリを選択するための出発点として、また、開発者がプロジェクトのツールを選ぶ前に調べるであろうデータをまとめることを目的としています。客観性を保ち、可能な限り価値判断を避けるように努めています。
「最高のライブラリ」を1つ選んだり、偏った方法でパッケージをランク付けしたりすることは意図していません。代わりに、最も人気のあるNode.jsクエリビルダー、ORM、およびデータベースツールキットを要約し、プロジェクトの健全性を説明します。これは、人気、リポジトリのアクティビティ、開発者サポート、プロジェクトの成熟度などの基準を使用して行われます。
注: この記事は元々2020年9月18日に公開されました。最終更新日は2022年2月15日です。
基準:データベースライブラリの評価
この記事では、最も人気のあるNode.jsクエリビルダー、ORM、およびデータベースツールキットに焦点を当てます。データベースドライバと新しいライブラリについては最後に簡単に検討します。型安全性とTypeScriptのサポートは対象外であり、今後の記事で評価されます。
ライブラリは、次の基準に従って簡単に要約および評価されます
基準 | 説明 | 評価基準 |
---|---|---|
人気度 | 開発者の間でライブラリはどのくらい人気がありますか? | GitHubスター、npmダウンロード数、およびnpmダウンロード数の月間複合成長率 |
リポジトリのアクティビティ | リポジトリの開発はどのくらい活発ですか? | コミット数、リリース数、マージされたPR数、およびGitHub issue数 |
サポート | 開発者は十分にサポートされますか? | ドキュメントの品質、StackOverflowとRedditでの存在感、Gitter/Slack/IRCチャンネル、およびGitHub issue |
成熟度と安定性 | このプロジェクトはどのくらい新しいですか?安定していて、サポーターによって支えられていますか? | npmモジュールとGitHubリポジトリの経過年数、メンテナンス、 финансовые инвестиции、企業のバックアップ、および本番環境でのユースケース |
この記事で検討したデータ期間は、2022年1月15日から2022年2月15日です。このページのパッケージは特定の順序で表示されているわけではないことに注意してください。つまり、このリストは専用のランキングを表すものではありません。
この基準は網羅的なものではなく、プロジェクトとプログラミングの好みに最も適したツールを選択する必要があります。
SQL、クエリビルダー、およびORM
データをクエリおよび操作するライブラリは、大きく3つのカテゴリに分類でき、それぞれ異なる抽象化レベルで動作します。
低い順から高い順にこれらは次のとおりです
- node-postgresのようなデータベースドライバ、クライアント、およびコネクタ
- Knex.jsのようなクエリビルダー。データベースクライアントより上のレベルで動作し、JavaScriptコードを記述してデータを操作およびクエリできます
- Sequelizeのようなオブジェクト-リレーショナルマッピングツール(ORM)や、Prismaのようなデータベースツールキット。開発者はデータベーステーブルに対応する抽象エンティティであるモデルを操作できます
多くのツールはこれらの境界線を曖昧にし、追加の柔軟性や制御が必要な場合に、開発者がより低いレベルに降りることを可能にします。詳細については、PrismaのデータガイドにあるSQL、クエリビルダー、およびORMの比較を参照してください。
Prisma
評価サマリー
- 人気度: 人気
- リポジトリのアクティビティ: 非常に活発
- サポート: 強力
- 成熟度と安定性: 比較的新しい
- サポートされているデータベース: MySQL, PostgreSQL, MSSQL, & SQLite (MongoDB, CockroachDB, および PlanetScale はプレビューサポート)
概要
Prismaは、モデルがクラスではなくPrismaスキーマで定義されている点で、ほとんどのORMとは異なります。Prismaスキーマは、Prismaツールキットで使用されるメインの構成およびデータモデル定義ファイルです。Prismaスキーマでは、PostgreSQLデータベースのようなデータソースや、users
やposts
のようなモデル、およびそれらの間の関係を定義します。このスキーマを使用して、PrismaはCreate-Read-Update-Delete(CRUD)APIを公開するクライアントを生成します。これは、データベースのクエリに使用します。このPrismaクライアントは、Node.jsアプリで使用して、モデルクラスのインスタンスではなく、プレーンなJavaScriptオブジェクトを返すことができる豊富なクエリビルダーとして機能します。
人気度
Prisma GitHubリポジトリで20.7kのスターを獲得しているPrismaは、Node開発者の間で人気のあるデータベースツールであり、Bookshelf.jsやObjection.jsのような確立されたライブラリに匹敵しますが、SequelizeやTypeORMのような25k以上のGitHubスターを持つライブラリほど人気はありません。Prismaが本番環境向けにリリースされたのは2020年6月であり、他のほとんどのツールはそれよりも数年長く存在していることに注意する必要があります。
npmダウンロード数に関して言えば、検討期間中の週あたり362kダウンロードで、Bookshelf.jsやObjection.jsのようなツールよりも多いですが、Sequelize、TypeORM、Mongooseと同じ層には達していません。しかし、この記事で検討したすべての主要なツールの中でより高い成長率を示しており、過去6か月で94%のnpmダウンロード成長率を記録しています。
評価: 人気
リポジトリのアクティビティ
Prisma GitHubリポジトリは、この記事で検討したすべてのツールの中で最もアクティブであると言っても過言ではありません。この記事で検討したデータ期間中に258件のコミット、3回のリリース、および101件のマージされたPRがあり、Prismaは活発に開発されています。新機能、バグ修正、およびアップデートは頻繁にプッシュされ、新しいバージョンは2週間ごとにリリースされます。
評価: 非常に活発
サポート
Prismaは、ここで検討した他のツールほど長い間存在していませんが、強力でアクティブな開発者サポートネットワークの恩恵を受けています。ドキュメントは、よく整理されており、積極的に拡張されており、非常に徹底的です。
質問がある場合は、Prisma Slackチャンネルを使用したり、GitHub Discussionsページで質問したり、GitHub Issueを提出したりできます。これらはすべて非常に活発です。StackOverflowの質問のライブラリほど大きくはありませんが、GitHubディスカッションやRedditで回答されたクエリのライブラリがこれを十分に補っています。
評価: 強力
成熟度と安定性
Prismaは2016年に最初に作成およびリリースされ、この記事で検討されている新しいツールの1つとなっています。GraphQLバックエンドアズアサービスであるGraphcoolとして始まり、いくつかの反復と再設計を経てきました。その後、GraphcoolはデータベースおよびGraphQLツールに転換し、16.9kのGitHubスターを持つ非常に人気のあるプロジェクトであるPrisma 1.0になりました。2020年にベータ版としてリリースされたPrisma 2.0は、PrismaサーバーとGraphQLレイヤーの両方を削除し、今日のJavaScriptおよびTypeScript ORMの代替となりました。
Prisma 2.0は、最近1200万ドルのシリーズA資金調達ラウンドを完了した民間企業Prismaによって、保守、サポート、および活発に開発されているオープンソースのJavaScript ORMです。Prismaは、Prismaを保守および構築するために、フルタイムのエンジニア、デベロッパーアドボケイト、テクニカルライターなどを雇用しています。これは、開発者がPrismaをJavaScriptデータベースインターフェースとして実装する際に、十分にサポートされることを保証できることを意味します。
評価: 比較的新しい
データベースのサポート
Prismaは現在、PostgreSQL、MySQL、MSSQL、およびSQLiteをサポートしています。さらに、MongoDB、PlanetScale、およびCockroachDBは現在プレビューサポート中です。
注目すべき機能
- クラスやインスタンスではなく、JavaScriptオブジェクトを直接操作
- オブジェクト-リレーショナルインピーダンスミスマッチを軽減するための「単一の真実の情報源」であるPrismaスキーマ
- 型安全なデータベースクエリ
- 自動生成マイグレーション (プレビュー)
- 直感的なリレーションAPI
- VSCodeプラグイン
- オートコンプリートサポート
機能の完全なリストについては、Prisma公式ドキュメントのデータベース機能を参照してください。
使用例
リレーションクエリ (特定のユーザーによるすべての投稿を取得、ユーザーのメールアドレスを指定)
const postsByUser = await prisma.user.findOne({ where: { email: 'alice@prisma.io' } }).posts()
まとめ
Prismaは比較的新しいデータベースツールであり、いくつかの反復と再設計を経てきましたが、その独自のスキーマ中心のアーキテクチャは、モデルを定義するためにJavaScriptクラスを使用する典型的なORMとは対照的です。資金提供を受けた企業と有給の開発者、活発なサポートコミュニティ、迅速な開発サイクルに支えられています。人気があり、急速に成長している選択肢であり、今後も普及していくでしょう。
Prismaが優れたオプションであると考える理由について詳しく知りたい場合は、「Prismaを選ぶ理由」ページをご覧ください。
Sequelize
評価サマリー
- 人気度: 非常に人気
- リポジトリのアクティビティ: 非常に活発
- サポート: 平均的
- 成熟度と安定性: 非常に成熟している
- サポートされているデータベース: MySQL, MariaDB, SQLite および Microsoft SQL Server
概要
Sequelizeは、PostgreSQL、MySQL、MariaDB、SQLite、およびMicrosoft SQL Serverをサポートする、確立された成熟したPromiseベースのNode.js ORMです。従来のORMパターンに従い、Model
クラスを拡張してモデルを定義します。SELECT
やINSERT
のような操作は、クラスメソッドを使用して実行されます。リレーションも、hasMany()
やbelongsTo()
のようなクラスメソッドを使用して定義されます。
人気度
検討期間中に25.7kのGitHubスターと135万のnpm週間ダウンロード数を誇るSequelizeは、この記事で検討されている最も人気のあるリレーショナルデータベースORMです。過去6か月でnpmダウンロード数が14%増加し、依然として成長しています。比較のために、次に人気のあるリレーショナルデータベースORMはTypeORMで、週間npmダウンロード数は918kです。(Mongooseも非常に人気がありますが、MongoDBのみをサポートしています。)
評価: 非常に人気
リポジトリのアクティビティ
検討期間中に、Sequelizeの新しいバージョンが10個リリースされ、179個のコミットがプッシュされ(すべてのブランチで)、86個のPRがマージされました。これは、Sequelizeが非常に活発であることを示しています。
評価: 非常に活発
サポート
Sequelizeは10年近く存在しているため、StackOverflowやRedditの検索を通じてサポートを見つけることができるでしょう。ドキュメントは広範で、多数の使用例や、使用パターンのより理論的な議論(たとえば、アソシエーションのドキュメント)も含まれています。ただし、SequelizeのGitHub IssuesとSlackチャンネルは改善の余地があり、多くのクエリが未回答のままになっています。
評価: 平均的
成熟度と安定性
Sequelizeは、利用可能な最も成熟したNode ORMの1つです。もはや急速に変化するプロジェクトではなく、最近の開発はバグ修正とドキュメントの更新に焦点を当てたメンテナンス中心のようです。これは、メンテナとSequelizeコミュニティからのオープンソースの貢献に完全に依存する安定したツールです。
ドキュメントによると、WalmartLabsやBitoviのような注目すべきユーザーがいます。
評価: 非常に成熟している
データベースのサポート
PostgreSQL、MySQL、MariaDB、SQLite、およびMicrosoft SQL Server。外部パッケージを使用してCockroachDBもサポートしています。
注目すべき機能
- 馴染みのあるORMインターフェースとActiveRecordの使用パターン
- トランザクションとその実行方法の詳細な制御
- 多くのデータベースをサポート
- 複数の読み取りレプリカを使用する機能
- リレーションのEagerおよびLazyローディング
- 定義されたモデルに基づくデータベースの同期
機能の完全なリストについては、Sequelizeの公式ドキュメントを参照してください。
使用例
リレーションクエリ (特定のユーザーによるすべての投稿、Eager Loading)
const user = await User.findOne({where: {email: 'alice@sequelize.org',},include: Post,})
まとめ
Sequelizeは、確立された安定したActiveRecord ORMであり、その人気と長年にわたる多用性により、StackOverflow、Reddit、GitHub Issuesなどの場所からサポートを見つけることができます。プロジェクトは現在、近年よりも大幅に活発になっており、これは良い兆候です。
PrismaとSequelizeのより焦点を絞った比較については、Sequelize比較ページをご覧ください。
TypeORM
評価サマリー
- 人気度: 非常に人気
- リポジトリのアクティビティ: 活発
- サポート: 良好
- 成熟度と安定性: 成熟している
- サポートされているデータベース: MySQL, MariaDB, PostgreSQL, CockroachDB, SQLite, Microsoft SQL Server, Oracle, SAP Hana, sql.js
概要
TypeORM は、Hibernate に影響を受けた JavaScript および TypeScript 用 ORM で、Node.js、ウェブブラウザ、Cordova などの複数のプラットフォームで実行できます。TypeScript で構築され、型サポートを念頭に置いて設計されており、主要な ORM アーキテクチャパターンであるデータマッパーとアクティブレコードの両方をサポートし、開発者はこれら 2 つの中から柔軟に選択できます。クエリビルダーも含まれています。
人気
2016 年のリリース以来、TypeORM は急速に成長し、最も人気のある JavaScript および TypeScript ORM の 1 つになりました。GitHub で 27.2k のスターと、npm で週 918k のダウンロード数を誇り、Sequelize や Mongoose と並んで、最も人気のある ORM の選択肢の 1 つとなっています。
評価: 非常に人気
リポジトリのアクティビティ
TypeORM の GitHub リポジトリは活発です。過去 1 か月で、74 件のコミットが(すべてのブランチに)プッシュされ、41 件の PR がマージされました。厳密なリリーススケジュールはないようで、最新のリリースは 2021 年 11 月に行われました。
評価: アクティブ
サポート
TypeORM のドキュメントは充実しており、マイグレーション、リレーション、データマッパーやアクティブレコードのような ORM パターンなどのデータベースの概念も網羅しています。Slack コミュニティはやや活発で、Reddit と StackOverflow のプレゼンスはそこそこありますが、GitHub issues を使用して多くの助けを得ることは期待薄です。
評価: 良好
成熟度と安定性
成熟度は Prisma と同等ですが、TypeORM の設計は、TypeScript 用に構築された(JavaScript でも十分に機能する)Hibernate に影響を受けた ORM としての最初のリリース以降、変化は少なくなっています。完全にオープンソースの貢献に依存していますが、OpenCollective の貢献から年間約 15000 ドルの予算でいくらかのサポートを受けています。注目すべき企業貢献者には、Cockroach Labs、Aplas、VoterCircle Inc. などがあります。
評価: 成熟
データベースのサポート
MySQL、MariaDB、PostgreSQL、CockroachDB、SQLite、Microsoft SQL Server、Oracle、SAP Hana、sql.js
注目すべき機能
- データマッパーとアクティブレコードの両方の ORM パターンをサポート
- 強力で柔軟なクエリビルダー
- 強力な TypeScript サポート
- リレーションの即時ロードと遅延ロード
- 自動マイグレーション生成
- トランザクションのサポート
- 多くのデータベースをサポート
機能の完全なリストについては、TypeORM の GitHub README を参照してください。
使用例
TypeORM で特定のユーザーによるすべての投稿をクエリする
const userRepository = getRepository(User)const user = await userRepository.findOne(id, {relations: ['posts'],})
概要
TypeORM と Sequelize は、最も人気のある 2 つのリレーショナルデータベース ORM です。TypeORM は Sequelize と異なり、より柔軟性があり、さまざまな使用パターンから選択でき、強力なクエリビルダーも含まれています。TypeORM は多くの人気のあるデータベースをサポートしており、プロジェクトはまだアクティブですが、完全にオープンソースの貢献者に依存しています。
Prisma と TypeORM のより焦点を絞った比較については、TypeORM 比較ページ を参照してください。
Mongoose
評価概要
- 人気度: 非常に人気
- リポジトリのアクティビティ: 活発
- サポート: 良好
- 成熟度と安定性: 成熟している
- サポートされているデータベース:MongoDB
概要
Mongoose は、MongoDB 用の Node.js オブジェクトモデリングツールとして人気があり、十分にメンテナンスされています。厳密に言えば、Mongoose はオブジェクトドキュメントマッパーです。なぜなら、MongoDB はドキュメントベースのデータベースだからです。スキーマを使用してデータをモデル化でき、組み込みの型キャスト、バリデーション、クエリビルディング、ビジネスロジックフックが含まれています。
人気
Mongoose は、MongoDB データベース向けの最も人気のある JavaScript データモデリングツールです。GitHub で 23.9k のスターと、npm で週 190 万ダウンロード数を誇ります。
評価: 非常に人気
リポジトリのアクティビティ
Mongoose の GitHub リポジトリは非常に活発です。過去 1 か月で、ブランチ全体で 199 件のコミット、58 件の PR がマージされました。最近のコミットは、バグ修正、機能追加、ドキュメントに重点が置かれています。リリースは非常に頻繁に行われているようで、検討期間中に 5 回ありました。
評価: アクティブ
サポート
Mongoose のドキュメントは、クエリ、モデルの作成、バリデーションなどの最も一般的な操作の利用ガイドで構成されています。API ドキュメントにも多くの役立つスニペットが含まれています。Slack と Gitter コミュニティ(どちらも比較的静かですが)があり、Reddit や StackOverflow で多くのサポートとヒントを見つけることができます。GitHub issues セクションも非常に活発で、ほとんどの issue はメンテナや他の Mongoose ユーザーから何らかの応答またはサポートを受けています。
評価: 良好
成熟度と安定性
Mongoose は 2011 年から存在しており、この記事で検討されているプロジェクトの中で最も成熟したものの 1 つです。Node.js ODM を MongoDB で使用したい場合、Mongoose インターフェースが大幅に変更されることはなく、MongoDB リリースに合わせて最新の状態に保たれると信頼できます。OpenCollective の貢献者からの年間 67,000 ドルの予算で、驚くべき額のオープンソースの資金援助を受けています。一連の買収を通じて、Wordpress.com、Tumblr、Simplenote を所有する Automattic 社が Mongoose を引き継ぎました。Terra Vera、SixPlus、Payment Ninja はすべて Mongoose を使用して構築されています。
評価: 成熟
データベースのサポート
MongoDB
注目すべき機能
- NoSQL データベース用のスキーマとモデル
- バリデーター、事前および事後ミドルウェアフック
populate()
を使用して他のコレクションのドキュメントを参照する- サブドキュメント:他のスキーマにスキーマをネストする
機能の完全なリストについては、Mongoose の 公式ドキュメント を参照してください。
使用例
リレーションクエリ (特定のユーザーによるすべての投稿を取得、ユーザーのメールアドレスを指定)
const userWithPosts = await User.findOne({email: 'alice@mongoose.com',}).populate('posts')
概要
Node で MongoDB データベースを使用しており、ODM を使用したい場合、Mongoose は安全な選択肢です。人気があり、成熟したプロジェクトであり、アクティブにメンテナンスされ続けています。スキーマを定義してデータをモデル化し、バリデーション、型キャスト、ポピュレーション、ミドルウェア、カスタムメソッド、クエリヘルパーなどの機能を提供します。
Prisma と Mongoose のより焦点を絞った比較については、Mongoose 比較ページ を参照してください。
Bookshelf.js
評価概要
- 人気度: 人気
- リポジトリのアクティビティ:あまり活発ではない
- サポート: 平均的
- 成熟度と安定性: 成熟している
- サポートされているデータベース:PostgreSQL、MySQL、および SQLite
概要
Bookshelf.js は、Knex.js クエリビルダーライブラリの上に構築された Node.js ORM です。データマッパー ORM パターンに触発されており、データをモデル化して操作するための簡素化されたインターフェースを提供します。
人気
6.3k の GitHub スターを持つ Bookshelf.js は、Sequelize や TypeORM ほど人気はありませんが、Objection.js や Waterline.js と同じ範囲にあります。週 82k のダウンロード数(Sequelize の 135 万と比較して)があり、広く採用されていないかもしれませんが、より簡素なインターフェースを好むコアな開発者層がまだいることを意味します。その人気はやや衰退しているようで、過去 6 か月で npm ダウンロード数が 36% 減少しています。
評価: 人気
リポジトリのアクティビティ
過去 1 か月で、Bookshelf リポジトリにはコミット、リリース、マージされたプルリクエストはありませんでした。メインブランチへの新しいコミットは約 1 年間行われていません。執筆時点での最後のリリースは、2020 年 6 月 7 日の 1.2.0
でした。
評価: あまり活発ではない
サポート
Bookshelf のコアドキュメントは、簡単なクイックスタートガイドと、さまざまなリレーションタイプを作成するためのコードスニペットで構成されています。ただし、API ドキュメントは非常に広範囲にわたっており、多くの使用例が含まれています。Bookshelf には IRC チャンネルがありますが、メンバーはわずか 7 人で、かなり静かなようです。同様に、StackOverflow や Reddit でのサポートも少なめです。最善の策は GitHub Issues ページですが、貢献者の注意を引くのに苦労するかもしれません。
評価: 平均的
成熟度と安定性
Bookshelf.js は 2013 年から存在しており、現時点ではかなり成熟しています。その注目すべきユーザーには、Ghost、Soapee、NodeZA、Sunday Cook、FlyptoX などがあります。少数のメンテナと、資金的または企業からの支援がないオープンソースパッケージです。
評価: 成熟
データベースのサポート
PostgreSQL、MySQL、および SQLite。
注目すべき機能
- ORM 機能の合理化されたセットを備えたシンプルなインターフェース
- Knex.js の上に構築されているため、必要に応じてクエリビルダーをドロップダウンして使用できます
- Promise およびコールバックインターフェース
- 即時およびネストされた即時リレーションロード
- トランザクションをサポート
- 機能を拡張するためのコミュニティプラグイン
機能の完全なリストについては、Bookshelf.js 公式ドキュメント を参照してください。
使用例
リレーションクエリ (特定のユーザーによるすべての投稿を取得、ユーザーのメールアドレスを指定)
const userWithPosts = await User.where(“email”, “alice@bookshelf.js”).fetch({withRelated: [“posts”]});
概要
Bookshelf.js は、標準的なデータモデリング、クエリ、および操作ツールを提供するシンプルな ORM です。Knex.js クエリビルダーの上に構築されているため、インターフェースに制限を感じた場合は、いつでもドロップダウンして、より複雑なクエリを作成できます。もはや活発なプロジェクトではありませんが、長い間存在しており、その合理化されたスタイルを好むコアユーザー層がいます。
Objection.js
評価概要
- 人気度: 人気
- リポジトリのアクティビティ:やや活発
- サポート: 良好
- 成熟度と安定性: 成熟している
- サポートされているデータベース:SQLite、Postgres、および MySQL
概要
Objection.js は、ORM よりも「リレーショナルクエリビルダー」であると自己紹介しています。Bookshelf.js と同様に、強力な Knex.js クエリビルダーライブラリの上に構築されており、常にドロップダウンできる柔軟なクエリビルダーの上に ORM のような機能を構築しています。
人気
6.5k の GitHub スターと週 115k の npm ダウンロード数を誇る Objection.js は、人気度で Bookshelf.js に近く、Prisma に次いでいます。どちらも、25k 以上のスターと週 900k 以上のダウンロード数の範囲にある Sequelize や TypeORM ほど人気はありません。
評価: 人気
リポジトリのアクティビティ
Objection.js リポジトリには、この記事で検討した期間中にコミットやマージされた PR はありませんでした。Objection の最新リリースは 2021 年 12 月 31 日で、いくつかのバグ修正が含まれていました。Prisma や TypeORM のようなプロジェクトほど活発ではありませんが、アクティブにメンテナンスされています。
評価: やや活発
サポート
Objection のドキュメントは、モデルとリレーションの作成、クエリ、トランザクション、フック、バリデーションなどの主要な機能を網羅した利用ガイドで構成されています。API ドキュメントと、結合やサブクエリなどの一般的な操作の例を掲載した「レシピブック」も含まれています。StackOverflow で多くの助けを得ることはできませんが、プロジェクトの Gitter はかなり活発で協力的であり、Reddit のプレゼンスはそこそこあり、メンテナは GitHub issues に頻繁に応答しています。
評価: 良好
成熟度と安定性
Objection は 2015 年から公開されており、成熟したプロジェクトです。資金的または企業からの支援はないようで、オープンソースコミュニティによってメンテナンスされています。Objection.js の本番環境での使用事例のリストについては、以下を参照してください。[Objection.js を本番環境で使用しているのは誰ですか?](Objection.js を本番環境で使用しているのは誰ですか?)
評価: 成熟
データベースのサポート
SQLite、PostgreSQL、および MySQL
注目すべき機能
- Knex.js の上に構築
- 即時ロード
- トランザクションのサポート
- JSON Schema に対してモデルを検証
- クエリフック(挿入、更新などの前/後)
- グラフアップサート
- ページング
機能の完全なリストについては、Objection.js GitHub READMEを参照してください。
使用例
リレーションクエリ (特定のユーザーによるすべての投稿を取得、ユーザーのメールアドレスを指定)
const user = await User.query().findOne({email: 'alice@objection.js',})const posts = await user.$relatedQuery('posts')
概要
Objection.js は、Knex.js クエリビルダーライブラリの上に ORM のような機能セットを構築するという点で、Bookshelf.js に最もよく似ています。Objection.js は、より活発にメンテナンスされ、ドキュメントが充実しているようで、多くの Objection.js 開発者は、以前は Bookshelf.js を使用していたとのことです。[Objection.js を本番環境で使用しているのは誰ですか?](Objection.js を本番環境で使用しているのは誰ですか?)
Waterline
評価の概要
- 人気度: ある程度人気
- リポジトリのアクティビティ:あまり活発ではない
- サポート: 平均的
- 成熟度と安定性: 成熟している
- サポートされているデータベース: MySQL、PostgreSQL、MongoDB。コミュニティアダプター経由: Redis、MS-SQL、Oracle、その他多数。
概要
Waterline は、Sails Node.js フレームワークで使用されるデフォルトの ORM です。その設計の一部は、「一度書けばどこでも使える」データ操作コードを使用できるようにすることです。これにより、データが MySQL、PostgreSQL、MongoDB、またはその他のデータベースのどこにあっても、データをクエリまたは操作するコードを記述できます。
人気度
Waterline は人気のある ORM で、GitHub スター数は 5.3k、npm の週間ダウンロード数は 37k です。npm の週間ダウンロード数 37k は、評価対象のすべてのツールの中で最も人気がありません。
評価: ある程度人気
リポジトリのアクティビティ
Waterline の GitHub リポジトリは、最近あまり活発ではないようで、検討対象のデータ期間の 1 か月間でコミットとマージされた PR は 0 件でした。最後のリリースは 2021 年 10 月 22 日で、その前のリリースは 2021 年 3 月でした。
評価: あまり活発ではない
サポート
Waterline で問題が発生した場合、ほとんどの場合、自分で解決する必要があります。ドキュメントは Sails.js ドキュメントの短いセクションで構成されていますが、API は非常に詳細に文書化されており、多数の使用例が含まれています。追加のサポートは Sails Gitter (非常に活発なようです) や GitHub Issues で見つけることができますが、Sails フレームワーク GitHub Issues ページになります。質問への回答やバグの修正がプッシュされるまでに時間がかかる場合があります。
評価: 平均的
成熟度と安定性
Waterline は 2013 年から存在しており、安定した API を備えた成熟したパッケージです。Sails.js JavaScript フレームワークの一部として、Y Combinator スタートアップインキュベーターで育成された、民間出資の Sails Company によって管理およびメンテナンスされています。Sails.js は、Verizon、Postman、JetBlue などで使用されている人気のある JavaScript フレームワークですが、スタンドアロンの Waterline ライブラリに依存している本番環境でのユースケースがどれほどあるかは不明です。
評価: 成熟
データベースのサポート
MySQL、PostgreSQL、MongoDB。コミュニティアダプター経由: Redis、MS-SQL、Oracle、その他多数。
注目すべき機能
- データベースに依存しないコードの記述
- 異なるモデルのデータが異なるデータベースに存在する場合でも、モデル間のリレーションシップをpopulate
機能の完全なリストについては、Waterline ORM GitHub READMEを参照してください。
使用例
リレーションクエリ (特定のユーザーによるすべての投稿を取得、ユーザーのメールアドレスを指定)
const userWithPosts = await User.find({ email: 'alice@waterline.js' }).populate('posts')
概要
Waterline は Sails.js JavaScript フレームワークに組み込まれている ORM/ODM であり、そのため、その主な目標は、コードを書き換えることなく、複数のデータベースタイプ (リレーショナルと NoSQL の両方) をサポートすることでした。ここ数か月でプロジェクトは停滞しており、サポートはこの記事で検討されている他のライブラリほど強力ではありません。
Knex.js (クエリビルダー)
評価の概要
- 人気度: 非常に人気
- リポジトリのアクティビティ: 活発
- サポート: 良好
- 成熟度と安定性: 成熟している
- サポートされているデータベース: PostgreSQL、Amazon Redshift、MySQL、MariaDB、SQLite、MSSQL
概要
Knex.js は、複数のデータベースをサポートし、トランザクションサポート、接続プーリング、ストリーミングインターフェースなどの機能を含む Node.js クエリビルダー (ORM ではない) です。データベースドライバーよりも上のレベルで作業し、SQL を手書きすることを回避できます。ただし、下位レベルのライブラリであるため、SQL と、結合やインデックスなどのリレーショナルデータベースの概念に精通していることが期待されます。
人気度
15.4k の GitHub スターと 104 万の週間 npm ダウンロード数を誇る Knex.js は、非常に人気のある JavaScript クエリビルダーです。
評価: 非常に人気
リポジトリのアクティビティ
検討対象のデータ期間の 1 か月間で、Knex.js はすべてのブランチで 42 件のコミットがプッシュされ、26 件の PR がマージされ、3 つのリリースが公開されました。最近のコミットには、バグ修正と機能が含まれています。
評価: アクティブ
サポート
Knex.js のドキュメントは、主に API の完全なドキュメントで構成されており、広範囲にわたりますが、非常に簡素な場合があります。リレーショナルデータベース、SQL、およびそのコア機能セット (結合、接続など) に精通していることが期待されます。あまり活発ではない Gitter チャンネルをホストしていますが、StackOverflow や Reddit でサポートを見つけることができる場合があります。GitHub Issues ページは非常に活発なようですので、クエリがプロジェクトメンテナーによって確認されることを確認できます。
評価: 良好
成熟度と安定性
Knex は 2013 年から存在しており、成熟したプロジェクトです。複数のデータベースドライバーをサポートする「batteries-included」JavaScript クエリビルダーとして設計されており、それ以来、インターフェースはあまり変わっていません。これは、完全にコミュニティによってメンテナンスされているオープンソースプロジェクトであり、この記事で検討されている他のライブラリほど活発ではありませんが、マイナーリリースは頻繁であり、少数のコントリビューターが修正と改善をライブラリにプッシュし続けています。
評価: 成熟
データベースのサポート
PostgreSQL、Amazon Redshift、MySQL、MariaDB、SQLite、MSSQL
注目すべき機能
- コールバックおよび Promise インターフェース
- ストリームインターフェース
- クエリおよびスキーマビルダー
- トランザクションサポート
- 接続プーリング
- 異なるクエリクライアントとダイアレクト間の応答の標準化
機能の完全なリストについては、knex.js GitHub READMEを参照してください。
使用例
JOIN クエリ (特定のユーザーによるすべての投稿を取得、ユーザーのメールアドレスを指定)
const posts = await knex('posts').join('users', {'users.id': 'posts.user_id','users.email': 'alice@knex.js',}).select('*')
概要
Knex.js は、この記事で検討されているほとんどのデータベースツールとは異なり、データをモデル化するために使用されるデータベースの上に位置する ORM や抽象化レイヤーではありません。これは、データベースドライバーのラッパーとして機能する強力で柔軟なクエリビルダーであり、クエリの一部を簡略化し、ボイラープレート SQL を削除できます。これは、最も人気のある「純粋な」JavaScript クエリビルダーであり、活発にメンテナンスされている成熟したプロジェクトです。
その他の注目すべきライブラリ
この記事では、最も人気のある Node.js ORM、データベースツール、およびクエリビルダーに焦点を当てていますが、プロジェクトで検討したい他のツールがいくつかあります。
MassiveJS
MassiveJS は、PostgreSQL 用の Node.js データベースツールであり、データベースを操作するための抽象化を構築しますが、モデルとエンティティを備えた本格的な ORM ではありません。Prisma と同様に、データベースに接続してスキーマをイントロスペクトし、データベースにエンコードされたデータモデルの API を構築できます。動的なクエリビルダーとトランザクションサポートが含まれており、PostgreSQL 向けに設計されているため、配列フィールドと操作、正規表現マッチング、外部テーブル、マテリアライズドビューなどの独自の機能セットをサポートしています。
Mikro-ORM
Mikro-ORM は、vanilla JavaScript をサポートする、より新しい TypeScript ORM です。主に TypeScript ORM であるため、この記事では完全に評価されていません。Mikro-ORM は急速に成長しているプロジェクトであり、GitHub で非常に活発であり、開発者によって強力にサポートされています。Doctrine (PHP ORM) の影響を受けており、データマッパー、Identity Map、および Unit of Work の影響を受けた ORM です。その機能のいくつかには、自動トランザクション処理、複数のデータベースのサポート、組み込みの Knex.js ベースのクエリビルダー、およびスキーマおよびエンティティジェネレーターが含まれます。
Slonik
Slonik は、node-postgres
データベースドライバーのすぐ上のレベルに位置します。これは、型安全性、クエリのモック、接続とトランザクションの処理、詳細なロギング、値の補間、およびその他の多くの機能を組み込んだユーティリティのコレクションです。raw SQL を記述する必要はありますが、PostgreSQL データベースを操作する際に安全性と効率性のレベルを追加するように設計されています。ライブラリは 2017 年にリリースされ、GitHub で依然として非常に活発にサポートされています。
データベースドライバー
抽象化スペクトルの最下位レベルにはデータベースドライバーがあり、これを使用してクエリ言語を使用してデータベースと直接対話できます。すべての Node.js データベースクライアントを要約することは、この記事の範囲を超えていますが、便宜上、主なデータベースドライバーのリストを次に示します。
- PostgreSQL: node-postgres、pg-promise
- MySQL: mysql、node-mysql2、mysql-connector-nodejs
- SQLite: node-sqlite3
- MSSQL: node-sqlserver-v8、node-mssql、tedious
- MongoDB: node-mongodb-native
- Redis: node-redis、ioredis
概要
ライブラリ | タイプ | 人気度 | アクティビティ | サポート | 成熟度と安定性 | 公式にサポートされているデータベース |
---|---|---|---|---|---|---|
Prisma | ORM + クエリビルダー | 💜💜 | 🌳🌳🌳🌳 | 🔵🔵🔵🔵 | 比較的新しい、Prisma 社によるバックアップ | PostgreSQL、MySQL、MariaDB、SQLite、MSSQL (MongoDB、CockroachDB、および PlanetScale はプレビュー) |
Sequelize | ORM | 💜💜💜 | 🌳🌳 | 🔵🔵 | 成熟、資金なし | PostgreSQL、MySQL、MariaDB、SQLite、MSSQL |
TypeORM | ORM + クエリビルダー | 💜💜💜 | 🌳🌳🌳 | 🔵🔵🔵 | 成熟、OpenCollective 資金提供 (\$15k) | PostgreSQL、MySQL、MariaDB SQLite、MSSQL、CockroachDB、Oracle、Sap Hana |
Mongoose | ODM + クエリビルダー | 💜💜💜 | 🌳🌳🌳 | 🔵🔵🔵 | 成熟、OpenCollective 資金提供 (\$67k)、Automattic によるバックアップ | MongoDB |
Bookshelf.js | ORM + クエリビルダー (knex.js) | 💜💜 | 🌳 | 🔵🔵 | 成熟、資金なし | PostgreSQL、MySQL、SQLite |
Objection.js | ORM + クエリビルダー (knex.js) | 💜💜 | 🌳🌳 | 🔵🔵🔵 | 成熟、資金なし | PostgreSQL、MySQL、SQLite |
Waterline | ORM | 💜 | 🌳 | 🔵🔵 | 成熟、Sails Company によるバックアップ | PostgreSQL、MySQL、MongoDB |
Knex.js | クエリビルダー | 💜💜💜 | 🌳🌳🌳 | 🔵🔵🔵 | 成熟、資金なし | PostgreSQL、MySQL、MariaDB、SQlite、MSSQL、Oracle、Amazon Redshift |
結論
この記事では、最も人気のある Node.js ORM、データベースツールキット、およびクエリビルダーを要約しています。オープンソースプロジェクトとしての健全性は、リポジトリの貢献や開発者サポートなどの基準に従って評価されています。
これは、Node.js データベースインターフェースを選択するための網羅的なフレームワークとして意図されたものではなく、パッケージのプログラミングインターフェース、設計、データベース機能のサポート、および柔軟性などの他の要因は、ここで評価された基準よりも大幅に重要になる可能性があります。異なる Node.js プロジェクトでは、異なるツールが必要になる場合があります。
クエリビルダーと ORM の詳細については、SQL、クエリビルダー、および ORM の比較を Prisma のデータガイドから参照してください。これは、データベース、データモデリング、その他について学ぶための無料の役立つ知識ベースです。