Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Kotlin + DGS で始めるスキーマファーストな GraphQL サーバー開発
Search
Yosuke Obata
March 13, 2024
0
230
Kotlin + DGS で始めるスキーマファーストな GraphQL サーバー開発
サーバーサイドKotlin LT大会 vol.11 の発表資料です!
https://server-side-kotlin-meetup.connpass.com/event/309183/
Yosuke Obata
March 13, 2024
Tweet
Share
More Decks by Yosuke Obata
See All by Yosuke Obata
自動E2Eテストを活用した デプロイフロー改善
sukechannnn
6
1.5k
結婚式の席札を手書きしたくなかったので技術で解決した話
sukechannnn
1
4k
統計学に入門したので確率変数/期待値/分散をなるべく分かりやすく説明してみる
sukechannnn
1
490
Featured
See All Featured
Fantastic passwords and where to find them - at NoRuKo
philnash
50
2.8k
How To Stay Up To Date on Web Technology
chriscoyier
788
250k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
37
1.8k
Designing for humans not robots
tammielis
249
25k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
Building an army of robots
kneath
302
42k
Adopting Sorbet at Scale
ufuk
73
9k
Music & Morning Musume
bryan
46
6.1k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
The Cult of Friendly URLs
andyhume
78
6k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
6.9k
Transcript
Kotlin + DGS で始める スキーマファーストな GraphQL サーバー開発 Server-Side Kotlin meetup
2024/03/08 @sukechannnn
自己紹介 小幡 洋介 (@sukechannnn) アルダグラム EM & PdM • 2022年12月にアルダグラムにジョイン
• Kotlin 歴は10ヶ月 ◦ 新規プロダクトを Kotlin + GraphQL で開発 ◦ Rails × React で GraphQL な開発してきました
KANNA(カンナ) は、 建設業、不動産業、製造業など、 世界中のノンデスクワーク業界における 現場の生産性アップを実現する「プロジェクト管理アプリ」です。 事務作業や移動、コミュニケーションの手間を カンナのように削り、作業の生産性を最大化します。 スマホでの使いやすさが支持され、 業界・国境を越えて高い評価をいただいております。 PRODUCT
PRODUCT Kotlin + GraphQL で開発してる CQRS で イベントソーシングなプロダクトです
Kotlin + DGS でスキーマファーストなGraphQL開発の良いところ • DGSとは • スキーマファーストで開発をするための支援機能がいい感じ • Relay-style
cursor pagination が簡単に定義できる • GraphQL クライアントを graphql.schema から自動生成できる • テスト実行がしやすい便利機能がある 今日話すこと
Netflix DGS (Domain Graph Service) Framework とは、 • Netflixによって開発されているGraphQLのフレームワーク •
GraphQL Java がベース • Spring Boot でスキーマベースな開発ができる • マイクロサービスの実装をすることを念頭に作られている • 外部GraphQLサーバー用クライアント生成をサポート • もちろんモノリシックなサーバーとして開発することも可能 • Kotlin にも対応してる!しかもより便利に使える! DGSとは
スキーマを定義すると スキーマファーストで開発をするための支援機能がいい感じ
こんなデータクラスが生成され スキーマファーストで開発をするための支援機能がいい感じ
こんな感じで実装できます! スキーマファーストで開発をするための支援機能がいい感じ
GraphQL で利用するデータクラスの Nullability をより適切に扱うこともできます(まだ Experimental ですが) GraphQL ではクライアント側で取得する field を自由に選択できます。つまり、Kotlin
でデータを返そうとした時にデ ータクラスの一部のプロパティが欠落した状態が発生し得ます。そのため、単純に Kotlin のデータクラスの全てのプロ パティを non-null として定義することができません。 generateKotlinNullableClasses = true を追加すると、そこらへんの取り回しを考慮したクラスを生成してくれます。 スキーマファーストで開発をするための支援機能がいい感じ
スキーマベースで開発する時に面倒なのが Pagination Relay-style cursor pagination が簡単に定義できる
スキーマベースで開発する時に面倒なのが Pagination Relay-style cursor pagination が簡単に定義できる DGS なら @connection ディレクティブを
付けるだけ
外部 GraphQL の graphql.schema を使ってクライアントを自動生成できます (ただ、書き方にけっこうクセがあります...) GraphQL クライアントを graphql.schema から自動生成できる
と思っていたら、Kotlin で GQL っぽく書けるオプションがありました! まだちゃんと試せていないので、改めて試したらブログ書こうと思います GraphQL クライアントを graphql.schema から自動生成できる
DgsQueryExecutor というクラスがあって、GraphQL 実行後の結果を簡単に検証できる テスト実行がしやすい便利機能がある
Kotlin + DGS でスキーマファーストなGraphQL開発の良いところ • DGSを使うとスキーマ駆動開発する上で面倒なところがサポートされてる • 外部 GraphQL へのリクエストもスキーマを読み取っていい感じにできる
• サーバーサイド、サーバー間、Webフロント、アプリとスキーマベースで 設計&議論しながら開発することで、実装開始後の齟齬を減らせる より詳しい内容は以下の記事をご覧ください! https://zenn.dev/aldagram_tech/articles/0d43033077f595 まとめ
べんり!
Kotlinエンジニア積極採用中です!!!