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
670
in-process GraphQL のすすめ #ginzajs
izumin5210
4
1.5k
開発体験を左右するライブラリの API 設計 - GraphQL スキーマ構築ライブラリから考える #tskaigi
izumin5210
2
2.1k
izumin5210のプロポーザルのネタ探し #tskaigi_msup
izumin5210
2
1.1k
AI Agent の開発と運用を支える Durable Execution #AgentsInProd
izumin5210
8
3.1k
AI Agent Tool のためのバックエンドアーキテクチャを考える #encraft
izumin5210
6
2.3k
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
AI に Inclusive UI を書かせよう — Design Rules Skill で Compose UI を作り直す
theoriatec2024
1
480
新人はどこまで自力でやり、どこからAIに頼るべきか/エンジニア育成に向き合う_先輩たちの悩みと知見共有会
toppan_digital_dev
1
610
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
190
kubernetes コンポーネント開発入門 / 新卒N年目の勉強会&交流会!〜〇〇への誘い〜 #n_study
mazrean
0
220
From 6 People Classroom Meetup to 100 People Regional Conference / FOSS4G Hiroshima 2026
furukawayasuto
0
150
20260828_品質と開発生産性を両立させる、AI時代のE2Eテストの考え方
magicpod
0
200
What We Talk About When We Talk About XP
m_seki
2
580
AIは賢い。でも実行環境は? CLIおじさんがAI時代に伝えたいこと ~ CLIおじさんがAI時代に伝えたいこと ~
curekoshimizu
1
240
モバイル交通系ICへのチャージ実例から考える、クロスプラットフォーム開発におけるiOS実機テスト設計とCI運用
yusuga
1
440
RSSとCodexを使ってX投稿自動化してみた
ochtum
0
110
ハーネス設計入門 〜プロンプト、コンテキストの次〜
kinopeee
56
38k
AIエージェント時代のコードレビューを設計する
nogu66
6
2.7k
Featured
See All Featured
Heart Work Chapter 1 - Part 1
lfama
PRO
9
36k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.5k
Chasing Engaging Ingredients in Design
codingconduct
0
310
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
490
The Pragmatic Product Professional
lauravandoore
37
7.4k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Odyssey Design
rkendrick25
PRO
2
800
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
For a Future-Friendly Web
brad_frost
183
10k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
270
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 ٕज़શൠʣʹ͍ͭͯ৭Μͳਓͱ͍ٞͨ͠Ͱ͢ʂͥͻདྷͯͶʂ