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
GraphQL 導入の反省と再挑戦 / jsconf jp 2021
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
izumin5210
November 27, 2021
Programming
9.6k
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
開発体験を左右するライブラリの API 設計 - GraphQL スキーマ構築ライブラリから考える #tskaigi
izumin5210
2
1.8k
izumin5210のプロポーザルのネタ探し #tskaigi_msup
izumin5210
2
870
AI Agent の開発と運用を支える Durable Execution #AgentsInProd
izumin5210
8
2.9k
AI Agent Tool のためのバックエンドアーキテクチャを考える #encraft
izumin5210
6
2.2k
Building AI Agents with TypeScript #TSKaigiHokuriku
izumin5210
6
1.8k
Web エンジニアが JavaScript で AI Agent を作る / JSConf JP 2025 sponsor session
izumin5210
4
3.4k
AI Coding Meetup #3 - 導入セッション / ai-coding-meetup-3
izumin5210
0
3.7k
Web フロントエンドエンジニアに開かれる AI Agent プロダクト開発 - Vercel AI SDK を観察して AI Agent と仲良くなろう! #FEC余熱NIGHT
izumin5210
3
1.3k
TypeScript を活かしてデザインシステム MCP を作る / #tskaigi_after_night
izumin5210
5
940
Other Decks in Programming
See All in Programming
Spec Driven Development | AI Summit Lisbon
danielsogl
PRO
0
210
Performance Engineering for Everyone
elenatanasoiu
0
230
AI 輔助遺留系統現代化的經驗分享
jame2408
1
1k
Honoでのサプライチェーン侵害対策 〜 3つのライブラリに学ぶ
yusukebe
7
1.4k
Oxlintのカスタムルールの現況
syumai
6
1.2k
決定論的オーケストレーションの設計と実装 / Design and Implementation of Deterministic Orchestration
nrslib
4
1.5k
フロントエンドとバックエンドで「1文字」を揃えよう
youkidearitai
PRO
0
750
AI駆動開発を妨げる技術的負債の解消アプローチ / ai-refactoring-approach
minodriven
15
7.2k
ADKを使って簡単にAIエージェントを作ってみよう
k1mu21
0
280
生成AI時代にこそ効くGo | Why Go Works in the Age of Generative AI
mom0tomo
8
3.3k
Skillsは効率化、Agentsは"自分の拡張"——Builder時代のエージェント編成(CC Night 2026)
wemra
1
170
jQueryをバージョンアップする前に使いたいjQuery Migrate
matsuo_atsushi
0
600
Featured
See All Featured
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
The Pragmatic Product Professional
lauravandoore
37
7.3k
Making the Leap to Tech Lead
cromwellryan
135
9.9k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
350
The Curse of the Amulet
leimatthew05
2
13k
Building the Perfect Custom Keyboard
takai
2
800
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.2k
sira's awesome portfolio website redesign presentation
elsirapls
0
290
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
210
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
310
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
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 ٕज़શൠʣʹ͍ͭͯ৭Μͳਓͱ͍ٞͨ͠Ͱ͢ʂͥͻདྷͯͶʂ