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
iOS × GraphQLの嬉しみとツラミ / Pros and cons of iOS an...
Search
mogaming
September 01, 2018
Technology
15k
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
iOS × GraphQLの嬉しみとツラミ / Pros and cons of iOS and GraphQL
iOSDC2018の発表資料です。誤っていた部分を修正して再UPしました。
mogaming
September 01, 2018
More Decks by mogaming
See All by mogaming
Android Instant App 事例調査 / Android Instant App Stories
mogaming
0
530
FirebaseでつくるiOSアプリ/make iOS App with Firebase
mogaming
6
3.8k
Firebaseでつくるグループチェックリスト管理サービス / check list apps on firebase
mogaming
5
620
iOSアプリ開発におけるデバイス選択 / Appropriate choise of supporting devices on iOS app development
mogaming
1
1.2k
デザインに込められたエモを知りたい/Emotion in Service Design
mogaming
1
8.7k
Other Decks in Technology
See All in Technology
TinyGoでオブザーバビリティ?OpenTelemetryはTinyGoで使えるのか / Is OpenTelemetry available in TinyGo environment?
ymotongpoo
2
110
不可逆な意思決定を避けながら10億超の顧客データを AI Ready にするデータ基盤設計
baseballyama
1
190
SREでアラート疲れを 解決しよう!
kairim0
1
210
Snapshot Testing in Practice: Predictable and Reliable SwiftUI Views
fespinoza
0
160
ハードウェアコンペでもAI駆動開発が進んでいる話
iotengineer22
1
500
今こそ知りたいAmplifyGen2
mkdev10
2
160
FOSS4Gを活用した自治体業務DXの試み
470715
0
120
SDDの運用にめげずに向き合った話
sansantech
PRO
1
140
味覇で作るパスタが美味い - 20261001_yabaubuki.dev
livesense
PRO
0
110
分析の民主化を支えるメタデータ整備の実践
kakehashi
PRO
3
1.1k
「Docker Desktop不要の時代」は 来たのか?
ueponx
0
270
子育てエンジニアの可処分時間が減っても成長を諦めない戦い方
sudoakiy
4
4.1k
Featured
See All Featured
The Limits of Empathy - UXLibs8
cassininazir
2
710
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
290
What's in a price? How to price your products and services
michaelherold
247
13k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
300
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.2k
Visualization
eitanlees
153
17k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
390
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Practical Orchestrator
shlominoach
192
12k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
760
Faster Mobile Websites
deanohume
310
32k
Large-scale JavaScript Application Architecture
addyosmani
516
110k
Transcript
J04ʷ(SBQI2-ͷخ͠Έͱπϥϛ J04%$ !@NPHBNJOH
w 5XJUUFS!@NPHBNJOH w %F/"ͰখઆܥαʔϏεͷ։ൃ୲ J04"OESPJE"QQ w #''"1*ͷ։ൃ͍ͯ͠·͢
"CPVU.F
(SBQI2-"1*ΫϥΠΞϯτฤ (SBQI2-"1*αʔόʔฤ (SBQI2-"1*J04͔Βୟ͘ฤ (SBQI2-ͷخ͠Έͱπϥϛ #''Λ׆༻ͯ͠πϥϛʹཱ͔ͪͬͯΈͨ
ࠓ͢͜ͱ
w "1*αʔόʔʹऔΓೖΕΔ͜ͱͷͰ͖ΔΫΤϦݴޠ 'BDFCPPL࡞IUUQTHSBQIRMPSH w 3&45GVMH31$ͱશ͘ҧ͏ࢥͰͰ͖͍ͯΔ 3&45GVM"1*㱻(SBQI2-"1*㱻H31$ w 42-ϥΠΫʹ"1*ʹ͍߹ΘͤͯσʔλΛऔಘ͢Δ
(SBQI2-ͱ
ૣ(SBQI2-"1*Λୟ͍ͯΈΑ͏ʂ ࠓ͔Β(JUIVCͷ(SBQI2-"1*Λࡐʹͯ͠ ࣮ࡍʹ"1*Λୟ͘Λ͍͖ͯ͠·͢ IUUQTEFWFMPQFSHJUIVCDPNWFYQMPSFS
ͱʜͦͷલʹ গ͚ͩ͠ݴ༿ͷઆ໌"
w 2VFSZ 3&45Ͱ͍͏ͱ(&5 w .VUBUJPO3&45Ͱ͍͏ͱ1045 165 %&-&5& ϦΫΤετͷछྨ
(SBQI2-ͷಛ2VFSZʹूத͍ͯ͠ΔͨΊ2VFSZͷΛ͠·͢
ૣ(SBQI2-"1*Λୟ͍ͯΈΑ͏ʂ ࠓ͔Β(JUIVCͷ(SBQI2-"1*Λࡐʹͯ͠ ࣮ࡍʹ"1*Λୟ͘Λ͍͖ͯ͠·͢ IUUQTEFWFMPQFSHJUIVCDPNWFYQMPSFS
։͍ͯΈΔͱ͜Μͳײ͡ ͳΜ͔ΤσΟλΈ͍ͨͳͷ͕։͘ʜφχίϨʁ
w (SBQIJ2-ϒϥβͰݟΕΔ(SBQI2-*%& w ܕ2VFSZ.VUBUJPO͕ҰཡͰ͖Δ w 2VFSZ.VUBUJPOΛॻ͍࣮ͯߦͰ͖Δ w ೖྗิ͕ޮ͘ w ಋೖͱͬͯ؆୯
(SBQIJ2-ʢ͙Β;͌͘Δʁ͙Β;͔͌Δʁʣ IUUQTHJUIVCDPNHSBQIRMHSBQIJRM
(SBQIJ2-ͷ͍ํ ͜͜ʹॻ͘ 36/ ͜͜ʹ݁Ռ͕ग़Δ %PDVNFOU͕ݟΕΔ KTPOͰมఆٛ
࣮ࡍʹऔಘͯ͠ΈΑ͏ʂ 6TFSͷใΛऔಘ 2VFSZ ͯ͠ΈΔ
%PDVNFOU͔Β6TFSΛऔಘ͢Δ2VFSZΛ୳͢ ͜͜Λԡ͢
VTFSΛऔಘͯ͠ΈΔ 2VFSZΛબ 2VFSZҰཡ VTFSΛݕࡧ
VTFSΛऔಘͯ͠ΈΔ VTFSRVFSZͷઆ໌ 6TFS5ZQF͔ΒऔΕΔ'JFMET ฦ͞ΕΔܕ 2VFSZͷҾ ͜ΕΛऔͬͯΈΔ
42-ϥΠΫʹ͔͚Δ ඞཁͳσʔλ͚ͩΛճͰऔಘͰ͖Δ JOUFSGBDFʹܕ͕͋Δ 1BHJOBUJPOͷ༷͕ܾΊΒΕ͍ͯΔ ϥΠϒϥϦʹΑ࣮ͬͯ͞Ε͍ͯͳ͜ͱ͋Δ (SBQI2-"1*ͷಛ
VTFSΛऔಘͯ͠ΈΔ 4&-&$5CJP'30.VTFS 8)&3&MPHJObNPHBNJOH` Έ͍ͨͳΠϝʔδ
VTFSΛऔಘͯ͠ΈΔ औಘͰ͖ͨ
42-ϥΠΫʹ͔͚Δ ඞཁͳσʔλ͚ͩΛճͰऔಘͰ͖Δ JOUFSGBDFʹܕ͕͋Δ 1BHJOBUJPOͷ༷͕ܾΊΒΕ͍ͯΔ ϥΠϒϥϦʹΑ࣮ͬͯ͞Ε͍ͯͳ͜ͱ͋Δ (SBQI2-"1*ͷಛ
ඞཁͳpFME͚ͩऔಘ͢Δ BWBUFS6SMՃͰऔಘ͢Δ
ෳͷ2VFSZΛಉ࣌ʹ͛Δ GBDFCPPLHSBQIRMϦϙδτϦऔಘͯ͠ΈΔ
ෳ"1*ʹ(&5ϦΫΤετΛૹΓ͕ͪͳ 5PQը໘ͱ͔Ͱ׆༻Ͱ͖ͦ͏ ෳͷ2VFSZΛಉ࣌ʹ͛Δ
42-ϥΠΫʹ͔͚Δ ඞཁͳσʔλ͚ͩΛճͰऔಘͰ͖Δ JOUFSGBDFʹܕ͕͋Δ 1BHJOBUJPOͷ༷͕ܾΊΒΕ͍ͯΔ ϥΠϒϥϦʹΑ࣮ͬͯ͞Ε͍ͯͳ͜ͱ͋Δ (SBQI2-"1*ͷಛ
ܕ͕͔ͬ͠Γ͋Δ/VMMBCJMJUZ /VMMBCJMJUZ͕ͰΘ͔Δ
1FSNJTTJPOͱͯ͠ฦͬͯ͘Δ ͕&OVNͱͯ͠ఆٛ͞Ε͍ͯΔ ܕ͕͔ͬ͠Γ͋Δ&OVN ϦϙδτϦʹର͢Δ 1FSNJTTJPOͷpFME
ܕ͕͔ͬ͠Γ͋Δ ࣮ମͱͯ͠4USJOH͕ฦͬͯ͘Δ
w ͋ΒΏΔpFMEʹܕΛ͚ΒΕΔ w ܕʹద߹Ͱ͖͍ͯͳ͍߹ܕγεςϜ͕ΤϥʔΛฦ͢ ܕ͕͔ͬ͠Γ͋Δ
42-ϥΠΫʹ͔͚Δ ඞཁͳσʔλ͚ͩΛճͰऔಘͰ͖Δ JOUFSGBDFʹܕ͕͋Δ 1BHJOBUJPOͷ༷͕ܾΊΒΕ͍ͯΔ ϥΠϒϥϦʹΑ࣮ͬͯ͞Ε͍ͯͳ͜ͱ͋Δ (SBQI2-"1*ͷಛ
w ྫɿϢʔβʔ͕ελʔ͍ͯ͠ΔϦϙδτϦΛऔಘ͢Δ w ͨ͘͞Μ͋Δ͔͠Εͳ͍ͷͰશ݅औಘΩϏγΠ w ͦ͏͍͏߹ͷͨΊͷ$POOFDUJPOͱ͍͏ܕ ࠓճͷ߹ͩͱ4UBSSFE3FQPTJUPSZ$POOFDUJPO
1BHJOBUJPO
$POOFDUJPO5ZQF"SHVNFOUT औಘ͍ͨ݅͠Λࢦఆ͢ΔͨΊʹ BSHVNFOUTͱͯ͠pSTU·ͨMBTUΛඞͣ͢ඞཁ͕͋Δ ࠷ॳͷOݸ ࠷ޙͷOݸ
$POOFDUJPO5ZQF3FUVSO5ZQF ݁ՌFEHFTOPEFʹೖ͖ͬͯͯ OPEFͷҐஔDVSTPSͰཧ͞ΕΔ ^ Α͘͏Ͱ͋Ζ͏ใ͕ 1BHF*OGPͱͯ͠༻ҙ͞Ε͍ͯΔ ^
$POOFDUJPO5ZQFTUBSSFE3FQPTJUPSZΛऔಘ TUBSSFE3FQPTJUPSZΛऔͬͯΈΔ⭐ ࠷ॳͷ݅औಘ QBHFͷใͱ͓ͬͯ͘
$POOFDUJPO5ZQFTUBSSFE3FQPTJUPSZΛऔಘ ͚݅ͩऔಘͰ͖ͨ ͜ͷҐஔΛࢦ͍ͯ͠Δ
$POOFDUJPO5ZQF$VSTPS DVSTPSΛBGUFSCFGPSFʹͤ ͦ͜Λج४ʹͯ͠pSTUMBTUΛ͏͜ͱ͕Ͱ͖Δ1BHJOBUJPO
$POOFDUJPO5ZQF$VSTPSΛࢦఆ͢Δ ઌఔͷFOE$VSTPSΛBGUFSʹͯ͠ΈΔ
Ͱ͖ͯΔ $POOFDUJPO5ZQF$VSTPSΛࢦఆ͢Δ
42-ϥΠΫʹ͔͚Δ ඞཁͳσʔλ͚ͩΛճͰऔಘͰ͖Δ JOUFSGBDFʹܕ͕͋Δ 1BHJOBUJPOͷ༷͕ܾΊΒΕ͍ͯΔ ϥΠϒϥϦʹΑ࣮ͬͯ͞Ε͍ͯͳ͜ͱ͋Δ (SBQI2-"1*ͷಛ ͭͷಛͱͲ͏ͬͯ(SBQI2-"1*Λ
ୟ͘ͷ͔Λ͝ཧղ͍͚ͨͩͨͰ͠ΐ͏͔ʁ
(SBQI2-αʔόʔαΠυฤ (SBQI2-"1*αʔόʔͲͷΑ͏ʹ ࣮͢ΕΑ͍ͷ͔ʁ
(SBQI2-αʔόʔαΠυࢹ HSBQIRMSVCZ ͷ߹Ͱ͓͍͖ͤͯͨͩ͞·͢
6TFS5ZQFͷఆٛ 6TFS5ZQF ฦ͞ΕΔܕ
6TFS5ZQFͷఆٛ $POOFDUJPO5ZQFʹ͞Εͨ ҾʹԠͯ͡উखʹ-*.*5ͱ 0''4&5Λ͚ͭͯ͘ΕΔ ఆٛ ͱ 3FTPMWFS pFME໊
ܕ આ໌ OVMMBCJMJUZΛએݴ͍ͯ͘͠
(SBQI2-αʔόʔαΠυࢹ $POOFDUJPO5ZQFΛฦ͢ͱ͖ʹ ΄ͱΜͲͦΕΛҙࣝ͢Δඞཁ͕ͳͯ͘ૉΒ͍͠
6TFSRVFSZͷఆٛ VTFSRVFSZ
VTFSRVFSZͷ࣮ ฦ͢ܕ VTFSRVFSZͷҾ ͜ͷRVFSZͰฦ͢ॲཧ 2VFSZ໊ʢ6TFSVTFSʹͳΔʣ
(SBQI2-αʔόʔαΠυࢹ ͨͬͨ͜Ε͚ͩͰVTFSRVFSZ͕ ૾Ҏ্ʹ؆୯Ͱ͢ΑͶ☺ʁ
J04͔ΒͲ͏ୟ͘ʁ J04͔Βୟ͘ͱ͖Ͳ͏͢Δͷ͔ʁ
J04͔ΒͲ͏ୟ͘ʁ 1045Ͱ3FRVFTU#PEZʹԼهΛ͚ͩ͢
ੜ63-4FTTJPOͰؤுΔ
ੜ63-4FTTJPOͰؤுΔ ͜Επϥ͍
ͭΒ͍ͷͰ ϥΠϒϥϦͷྗΛआΓ͍ͨ
(SBQI2-ΫϥΠΞϯτϥΠϒϥϦ "QPMMPJ04 IUUQTHJUIVCDPNBQPMMPHSBQIRMBQPMMPJPT
"QPMMPJ04Λ͏ɿԼ४උ "QPMMPJ04Λ͏ͨΊʹ४උ͕ඞཁͰ͢
"QPMMPJ04Λ͏ɿԼ४උ ίʔυੜΛ͠·͢
"QPMMPJ04Λ͏Լ४උ schema.json of Github GraphQL ͯ͢ͷܕ2VFSZ.VUBUJPOT ใ͕ॻ͔Ε͍ͯΔ findUser.gql
(SBQIJ2-Ͱॻ͍ͨ 2VFSZΛϑΝΠϧͱͯ͠༻ҙ Apollo CLI Swift Code (FOFSBUF$PEF
"QPMMPJ04Λ͏HRMϑΝΠϧ 2VFSZʹ໊લΛ͚ͭΔ
"QPMMPJ04Λ͏ ܕͷ͋Δੈքʂ
J04͔Β(SBQI2-"1*Λୟ͘ "QPMMPJ04ͷྗΛआΓΕ 5ZQF4BGFʹ(SBQI2-"1*Λୟ͘͜ͱ͕Ͱ͖Δ
42-ϥΠΫʹ͔͚Δ ඞཁͳσʔλ͚ͩΛճͰऔಘͰ͖Δ JOUFSGBDFʹܕ͕͋Δ 1BHJOBUJPOͷ༷͕ܾΊΒΕ͍ͯΔ (SBQI2-"1*ͷಛ(SBQI2-ͷັྗ ͜ΕΒ͕ͦͷ··(SBQI2-ͷັྗʹͳΔ
w JOUFSGBDFʹܕ͕͋Δ w (SBQIJ2-͕࠷ߴ ৗʹ࠷৽ͷυΩϡϝϯτʹͳ͍ͬͯΔ ͍ͭͰࢼ͠ʹ"1*ୟ͚Δ͠ΫΤϦ࡞ΕΔ
J04ΞϓϦΤϯδχΞత(SBQI2-ͷخ͠Έ
w ⭕ΫϥΠΞϯτຖʹ"1*࡞ΓΘ͚ͳͯ͘ྑָͯ͘ w ❌ը૾ͷϑΝΠϧΛσϑΥϧτͰѻ͑ͳ͍ ϑΝΠϧΛѻ͏Օॴ͚ͩ3&45GVMʹͯ͠ରॲ͍ͯ͠Δ ʢϥΠϒϥϦΛೖΕΕѻ͑ͳ͘ͳ͍ʣ w ❌/
͕ൃੜͯ͘͢͠େม w ❌ΤϯυϙΠϯτ͕୯ҰʢBQJHSBQIRMʣͷͨΊ$BDIF͍͠ ͍··Ͱͷݟ͕͋·Γ͑ͳ͍ αʔόʔαΠυࢹͰ
(SBQI2-ͷπϥϛ ͯ͞ʜʜπϥϛͷΛ͠·͢
(SBQI2-ͷπϥϛ ΤϥʔϋϯυϦϯά͕͍͠
ΤϥʔͲ͏དྷΔͷ͔ Τϥʔ͜Μͳײ͡ͰདྷΔ
w ෳͷ2VFSZ.VUBUJPOΛಉ࣌ʹୟ͘ͱҰ෦ޭͯ͠ Ұ෦ࣦഊͱ͔͕ى͜Γ͏Δ w ͲΕ͕ΫϦςΟΧϧͳͷͳͷ͔ͷஅ͕ඞཁ (SBQI2-ͷπϥϛɿΤϥʔϋϯυϦϯά ͍ͭͲ͓Γؤுͬͯߟ͑ͯΔ͔͠ͳ͍
(SBQI2-ͷπϥϛ TUBUVT$PEF͕جຊͰฦͬͯ͘Δ
w TUBUVT$PEFجຊͰฦͬͯ͘Δ w (SBQI2-ϦΫΤετ͕௨Ε w BQPMMPJPT͔ΒTUBUVT$PEF͕ݟ͑ͳ͘ͳ͍ͬͯΔ w .VUBUJPOʢߋ৽ܥʣ͕ಛʹπϥ͍
(SBQI2-ͷπϥϛɿTUBUVT$PEF
w (SBQI2-2VFSZ͕ͱͯັྗత͕ͩ.VUBUJPOͦΕ΄Ͳ w ߋ৽ܥ(SBQI2-Ͱ͋Δ͋Γ͕ͨΈ͕΄ͱΜͲͳ͍ .VUBUJPOʹର͢Δݸਓతݟղ
͜ͷπϥϛΛͳΜͱ͔ղܾͰ͖ͳ͍͔ͳ…ʁ (SBQI2-ͷπϥϛ
TUBUVT$PEF͕ ·ͣ(SBQI2-"1*ଆͰΤϥʔͷ༰Λ֦ு͢Δ
"1*ଆͰΤϥʔΛ֦ு͢Δ (SBQI2-"1*ଆͰΤϥʔΛ֦ுͯ͠ TUBUVT$PEFΛϨεϙϯεʹ༩͢Δ
ΞϓϦଆͰTUBUVT$PEFΛࢀর͢Δ TUBUVT$PEFΛऔΓग़͢
ͳΜͱ͔ͳͬͯΔؾ͕͢Δʜʁ TUBUVT$PEF͕
͔͠͠ϫΠࢥͬͨ ʮ͍ϫΠɺ.VUBUJPOͷ݁Ռ ී௨ʹ4UBUVT$PEFͰϋϯυϦϯά͍ͨ͠Μ͡Όʔʯ
͔͠͠ϫΠࢥͬͨ ͳ͔ͥͱ͍͏ͱ
#BDLFOET'PS'SPOUFOET Payment Image/Movie Notification Core Domain (SBQI2- BFF
iOS App ฐαʔϏε.JDSPTFSWJDFTߏ 3&45GVM 3&45GVM 3&45GVM ͦͦ3&45GVM"1*ୟ͔ͳ͍ͱ͍͚ͳ͍͜ͱ͕͋Δ
#''Λ༻͍ͨࠇຐज़ J04͔ΒΈͯ.VUBUJPOʢߋ৽ܥʣ͚ͩ3&45ͬΆ͘ ৼΔΘͤΔ͜ͱͰ͖·͢
GraphQL API BFF iOS App ᶄ (SBQI2-ͷ .VUBUJPOʹ
Ϛοϐϯά ᶆ “errors”: [{ “statusCode”: 400 }] ᶇ FSSPSTpSTUTUBUVT$PEFΛ )5514UBUVT$PEFͱ͢Δ ᶈ )5514UBUVT$PEF ͰϋϯυϦϯά ᶃ 63-4FTTJPOͰ 1045BQJDSFBUF/PWFM #''Λ༻͍ͨࠇຐज़ ᶅ Mutation createNovel()
#''Λ༻͍ͨࠇຐज़ Ͱ͖·ͨ͠☺
#''Λ༻͍ͨࠇຐज़ ͜͏͍͏;͏ʹͰ͖ΔΑ͍ͬͯ͏͚ͩͳͷͰ Φεεϝ͠·ͤΜ2 ͔ͨ͠͠Β͜Ε͕ΠΠͬͯͳΔ͜ͱ͋Δ͔ʜʁ
w (SBQI2-ͳ͔ͳ͔͍͍ͧ JOUFSGBDFʹܕ͕͋Δͷ࠷ߴ (SBQIJ2-࠷ߴ w (SBQI2-ΤϥʔϋϯυϦϯά͕݁ߏΉ͔͍ͣͧ͠ #FTU1SBDUJDF͕͋·Γͳ͘ͱͯ·͍͠
·ͱΊ ࠙ձฐࣾ%F/"ϒʔεͰ͍ͭͰ͓͕͚͍ͩ͘͞ʂ
ࢀߟࢿྉ
w BQPMMPΛOQNJOTUBMM OQNJHBQPMMP w BQPMMPΛͬͯ(JUIVC(SBQI2-"1*ͷTDIFNBΛऔಘ BQPMMPTDIFNBEPXOMPBEFOEQPJOUIUUQTBQJHJUIVCDPNHSBQIRIFBEFS"VUIPSJ[BUJPO#FBSFSUPLFO TDIFNBKTPO w
(SBQIJ2-Ͱॻ͍ͨRVFSZʹ໊લ͚ͭͯHRMϑΝΠϧͱͯ͠อଘ w TDIFNBͱHRM͔ΒBQPMMPΛͬͯίʔυੜ BQPMMPDPEFHFOHFOFSBUFRVFSJFTpOE6TFSHRMTDIFNBTDIFNBKTPO"1*TXJGU "QPMMPJ04Λ͏Լ४උʢৄࡉʣ