Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
NestJS と Hasura で実現する Production GraphQL
Search
kimujun
September 29, 2022
Programming
0
400
NestJS と Hasura で実現する Production GraphQL
NestJS meetup Online #1 by @kimujun
kimujun
September 29, 2022
Tweet
Share
More Decks by kimujun
See All by kimujun
Datasets for Critical Operations by Dataform
kimujun
0
240
飲食店データの分析事例とそれを支えるデータ基盤
kimujun
0
490
小規模に始めるデータメッシュとデータガバナンスの実践
kimujun
4
1.2k
Hasura の Subscription と向き合う
kimujun
0
1.3k
Other Decks in Programming
See All in Programming
Grafana:建立系統全知視角的捷徑
blueswen
0
190
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
320
tparseでgo testの出力を見やすくする
utgwkk
2
280
0→1 フロントエンド開発 Tips🚀 #レバテックMeetup
bengo4com
0
360
GISエンジニアから見たLINKSデータ
nokonoko1203
0
180
Pythonではじめるオープンデータ分析〜書籍の紹介と書籍で紹介しきれなかった事例の紹介〜
welliving
2
570
認証・認可の基本を学ぼう後編
kouyuume
0
250
Canon EOS R50 V と R5 Mark II 購入でみえてきた最近のデジイチ VR180 事情、そして VR180 静止画に活路を見出すまで
karad
0
140
Tinkerbellから学ぶ、Podで DHCPをリッスンする手法
tomokon
0
140
AI Agent Dojo #4: watsonx Orchestrate ADK体験
oniak3ibm
PRO
0
110
GoLab2025 Recap
kuro_kurorrr
0
780
The Art of Re-Architecture - Droidcon India 2025
siddroid
0
120
Featured
See All Featured
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
0
44
Become a Pro
speakerdeck
PRO
31
5.7k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.7k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
0
120
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
750
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.1k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
0
3.4k
Rails Girls Zürich Keynote
gr2m
95
14k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.8k
Context Engineering - Making Every Token Count
addyosmani
9
550
Reflections from 52 weeks, 52 projects
jeffersonlam
355
21k
Transcript
NestJS と Hasura で実現する Production GraphQL NestJS meetup Online #1
きむじゅん @kimujun (Twitter: @1130_kimu) • 株式会社 dinii ソフトウェアエンジニア (新卒入社) •
TypeScript/React/Hasura が好き • 趣味は食🍜、麻雀🀄などなど
• モバイルオーダーと POS レジを中心に飲食のインフラを作るスタートアップ ◦ ID の力で飲食業界の CRM を進化させようとしています •
TypeScript/React/React Native に特化したスタックで開発 ◦ 詳しくはこちらの記事で! • エンジニア全員がフルスタックエンジニア ダイニーとは
NestJS と Hasura で約 2 年間本番運用を行っている弊社が どのような工夫をしているのかお話しします
Topics 1. NestJS による GraphQL サーバー 2. Hasura と Remote
Schema 3. Remote Schema として接続する 4. まとめ
Topics 1. NestJS による GraphQL サーバー 2. Hasura と Remote
Schema 3. Remote Schema として接続する 4. まとめ
GraphQLModule • Apollo GraphQL サーバーの実装をラップしている • Main module で読み込むと GraphQL
サーバーになってくれる • introspection: true にすると /graphql で introspection ができる ◦ 単に introspection: true とするとセキュリティ上のリスク があります ◦ 認証のためのプラグイン を挟むことで回避できます
Code First と Schema First • Code First と Schema
First ◦ Code First → TypeScript の型定義からスキーマを生成 ◦ Schema First → SDL を書きリゾルバーを定義 ▪ フロント・バックでスキーマを事前に決めておけるメリット ◦ メルカリ Shops さんの記事に詳しいです • フルスタックな開発では Schema First のメリットが薄い ◦ 後述の通り Hasura と併用するに当たっても Code First の方が都合良い ◦ NestJS の Code First の書きやすさもメリット → ダイニーでは Code First を採用しています
Topics 1. NestJS による GraphQL サーバー 2. Hasura と Remote
Schema 3. Remote Schema として接続する 4. まとめ
Hasura とは • DB に直接接続し GraphQL エンドポイントを提供するミドルウェア ◦ スキーマからリゾルバーを自動で定義するので SDL
を用意する必要がない • マイグレーションの機能も持つ ◦ コンソールからテーブルを編集するとマイグレーションファイルを生成する ◦ ↑が便利 & メタデータの管理も楽なので基本は Hasura に任せたい • マイグレーションを任せると ORM との併用がちょっと大変 ◦ 後で説明します https://hasura.io/
Remote Schema • 指定した Hasura 外部の GraphQL Schema を取り込み、マージする機能 ◦
複雑なビジネスロジックをクライアントに持たせたくない場合 ◦ 重いクエリを Hasura に任せたくない場合 • マージは introspection で返ってきたスキーマを元に行う
Topics 1. NestJS による GraphQL サーバー 2. Hasura と Remote
Schema 3. Remote Schema として接続する 4. まとめ
NestJS サーバーを Hasura に接続 • NestJS による GraphQL サーバーを Remote
Schema に登録できる ◦ introspection の機能を持つため • Query も Mutation も難しい or パフォーマンスが必要なものは NestJS に投げるという使い分けができる ◦ Query → 集計など ◦ Mutation → 注文や会計など ダイニーのエンジニアリング 3カ条
開発の流れ 店舗作成を目的とした Mutation を 実装するフロー
課題 • TypeORM のスキーマ情報 (entity ファイル) と実際の DB の構成が乖離する ◦
TypeORM のマイグレーション機能を使わないため ◦ entity ファイルを手動で更新するので間違える ダイニーの対策 • CI で差分のチェックをする 1. Hasura によるマイグレーションを行う 2. TypeORM の migration:generate を行う 3. 差分が出なれけば Success, 出れば Fail とする
実際の CI の様子 Hasura 経由で shop テーブルに foo カラムを追加した場合。 entity
ファイルの更新をしていないためエラーが出て CI が落ちている
Topics 1. NestJS による GraphQL サーバー 2. Hasura と Remote
Schema 3. Remote Schema として接続する 4. まとめ
まとめ • NestJS と Hasura の組み合わせで本番運用しているよ ◦ Code First のやり方で
GraphQL サーバーを簡単に作れる NestJS の強み • スキーマの整合性には注意が必要 • NestJS 最高!