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
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
630
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に食わせて、 Compose移行を加速するs
shihochan
0
260
[PyCon KR 2026] More Variants, More Diversity for AI Accelerators
achimnol
0
130
PyConJP2026_wat_Python × Signal Processing: How to Draw Pictures with Sound Using Spectrogram Art
wat
0
660
AIに既存システムを理解させる技術 ~レガシーを見捨てないハーネスエンジニアリング入門~
ochtum
0
200
自分的「カンファレンスの楽しみ方」
syumai
0
190
AIエージェント時代のコードレビューを設計する
nogu66
6
2.5k
AI時代に学ぶ 好きなルール 嫌いなルール Linter編
shorty5121
0
830
DroidKaigi 2026 「個人開発という実験場: Android エンジニアが手にする4つの自由」
slashnephy
0
220
Kiroで創り、AgentCoreで繋ぐ!AWSで実践する「AI-DLC」から「AIエージェント統合」までの最新地図
licux
2
310
PHPプロジェクトの結合バランスを可視化する #php_night
kajitack
0
210
初めての模倣学習とVLA
natsutan
0
470
バグを直したら useEffect が消えた
colorful12
3
840
Featured
See All Featured
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.6k
Build your cross-platform service in a week with App Engine
jlugia
234
19k
Become a Pro
speakerdeck
PRO
31
6.2k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
Leo the Paperboy
mayatellez
8
2.2k
The Spectacular Lies of Maps
axbom
PRO
1
970
Raft: Consensus for Rubyists
vanstee
141
7.7k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
390
[RailsConf 2023] Rails as a piece of cake
palkan
59
7k
Git: the NoSQL Database
bkeepers
PRO
432
67k
A Soul's Torment
seathinner
7
3.5k
The SEO identity crisis: Don't let AI make you average
varn
0
550
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 ٕज़શൠʣʹ͍ͭͯ৭Μͳਓͱ͍ٞͨ͠Ͱ͢ʂͥͻདྷͯͶʂ