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
330
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.8k
結婚式の席札を手書きしたくなかったので技術で解決した話
sukechannnn
1
4.2k
統計学に入門したので確率変数/期待値/分散をなるべく分かりやすく説明してみる
sukechannnn
1
560
Featured
See All Featured
Docker and Python
trallard
45
3.6k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
1.1k
KATA
mclloyd
32
14k
Navigating Team Friction
lara
189
15k
Code Reviewing Like a Champion
maltzj
525
40k
The Language of Interfaces
destraynor
161
25k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Raft: Consensus for Rubyists
vanstee
140
7.1k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3.1k
How to Ace a Technical Interview
jacobian
279
23k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
53
2.9k
Site-Speed That Sticks
csswizardry
10
810
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エンジニア積極採用中です!!!