Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
GraphQL 導入の反省と再挑戦 / jsconf jp 2021
Search
izumin5210
November 27, 2021
Programming
9.7k
12
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
GraphQL 導入の反省と再挑戦 / jsconf jp 2021
izumin5210
November 27, 2021
More Decks by izumin5210
See All by izumin5210
コンパウンドプロダクト開発のためのローカルプロセスマネージャー再発明 #layerxgo
izumin5210
0
690
in-process GraphQL のすすめ #ginzajs
izumin5210
4
1.5k
開発体験を左右するライブラリの API 設計 - GraphQL スキーマ構築ライブラリから考える #tskaigi
izumin5210
2
2.2k
izumin5210のプロポーザルのネタ探し #tskaigi_msup
izumin5210
2
1.1k
AI Agent の開発と運用を支える Durable Execution #AgentsInProd
izumin5210
8
3.1k
AI Agent Tool のためのバックエンドアーキテクチャを考える #encraft
izumin5210
6
2.4k
Building AI Agents with TypeScript #TSKaigiHokuriku
izumin5210
6
1.8k
Web エンジニアが JavaScript で AI Agent を作る / JSConf JP 2025 sponsor session
izumin5210
4
3.6k
AI Coding Meetup #3 - 導入セッション / ai-coding-meetup-3
izumin5210
0
3.8k
Other Decks in Programming
See All in Programming
更なる可用性を求めて、5年間運用したKotlinのアプリケーションをGoでリプレイスする話
ken_tunc
0
360
Verilogで学ぶCPU自作入門.pdf
uyuki234
6
2.7k
App Intentsのビルドプロセスを支える技術
kntkymt
0
430
JRuby: Past, Present, and Future
headius
0
190
世界の中心で、AI(App Intents)をさけぶ ー App Intents中心設計の実践ガイド
touyou
0
660
wkhtmltopdfの次どうするか問題2026
willnet
2
1.6k
GitHubハンズオン講座 — 実務レベルのチーム開発のフローを身につけよう
junhat6
0
100
UnityでSystem.Net.WebSocketsなWebSocketサーバが動かないのでUnity Monoのコードを覗いてみた / about implementing websocket server with unity mono
drumath2237
1
350
TiDB Cloudのカスタムコントローラーによるオートスケール対応
takaidohigasi
0
130
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
17
15k
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
320
大喜利で理解するLLM as a Judge / Understanding LLM-as-a-Judge through Ogiri
rockname
0
160
Featured
See All Featured
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
Design in an AI World
tapps
1
330
Side Projects
sachag
456
43k
My Coaching Mixtape
mlcsv
0
320
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
Deep Space Network (abreviated)
tonyrice
0
320
We Have a Design System, Now What?
morganepeng
55
8.3k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
430
Transcript
©2021 Wantedly, Inc. GraphQL ಋೖͷলͱ࠶ઓ Sponsor LT JSConf JP 2021
2021-11-27 @izumin5210
©2021 Wantedly, Inc. @izumin5210 ‣ "SDITRVBE8BOUFEMZ *OD #BDLFOE 8FC'SPOUFOEͷ5FDI-FBEతͳ͜ͱ͍ͯ͠·͢
ද࡞ HSBQJ(PͷH31$TFSWFS༻ϚΠΫϩϑϨʔϜϫʔΫ 6*σβΠϯγεςϜͷ3FBDU࣮ͷઃܭ (SBQI2-(BUFXBZͷઃܭɾ࣮ ˡࠓ͜ͷʣ ‣ ͖ͳ5$QSPQPTBM&SSPS$BVTF IUUQTHJUIVCDPNUDQSPQPTBMFSSPSDBVTF ͍ͭͷ·ʹ͔4UBHFʹͳͬͯͨ
©2021 Wantedly, Inc. JavaScript and Wantedly https://speakerdeck.com/wantedly/for-engineers?slide=22
©2021 Wantedly, Inc. JavaScript and Wantedly όοΫΤϯυͰҰ෦ར༻ ʢQVQQFUFFSʹΑΔը૾ੜͳͲʣ ੈʹ͔Ε͍ͯΔ͕ɺ࠷৽ͷͷ/FYUKTʹҠߦ
👉 IUUQTEPDTXBOUFEMZEFW fi FMETBQQMJDBUJPOGSPOUFOEBSDIJUFDUVSF https://speakerdeck.com/wantedly/for-engineers?slide=22
©2021 Wantedly, Inc. JavaScript and Wantedly όοΫΤϯυͰҰ෦ར༻ ʢQVQQFUFFSʹΑΔը૾ੜͳͲʣ ੈʹ͔Ε͍ͯΔ͕ɺ࠷৽ͷͷ/FYUKTʹҠߦ
👉 IUUQTEPDTXBOUFEMZEFW fi FMETBQQMJDBUJPOGSPOUFOEBSDIJUFDUVSF https://speakerdeck.com/wantedly/for-engineers?slide=22 https://docs.wantedly.dev/fields/application/frontend-architecture
©2021 Wantedly, Inc. JavaScript and Wantedly https://speakerdeck.com/wantedly/for-engineers?slide=22
©2021 Wantedly, Inc. JavaScript and Wantedly https://speakerdeck.com/wantedly/for-engineers?slide=22 ࠓ͜Εͷ
©2021 Wantedly, Inc. GraphQL and Wantedly ࠷ॳͷ GraphQL ಋೖ ‣
2019͡Ί͝ΖͰɺWantedly Visit ͷاۀଆը໘ʹಋೖͨ͠ͷ͕࠷ॳ ‣ Web Frontend ʹ͓͚Δ՝Λղܾ͢ΔͨΊʹಋೖ - Web Frontend Ͱܕ͖ͷεΩʔϚͰɺੜ࢈ੑߴ͘։ൃ͍ͨ͠ - ෳϚΠΫϩαʔϏε͔ΒͷσʔλΛू͠ɺϑϩϯτΤϯυͰ͍͍͢ܗʹม͍ͨ͠ ‣ ͍ΘΏΔ “BFF” తͳΘΕํ - ϑϩϯτΤϯυدΓͷ։ൃऀ͕εΩʔϚઃܭɾ࣮Λ͓͜ͳ͏ - ʢϞόΠϧͰͬͯͳ͔ͬͨͷɺ୯७ʹݕূͰ͖ͯͳ͔ͬͨͷ͋Δʣ
©2021 Wantedly, Inc. GraphQL and Wantedly Web Frontend GraphQL server
microservice microservice microservice JSON / HTTP Protobuf / gRPC
©2021 Wantedly, Inc. GraphQL and Wantedly ৼΓฦΓ - ࠷ॳͷ GraphQL
ಋೖ ‣ Web Frontend ʹ͓͚Δੜ࢈ੑ͔֬ʹ্ͨ͠ - εΩʔϚ͔Βਖ਼͍͠ܕ͕ੜ͞Εͯศར - ঢ়ଶཧ Apollo Client ʹͤΔ͜ͱ͕Ͱ͖ͨ ‣ ҰํͰɺΞʔΩςΫνϟશମͱͯ͠࠷దͳܗʹͳ͔ͬͨผ ‣ Wantedly People(mobile app), Pro fi le ଆͷνʔϜ͕ BFF Λར༻͢Δͱ͖ʹ͕ݦࡏԽͨ͠
©2021 Wantedly, Inc. Wantedly People(mobile app) Architecture Mobile app gRPC
server microservice microservice microservice JSON / HTTP Protobuf / gRPC grpc-gateway gRPC server grpc-gateway microservice microservice
©2021 Wantedly, Inc. Wantedly People(mobile app) Architecture gRPC server microservice
microservice microservice JSON / HTTP Protobuf / gRPC grpc-gateway gRPC server grpc-gateway microservice microservice Mobile app ‣ όοΫΤϯυͱϞόΠϧ͕ڠಇͯ͠εΩʔϚΛઃܭ͢Δ - ओಋόοΫΤϯυʹͳΔ͜ͱଟ͍ - ϚΠΫϩαʔϏεɾΞʔΩςΫνϟͰɺόοΫΤϯυͷ γεςϜؒ௨৴εΩʔϚ͕ॏཁ ‣ Protobuf IDL ͔Β OpenAPI ͷεΩʔϚੜͰ͖ΔͨΊɺ ϞόΠϧଆͰεΩʔϚΛ׆༻Մೳ Protobuf ʹΑΔεΩʔϚۦಈ։ൃ
©2021 Wantedly, Inc. Wantedly People(mobile app) Architecture gRPC server microservice
microservice microservice JSON / HTTP Protobuf / gRPC grpc-gateway gRPC server grpc-gateway microservice microservice Mobile app ‣ όοΫΤϯυͱϞόΠϧ͕ڠಇͯ͠εΩʔϚΛઃܭ͢Δ - ओಋόοΫΤϯυʹͳΔ͜ͱଟ͍ - ϚΠΫϩαʔϏεɾΞʔΩςΫνϟͰɺόοΫΤϯυͷ γεςϜؒ௨৴εΩʔϚ͕ॏཁ ‣ Protobuf IDL ͔Β OpenAPI ͷεΩʔϚੜͰ͖ΔͨΊɺ ϞόΠϧଆͰεΩʔϚΛ׆༻Մೳ Protobuf ʹΑΔεΩʔϚۦಈ։ൃ https://www.wantedly.com/companies/wantedly/post_articles/309513
©2021 Wantedly, Inc. Wantedly People(mobile app) Architecture Mobile app gRPC
server microservice JSON / HTTP Protobuf / gRPC grpc-gateway microservice Web Frontend GraphQL server microservice microservice
©2021 Wantedly, Inc. Multi-application and Microservices and GraphQL Mobile app
gRPC - ʮͲ͕ͬͪ࠷৽͚ͩͬʁʯ ‣ Protobuf to GraphQL ͷมίʔυΊͬͪΌॻ͘ϋϝʹͳΔ GraphQL εΩʔϚΛ࣋ͭ Protobuf εΩʔϚΛ࣋ͭ
©2021 Wantedly, Inc. Mobile app gRPC server microservice JSON /
HTTP Protobuf / gRPC grpc-gateway microservice GraphQL server microservice microservice Web Frontend ͦͦ… ‣ GraphQL ಋೖͷେ͖ͳϝϦοτͱͯ͋ͬͨ͠ͷ… - ʮ ܕͷ͋ΔεΩʔϚͱ͔ͦ͜Βͷ࣮ͷੜʯ ‣ Protobuf Λར༻͢ΕɺࣅͨΑ͏ͳ͜ͱͰ͖ͯ͠·͏
©2021 Wantedly, Inc. Reconsider “GraphQL” GraphQL ΛೖΕΔతΛ࠶ߟ͢Δ ‣ GraphQL ͷϝϦοτ࠶ߟ
- ܕͷ͋ΔεΩʔϚͱɺ͔ͦ͜Βͷίʔυੜ - ϑΟʔϧυɾؔ࿈ΦϒδΣΫτΛબతʹɾॊೈʹऔಘͰ͖ΔΠϯλϑΣʔε - σʔλܗࣜɾ௨৴ํࣜͱʹҰൠతͳϑΥʔϚοτʢJSON over HTTPʣͳͷͰɺͲ͜Ͱಈ͘ ‣ Wantedly ͰकΓ͍ͨͱ͜Ζ - όοΫΤϯυͷγεςϜؒ௨৴ͰεΩʔϚۦಈ։ൃ͍ͨ͠ʢطଘͷࢿ࢈Λ͍͍ͨͷͰɺgRPC ͍͍ͨʣ - 1ͭͷεΩʔϚΛઈରతͳιʔεͱͯ͠ѻ͍͍ͨ
©2021 Wantedly, Inc. Reconsider “GraphQL” GraphQL ΛೖΕΔతΛ࠶ߟ͢Δ ‣ GraphQL ͷϝϦοτ࠶ߟ
- ܕͷ͋ΔεΩʔϚͱɺ͔ͦ͜Βͷίʔυੜ - ϑΟʔϧυɾؔ࿈ΦϒδΣΫτΛબతʹɾॊೈʹऔಘͰ͖ΔΠϯλϑΣʔε - σʔλܗࣜɾ௨৴ํࣜͱʹҰൠతͳϑΥʔϚοτʢJSON over HTTPʣͳͷͰɺͲ͜Ͱಈ͘ ‣ Wantedly ͰकΓ͍ͨͱ͜Ζ - όοΫΤϯυͷγεςϜؒ௨৴ͰεΩʔϚۦಈ։ൃ͍ͨ͠ʢطଘͷࢿ࢈Λ͍͍ͨͷͰɺgRPC ͍͍ͨʣ - 1ͭͷεΩʔϚΛઈରతͳιʔεͱͯ͠ѻ͍͍ͨ Protobuf IDL Ͱهड़͞ΕͨεΩʔϚʹυϝΠϯ͕ࣝө͞Ε͍ͯΔ υΩϡϝϯτ͕ࣗવݴޠͰهड़͞Ε͍ͯΔ wantedly/apis ͱ͍͏ϦϙδτϦͰதԝཧ͞Ε͓ͯΓɺ ͔ͦ͜Β֤ݴޠ࣮͕ࣗಈੜ͞ΕΔ ͜ͷϦϙδτϦʹ͋ΒΏΔ͕ࣝूੵ͞ΕɺϓϩμΫτ։ൃΛՃ͍ͤͯ͞Δ ʢৄ͘͠ʮProtocol Buffers ʹΑΔϓϩμΫτ։ൃͷεεϝ - API ։ൃͷࠓੲ - | Wantedly Engineer BlogʯΛࢀরʣ ʢ…ͷͰɺεΩʔϚ̎ॏཧʹΑΓ৴པੑ͕طଘ͞ΕΔͷࠔΔʣ
©2021 Wantedly, Inc. Reconsider “GraphQL” GraphQL ΛೖΕΔతΛ࠶ߟ͢Δ ‣ GraphQL ͷϝϦοτ࠶ߟ
- ܕͷ͋ΔεΩʔϚͱɺ͔ͦ͜Βͷίʔυੜ - ϑΟʔϧυɾؔ࿈ΦϒδΣΫτΛબతʹɾॊೈʹऔಘͰ͖ΔΠϯλϑΣʔε - σʔλܗࣜɾ௨৴ํࣜͱʹҰൠతͳϑΥʔϚοτʢJSON over HTTPʣͳͷͰɺͲ͜Ͱಈ͘ ‣ Wantedly ͰकΓ͍ͨͱ͜Ζ - όοΫΤϯυͷγεςϜؒ௨৴ͰεΩʔϚۦಈ։ൃ͍ͨ͠ʢطଘͷࢿ࢈Λ͍͍ͨͷͰɺgRPC ͍͍ͨʣ - 1ͭͷεΩʔϚΛઈରతͳιʔεͱͯ͠ѻ͍͍ͨ
©2021 Wantedly, Inc. Wantedly ͷϓϩμΫτੑ࣭ https://speakerdeck.com/wantedly/for-engineers?slide=22
©2021 Wantedly, Inc. Wantedly ͷϓϩμΫτੑ࣭ https://speakerdeck.com/wantedly/for-engineers?slide=22 ‣ Web ͱϞόΠϧͰυϝΠϯઃܭಉ͡ -
ϓϩμΫτΛލ͍Ͱʢڞ௨෦ʣಉ͡ ‣ ΞϓϦɾػೳʹΑͬͯใྔͷଟՉ͕͋Δ - e.g. ϢʔβଆϓϩϑΟʔϧͱاۀଆϓϩϑΟʔϧʢεΧτૹΔͱ ͖ʹݟΔͭʣใྔ͕ҧ͏
©2021 Wantedly, Inc. Reconsider “GraphQL” GraphQL ΛೖΕΔతΛ࠶ߟ͢Δ ‣ GraphQL ͷϝϦοτ࠶ߟ
• ܕͷ͋ΔεΩʔϚͱɺ͔ͦ͜Βͷίʔυੜ - ϑΟʔϧυɾؔ࿈ΦϒδΣΫτΛબతʹɾॊೈʹऔಘͰ͖ΔΠϯλϑΣʔε - σʔλܗࣜɾ௨৴ํࣜͱʹҰൠతͳϑΥʔϚοτʢJSON over HTTPʣͳͷͰɺͲ͜Ͱಈ͘ ‣ Wantedly ͰकΓ͍ͨͱ͜Ζ • όοΫΤϯυͷγεςϜؒ௨৴ͰεΩʔϚۦಈ։ൃ͍ͨ͠ʢطଘͷࢿ࢈Λ͍͍ͨͷͰɺgRPC ͍͍ͨʣ • 1ͭͷεΩʔϚΛઈରతͳιʔεͱͯ͠ѻ͍͍ͨ
©2021 Wantedly, Inc. GraphQL Gateway ߏ Visit app(iOS) microservice JSON
/ HTTP Protobuf / gRPC Web Frontend (user) GraphQL gateway microservice microservice Web Frontend (client) Visit app(Android)
©2021 Wantedly, Inc. GraphQL Gateway ߏ Visit app(iOS) microservice JSON
/ HTTP Protobuf / gRPC Web Frontend (user) GraphQL gateway microservice microservice Web Frontend (client) Visit app(Android) 1ͭͷ GraphQL εΩʔϚΛશϑϩϯτΤϯυͰڞ༗͢Δ͜ͱͰɺ ࣅͨΑ͏ͳ API Λྔ࢈͢ΔίετΛݮΒ͢ ʢ͋Δ͍ɺෆཁͳϑΟʔϧυΛऔಘͯ͠༨ܭͳϨΠςϯγ͕ൃੜ͢ΔͷΛ͙ʣ
©2021 Wantedly, Inc. GraphQL Gateway ߏ Visit app(iOS) microservice JSON
/ HTTP Protobuf / gRPC Web Frontend (user) GraphQL gateway microservice microservice Web Frontend (client) Visit app(Android) υϝΠϯϩδοΫόοΫΤϯυʹ࣮͞ΕΔ ʢෳͷϑϩϯτΤϯυͰಉ͡ϩδοΫΛ࣮͢ΔͷΛ͙ʣ ใͷू GraphQL gateway Ͱ1ͭͷάϥϑΛ৴͢Δ͚ͩͳͷͰɺ֤ϑϩϯ τΤϯυ͚ͷ API Λߏங͢Δඞཁͳ͍ ʢbelongs to user ͳΦϒδΣΫτʹ user Λೖ͢Δॲཧͱ͔ॻ͖͕͚ͪͩͲɺ ͦΕΛ͠ͳͯ͘ྑ͘ͳΔʣ
©2021 Wantedly, Inc. GraphQL Gateway ߏ Visit app(iOS) microservice JSON
/ HTTP Protobuf / gRPC Web Frontend (user) GraphQL gateway microservice microservice Web Frontend (client) Visit app(Android) .proto le .proto le .proto le GraphQL schema .proto ͔Β GraphQL schema ͱ࣮Λੜ͢ΔπʔϧΛࣗ࡞͠ɺ Schema ཧͱ GraphQL server ࣮ͷίετΛݮΒ͢
©2021 Wantedly, Inc. graphql-gateway ‣ Protobuf ʹ͋ΔใͳΔ͘ GraphQL ʹҾ͖ܧ͙ -
ίϝϯτͪΖΜ͢ʢGraphiQL ΫϥΠΞϯτଆͷ VSCode ্ͰݟΕͯศརʣ - Nullability - (gRPC ʹ non-null Λએݴ͢ΔΈඪ४Ͱଘࡏ͠ͳ͍͕ɺίϝϯτ extension ʹͦΕΛهड़͠Α͏ʂͱ͍͏نΛಋೖ͍ͯ͠Δ → https://google.aip.dev/203ʣ - Abstraction: oneof -> union ‣ ΦϒδΣΫτ Protobuf ͔Βੜ͠ɺΦϒδΣΫτͱΦϒδΣΫτͷଓ TypeScript Ͱهड़ ‣ কདྷతʹ։ൃͷεέʔϥϏϦςΟ୲อͷͨΊʹ GraphQL Federation ͱ͔ͨ͘͠ͳΓͦ͏ ‣ ͱΓ͋͑ͣ1ՕॴʹೖΕͯΈͯݕূ - ΞʔΩςΫνϟʹେ͖ͳมߋΛೖΕΔͱ͖ఫୀՄೳʹ͓ͯ͘͠ͷ͕େ ‣ Node.js (TypeScript + GraphQL Nexus) - Go Rust બࢶͱ͕ͯ͋ͬͨ͠ɺϦϑΝϨϯε࣮Ͱ͋Δ graphql-js Λ͏͜ͱΛ༏ઌ - ͋ͱͰม͑ͨ͘ͳͬͯɺGraphQL ͷεΩʔϚ͕कΕ͍ͯΕͳΜͱ͔ͳΔ - Apollo Server ͳͲͱΓ͋͑ͣΘͳ͍ʢඞཁʹͳΓͦ͏ͳλΠϛϯάͰߟ͑Δʣ - Envelop ͍͍ͨ https://www.envelop.dev/ ‣ Resolver Ͱ gRPC Λୟ͘ - औಘܥجຊతʹ DataLoader Λܦ༝͠ɺ͍ΘΏΔ N+1 Λ͙ - όοΫΤϯυ͕ FieldMask pattern ʹରԠ͍ͯ͠Δ߹ɺGraphQL ΫΤϦ͔Βݡ͘ FieldMask ΛΈཱͯΔ
©2021 Wantedly, Inc. graphql-gateway ‣ Protobuf ʹ͋ΔใͳΔ͘ GraphQL ʹҾ͖ܧ͙ -
ίϝϯτͪΖΜ͢ʢGraphiQL ΫϥΠΞϯτଆͷ VSCode ্ͰݟΕͯศརʣ - Nullability - (gRPC ʹ non-null Λએݴ͢ΔΈඪ४Ͱଘࡏ͠ͳ͍͕ɺίϝϯτ extension ʹͦΕΛهड़͠Α͏ʂͱ͍͏نΛಋೖ͍ͯ͠Δ → https://google.aip.dev/203ʣ - Abstraction: oneof -> union ‣ ΦϒδΣΫτ Protobuf ͔Βੜ͠ɺΦϒδΣΫτͱΦϒδΣΫτͷଓ TypeScript Ͱهड़ ‣ কདྷతʹ։ൃͷεέʔϥϏϦςΟ୲อͷͨΊʹ GraphQL Federation ͱ͔ͨ͘͠ͳΓͦ͏ ‣ ͱΓ͋͑ͣ1ՕॴʹೖΕͯΈͯݕূ - ΞʔΩςΫνϟʹେ͖ͳมߋΛೖΕΔͱ͖ఫୀՄೳʹ͓ͯ͘͠ͷ͕େ ‣ Node.js (TypeScript + GraphQL Nexus) - Go Rust બࢶͱ͕ͯ͋ͬͨ͠ɺϦϑΝϨϯε࣮Ͱ͋Δ graphql-js Λ͏͜ͱΛ༏ઌ - ͋ͱͰม͑ͨ͘ͳͬͯɺGraphQL ͷεΩʔϚ͕कΕ͍ͯΕͳΜͱ͔ͳΔ - Apollo Server ͳͲͱΓ͋͑ͣΘͳ͍ʢඞཁʹͳΓͦ͏ͳλΠϛϯάͰߟ͑Δʣ - Envelop ͍͍ͨ https://www.envelop.dev/ ‣ Resolver Ͱ gRPC Λୟ͘ - औಘܥجຊతʹ DataLoader Λܦ༝͠ɺ͍ΘΏΔ N+1 Λ͙ - όοΫΤϯυ͕ FieldMask pattern ʹରԠ͍ͯ͠Δ߹ɺGraphQL ΫΤϦ͔Βݡ͘ FieldMask ΛΈཱͯΔ ࣗຫ͍͍ͨͨ͜͠͠ͱແݶʹ͋Δ͕͕࣌ؒΓͳ͍
©2021 Wantedly, Inc. graphql-gateway ‣ Protobuf ʹ͋ΔใͳΔ͘ GraphQL ʹҾ͖ܧ͙ -
ίϝϯτͪΖΜ͢ʢGraphiQL ΫϥΠΞϯτଆͷ VSCode ্ͰݟΕͯศརʣ - Nullability - (gRPC ʹ non-null Λએݴ͢ΔΈඪ४Ͱଘࡏ͠ͳ͍͕ɺίϝϯτ extension ʹͦΕΛهड़͠Α͏ʂͱ͍͏نΛಋೖ͍ͯ͠Δ → https://google.aip.dev/203ʣ - Abstraction: oneof -> union ‣ ΦϒδΣΫτ Protobuf ͔Βੜ͠ɺΦϒδΣΫτͱΦϒδΣΫτͷଓ TypeScript Ͱهड़ ‣ কདྷతʹ։ൃͷεέʔϥϏϦςΟ୲อͷͨΊʹ GraphQL Federation ͱ͔ͨ͘͠ͳΓͦ͏ ‣ ͱΓ͋͑ͣ1ՕॴʹೖΕͯΈͯݕূ - ΞʔΩςΫνϟʹେ͖ͳมߋΛೖΕΔͱ͖ఫୀՄೳʹ͓ͯ͘͠ͷ͕େ ‣ Node.js (TypeScript + GraphQL Nexus) - Go Rust બࢶͱ͕ͯ͋ͬͨ͠ɺϦϑΝϨϯε࣮Ͱ͋Δ graphql-js Λ͏͜ͱΛ༏ઌ - ͋ͱͰม͑ͨ͘ͳͬͯɺGraphQL ͷεΩʔϚ͕कΕ͍ͯΕͳΜͱ͔ͳΔ - Apollo Server ͳͲͱΓ͋͑ͣΘͳ͍ʢඞཁʹͳΓͦ͏ͳλΠϛϯάͰߟ͑Δʣ - Envelop ͍͍ͨ https://www.envelop.dev/ ‣ Resolver Ͱ gRPC Λୟ͘ - औಘܥجຊతʹ DataLoader Λܦ༝͠ɺ͍ΘΏΔ N+1 Λ͙ - όοΫΤϯυ͕ FieldMask pattern ʹରԠ͍ͯ͠Δ߹ɺGraphQL ΫΤϦ͔Βݡ͘ FieldMask ΛΈཱͯΔ ότϧ͍ͨ͠Λฉ͖͍ͨɾ͍ٞͨ͜͠ͱ͕͋ΔਓΛฉ͖ʹདྷ͍ͯͩ͘͞ʂ ʢSpatial Chat ʹ͍·͢ʣ https://www.wantedly.com/projects/748998
©2021 Wantedly, Inc. ·ͱΊɾ·ͳͼ ‣ ٕज़ͷಋೖɺԿͷΛղܾ͢Δͷ͕తͳͷ͔Λҙࣝ͠Α͏ - ʮѱ͘ͳͬͨʂΊΔʂʯͰͳ͘ɺ݁ہʮԿΛղܾͨͯ͘͠ʯʮԿͱίϯϑϦΫτ͍ͯ͠Δͷ͔ʯΛߟ͑Δ ‣ ͱ͍͑ఫୀ͢Δ༐ؾେࣄ
- େ͖ͳٕज़ಋೖɺఫୀ͍͢͠Α͏ʹখ͘͢͢͞ΊΔͷϙΠϯτ - ࣮ڥͰಈ͔͞ͳ͍ͱΘ͔Βͳ͍͜ͱ͋Δ ‣ GraphQL (ͱ͍͏͔ API ٕज़શൠʣʹ͍ͭͯ৭Μͳਓͱ͍ٞͨ͠Ͱ͢ʂͥͻདྷͯͶʂ