Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Prisma を活⽤した TypeScript チーム開発

SansanTech
September 12, 2023

Prisma を活⽤した TypeScript チーム開発

■イベント
TypeScriptを活用した型安全なチーム開発
https://sansan.connpass.com/event/292695/

■登壇概要
タイトル:Prisma を活⽤した TypeScript チーム開発
登壇者:技術本部 Digitization部 データ化グループ 湯村 直樹

■Digitization部 エンジニア 採用情報
https://media.sansan-engineering.com/digitization

SansanTech

September 12, 2023
Tweet

More Decks by SansanTech

Other Decks in Technology

Transcript

  1. Prisma とは? - Prisma は ORM - Prisma のスキーマを single

    source of truth として、アプリケーションの モデルの型とデータベースのマイグレーションファイルを⽣成できる。
  2. Prisma は next-generation ORM - Prisma は従来の ORM とは異なるデータマッパー (※)

    - アプリケーションのモデルと DB のスキーマのマッピングは、マッピン グ⽤のクラスではなく、Schema から⽣成された Prisma のクライアン トが⾏う。 - アプリケーションのモデルはクラスで定義していたのに対して、Prisma では TypeScript の型が⽣成される。 - これによって型安全性を得ることができる。 (※) Is Prisma an ORM? https://www.prisma.io/docs/concepts/overview/prisma-in-your-stack/is-prisma-an-orm
  3. 改めて Prisma が従来の ORM とどう違うのか - Prisma は従来の ORM とは異なるデータマッパー

    (※) - アプリケーションのモデルと DB のスキーマのマッピングは、マッピン グ⽤のクラスではなく、Schema から⽣成された Prisma のクライアン トが⾏う。 - アプリケーションのモデルはクラスで定義していたのに対して、Prisma では TypeScript の型が⽣成される。 - Prisma によって⽣成された型と Prisma Client の関数を再実装している ことになるのでは? (※) Is Prisma an ORM? https://www.prisma.io/docs/concepts/overview/prisma-in-your-stack/is-prisma-an-orm
  4. Prisma Client Extensions - model - アプリケーションのモデルにメソッドを定義できる。 - client -

    Prisma Client にメソッドを定義できる。 - query - Prisma Client のクエリを加⼯できる。 - result - Prisma Client の返すオブジェクトにメソッドを定義できる。
  5. Prisma Client Extensions まとめ - データの変換処理を⾏わず、型安全にビジネスロジックを実装できる。 - $allModels と $allOperations

    を利⽤して、モデルやオペレーションをま たいだ共通処理も実装できる。 - 複数のモデルが関連する処理を書きにくい。 - 関連するモデルを都度 DB から引き直す。 - Prisma.defineExtension を返す関数の引数に関連するモデルを渡す。 - Prisma 特有の知識が求められる。
  6. 認証基盤で採⽤したアプローチ - クラスを利⽤した Data Mapper のような考え⽅でプレーンなオブジェ クトを利⽤する。 - クラスに変換する必要がないので、データの取得は直接 Prisma

    Client を利⽤する。 - データの完全性をビジネスロジックを扱うモジュールで担保する。 - ビジネスロジックを扱うモジュールで⽣成されたオブジェクトを完全な データとして信頼する。 - 状態ごとに型を分けると、状態ごとのロジックを持たせやすい。 - コンパイル時に意図しない状態に気づくことができる。
  7. [補⾜] 共通のクエリを実装するには? - satisfies (※) - ビルダーパターン (※) How TypeScript

    4.9 `satisfies` Your Prisma Workflows https://www.prisma.io/blog/satisfies-operator-ur8ys8ccq7zb
  8. まとめ - 継続的にチーム開発を⾏うためにはデータの完全性を保つ仕組みが必 要。 - TypeScript と Prisma では様々なアプローチが可能。 -

    重要なのはどのパターンを採⽤するかではなく、重要な原則を守るため の仕組み、共通認識を持つこと。