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
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Java REST API Framework Comparison - PWX 2021
mraible
31
8.6k
Code Review Best Practice
trishagee
68
18k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
29
9.5k
The Art of Programming - Codeland 2020
erikaheidi
54
13k
Speed Design
sergeychernyshev
30
960
Building Better People: How to give real-time feedback that sticks.
wjessup
368
19k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
52
2.7k
Making the Leap to Tech Lead
cromwellryan
133
9.3k
YesSQL, Process and Tooling at Scale
rocio
172
14k
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エンジニア積極採用中です!!!