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
310
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.7k
結婚式の席札を手書きしたくなかったので技術で解決した話
sukechannnn
1
4.1k
統計学に入門したので確率変数/期待値/分散をなるべく分かりやすく説明してみる
sukechannnn
1
540
Featured
See All Featured
Producing Creativity
orderedlist
PRO
346
40k
Stop Working from a Prison Cell
hatefulcrawdad
270
20k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.1k
Art, The Web, and Tiny UX
lynnandtonic
299
21k
Optimizing for Happiness
mojombo
379
70k
The Straight Up "How To Draw Better" Workshop
denniskardys
233
140k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.5k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Reflections from 52 weeks, 52 projects
jeffersonlam
351
20k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.3k
How STYLIGHT went responsive
nonsquared
100
5.6k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
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エンジニア積極採用中です!!!