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
300
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
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
34
2.2k
Mobile First: as difficult as doing things right
swwweet
223
9.6k
The Pragmatic Product Professional
lauravandoore
33
6.6k
RailsConf 2023
tenderlove
30
1.1k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
Building Adaptive Systems
keathley
41
2.5k
YesSQL, Process and Tooling at Scale
rocio
172
14k
Bash Introduction
62gerente
611
210k
We Have a Design System, Now What?
morganepeng
52
7.5k
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エンジニア積極採用中です!!!