Node.js & TypeScript向けの完璧なORM

11 min read読了の目安(約10400字

本記事は、@nikolasburk氏による「The Complete ORM for Node.js & TypeScript」(2021年4月21日公開)の日本語翻訳を、著者の許可を得て掲載しているものです。今後Prismaの公式ブログの日本語翻訳の許可をいただいたので、このアカウントで継続して翻訳していきます。※画像やリンクは公式のBlogからお借りしています。

Prismaは、Node.jsとTypeScriptのための次世代ORMです。2年以上の開発期間を経て、すべてのPrismaツールが製品化の準備が整ったことをお伝えできることに興奮しています!

コンテンツ

  • オブジェクト-リレーショナルマッピングの新しいパラダイム
  • あらゆるスタックに対応するPrisma
  • ミッションクリティカルなアプリケーションでの運用に対応
  • オープンソースを超えて
  • お手伝いできることは?
  • Prismaを始めよう
  • ORMのために来て、コミュニティのために残る💚」という言葉があります。

オブジェクト-リレーショナルマッピングの新しいパラダイム

Prismaは、Node.jsとTypeScriptのための、オープンソースの次世代ORMです。以下のツールで構成されています。

Prisma Client: 自動生成された、タイプセーフなデータベースクライアント
Prisma Migrate: 宣言的なデータモデリングとカスタマイズ可能なマイグレーション
Prisma Studio: データを閲覧・編集するためのモダンなUI

これらのツールは、Node.jsやTypeScriptのプロジェクトであれば、一緒に採用することも、個別に採用することも可能です。Prismaは現在、PostgreSQL、MySQL、SQLite、SQL Server(プレビュー)をサポートしています。MongoDB用のコネクタも準備中です。Early Accessプログラムへの登録はこちらから。

データベースは難しい

データベースを扱うことは、アプリケーション開発において最も困難な分野の一つです。データモデリング、スキーママイグレーション、データベースクエリの作成は、アプリケーション開発者が毎日取り組む一般的なタスクです。

Prismaでは、Node.jsのエコシステムは、データベースに依存したアプリケーションを構築するためにますます普及しているものの、アプリケーション開発者がこれらのタスクに対処するための最新のツールを提供していないことに気がつきました。

アプリケーション開発者は、SQLではなくデータに関心を持つべき

ツールがより専門的になるにつれ、アプリケーション開発者は、グルーコードを書いてアプリケーションのレイヤーを組み合わせることに時間を費やすのではなく、組織に付加価値をもたらす機能の実装に集中することができるようになるはずです。

Prisma - Node.jsとTypeScriptのための完全なORM

Prismaは、従来のORMと同様の問題を解決しますが、これらの問題に対するアプローチは根本的に異なります。

https://www.youtube.com/watch?v=EEDGwLB55bI&feature=youtu.be

Prismaスキーマでのデータモデリング

Prismaを使用する場合、データモデルをPrisma schemaで定義します。ここでは、Prismaを使ったモデルのサンプルをご紹介します。

model Post {
  id        Int     @id @default(autoincrement())
  title     String
  content   String?
  published Boolean @default(false)
  author    User?   @relation(fields: [authorId], references: [id])
  authorId  Int?
}

model User {
  id    Int     @id @default(autoincrement())
  email String  @unique
  name  String?
  posts Post[]
}

これらのモデルは、それぞれ基礎となるデータベースのテーブルにマッピングされ、Prisma Clientによって提供され、生成されたデータアクセスAPIの基礎となります。PrismaのVS Codeエクステンションは、シンタックスハイライト、自動補完、クイックフィックス、その他多くの機能を提供し、データモデリングを魔法のように楽しいものにします✨。

Prisma Migrateによるデータベースのマイグレーション

Prisma Migrateは、Prismaのスキーマを、データベースのテーブルを作成・変更するために必要なSQLに変換します。Prisma Migrateは、Prisma CLIで提供されるprisma migrateコマンドで使用できます。

上記モデルの生成されたSQLを見るために展開する

SQLは、Prismaスキーマに基づいて自動的に生成されますが、特定のニーズに合わせて簡単にカスタマイズすることができます。このようなアプローチにより、Prisma Migrateは生産性とコントロールの素晴らしいバランスをとっています。

Prisma Clientによる直観的で型安全なデータベースアクセス

Prisma Clientを使用する主な利点は、開発者がオブジェクトで考えることができ、データを推論するための身近で自然な方法を提供することです。

Prisma Clientには、モデル・インスタンスの概念がありません。その代わりに、常にプレーンなJavaScriptオブジェクトを返すデータベースクエリを形成することができます。生成された型のおかげで、これらのクエリの自動補完も可能です。

また、TypeScript開発者のためのボーナスもあります。Prisma Clientのクエリの結果はすべて完全に型付けされます。実際、PrismaはTypeScript ORMの中で最も強力な型安全性を保証しています(TypeORMとの型安全性の比較はこちらをご覧ください)。

このコードブロックのタブをクリックして、いくつかのPrismaクライアントのクエリを見てみましょう(または、完全なAPIリファレンスを見てみましょう)。

// すべての投稿を検索
const posts = await prisma.post.findMany()
// すべてのpostsと紐づくauthorsを検索
const postsWithAuthors = await prisma.post.findMany({
  include: { author: true },
})
// userとpostを同時に生成
const userWithPosts: User = await prisma.user.create({
  data: {
    email: 'ada@prisma.io',
    name: 'Ada Lovelace',
    posts: {
      create: [{ title: 'Hello World' }],
    },
  },
})
// `@prisma`を含む全てのユーザーを検索
const users = await prisma.user.findMany({
  where: {
    email: { contains: '@prisma' },
  },
})
const postsByUser = await prisma.user.findUnique({ where: { email: 'ada@prisma.io' } }).posts()
// pagination
const posts = await prisma.post.findMany({
  take: 5,
  cursor: { id: 2 },
})

Prisma Studioによるモダンな管理インターフェース

Prismaには、phpMyAdminのような、データベースのための最新の管理インターフェイスも付属していますが、それは2021年のことです。

Prismaはどんなスタックにもフィットします

Prismaは、あなたが構築するアプリケーションに依存せず、あなたの好きな技術が何であれ、あなたのスタックをうまく補完します。お好みのフレームワークやライブラリとPrismaがどのように連携するかについては、こちらをご覧ください。

Next.js
人気の高いReactフレームワークで、データベースと連携する最も簡単な方法です。

GraphQL
Prismaは、GraphQLサーバーからデータベースへの問い合わせを簡単に行うことができます。

NestJS
この人気の高いサーバーサイドアプリケーションフレームワークとPrismaを統合します。

Express
最小限のウェブフレームワークで、データベースへの問い合わせを簡単に行うことができます。

Apollo
最も人気のあるGraphQLプラットフォームの1つとPrismaを統合します。

Hapi
バックエンドフレームワークで、簡単にデータベースに問い合わせができます。

これらの技術やその他の技術を使ってPrismaを試してみたい場合は、すぐに実行できるサンプルをチェックアウトすることができます。

ミッションクリティカルなアプリでの運用に対応

Prismaは過去3年間で大きく進化し、その成果を開発者コミュニティと共有できることを非常に嬉しく思っています。

GraphQLからデータベースへ

私たちは、開発者向けツールを作り始めて以来、この数年間でいくつもの主要な製品の反復とピボットを経験してきました。

Prismaは、GraphQLエコシステムの初期のイノベーターとしての経験と、小規模なスタートアップから大企業まで、あらゆる規模の企業のデータレイヤーについての洞察から得られた成果です。

3年前の最初のリリース以来、何千もの企業で使用されてきたPrismaは、実戦テストを経て、ミッションクリティカルなアプリケーションで使用する準備が整っています。

開発者への配慮

Prismaはオープンに開発されています。私たちの製品チームとエンジニアリングチームは、GitHubの問題を監視しており、通常、問題が発生してから24時間以内に対応しています。

新しいリリースは2週間ごとに行われ、新機能、バグフィックス、多くの改善が行われます。リリース後は、Youtubeでライブストリームを行い、新機能を紹介するとともに、コミュニティからのフィードバックを得ています。

また、Slack(※私はここからPrismaの@nikolasburk氏に記事の翻訳の許可を取らせて頂きました)、GitHub DiscussionsStackoverflowなど、開発者がPrismaに関する質問をした際には、専任のコミュニティサポートチームがサポートするようにしています。

ここでは、私たちのコミュニティを数字で紹介します。

何が? 何人?
初期リリース以降にクローズされたGitHubの課題数 2,5k
解決されたサポートリクエスト(GitHub、Slack、Stackoverflow、...) 3k
Prisma Slackのメンバー 40k
GitHubのコントリビューター(レポ全体) 300
GitHubのスター(10kに到達するために協力してください🌟) 9,9k
2021年にステッカーパックを出荷(ステッカーの注文はこちら) 50

2021年に起きた素晴らしい出来事を知りたい方は、こちらのブログ記事をご覧ください。Prismaの新機能とは?(Q1/21)

本番でPrismaを使用している企業

私たちは、あらゆる規模の企業が生産性を高め、製品をより早く出荷するためにPrismaがどのように役立っているかを目の当たりにしてきました。

これまでの歩みの中で、Adidas、HyreCar、Agora Systems、Labelboxなど多くの企業から、製品を進化させるための貴重なご意見をいただきました。私たちは、以下のような、最も革新的で独創的な技術を持つリーダーたちと仕事をすることができました。

Prismaがこれらの企業の生産性向上にどのように貢献したかを知りたい方は、以下の資料をご覧ください。

プロトタイピングから開発、生産まで

最高の開発者ツールとは、プロジェクトの複雑さが増しても、それに容易に対応できるものです。私たちがPrismaを設計したのは、まさにそのためです。

Prismaには、プロトタイピング、開発、デプロイメント、CI/CD、テストなど、開発ライフサイクルのすべての段階のワークフローが組み込まれています。これらのワークフローについては、ドキュメントや記事をチェックして、Prismaですべてのワークフローを実現する方法を学んでください。

Prismaでアプリケーションのライフサイクルについて学ぶための拡張
次世代のWebフレームワークはPrismaで構築されています。
特に、多くのフレームワークやライブラリの作者が、彼らのツールのデフォルトORMとしてPrismaを選択していることに、私たちは敬意を表します。ここでは、Prismaを採用している上位のフレームワークをご紹介します。

RedwoodJS: ReactとGraphQLをベースにしたフルスタックフレームワーク
Blitz。Next.jsをベースにしたフルスタックフレームワーク
KeystoneJS:ヘッドレスCMS
Wasp: ReactベースのフルスタックWebアプリ開発用DSL
Amplication: ReactとNestJSをベースにしたフルスタックアプリ構築のためのツールセット

オープンソース、そしてその先へ

私たちは、アプリケーション開発者の生活を向上させることに情熱を持ったチームを持つ、VCから出資された会社です。私たちはオープンソースのツールを作ることで旅を始めていますが、Prismaの長期的なビジョンは、「単なる」ORMを作ることよりもはるかに大きなものです。

最近開催されたエンタープライズイベントPrisma Meetupでは、私たちがアプリケーションデータプラットフォームと呼ぶこのビジョンを共有し始めました。

Prismaのビジョンは、Facebook、Twitter、Airbnbのような企業が使用しているカスタムデータアクセスレイヤーを民主化し、あらゆる規模の開発チームや組織が利用できるようにすることです。

このアイデアは、Facebook、Twitter、Airbnbのような企業が、データベースやその他のデータソースの上にカスタムデータアクセスレイヤーを構築し、アプリケーション開発者が必要なデータに安全かつ効率的にアクセスできるようにしたことに大きく影響されています。

Prismaの目標は、このカスタムデータアクセスレイヤーのアイデアを民主化し、あらゆる規模の開発チームや組織が利用できるようにすることです。

Prisma Data Platform

Custom・Data・Access・Layer

どのようなお手伝いができますか?

あなたの次のプロジェクトをPrismaで構築するお手伝いをします!。エンタープライズ製品の詳細や、お客様のスタックやビジョンにPrismaがどのように適合するかについては、お問い合わせください。

Prismaを使い始める

Prismaを使い始めるには様々な方法があります。

クイックスタート(5分)
デモのSQLiteデータベースに対して、Prisma Clientでデータベースクエリを送信する方法をご紹介します。

新しいプロジェクトをゼロから始める
既存のプロジェクトにPrismaを追加する

ORMのために来て、コミュニティのために残る💚。

Prismaを立ち上げた当初から、コミュニティは非常に重要でした。ミートアップやカンファレンスの開催、SlackやGitHubでのユーザー支援など、私たちは常に開発者コミュニティと密接な関係を保つよう努めています。ぜひ参加してみてください。