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
iOS × GraphQLの嬉しみとツラミ / Pros and cons of iOS an...
Search
mogaming
September 01, 2018
Technology
4
14k
iOS × GraphQLの嬉しみとツラミ / Pros and cons of iOS and GraphQL
iOSDC2018の発表資料です。誤っていた部分を修正して再UPしました。
mogaming
September 01, 2018
Tweet
Share
More Decks by mogaming
See All by mogaming
Android Instant App 事例調査 / Android Instant App Stories
mogaming
0
470
FirebaseでつくるiOSアプリ/make iOS App with Firebase
mogaming
6
3.6k
Firebaseでつくるグループチェックリスト管理サービス / check list apps on firebase
mogaming
5
570
iOSアプリ開発におけるデバイス選択 / Appropriate choise of supporting devices on iOS app development
mogaming
1
1.1k
デザインに込められたエモを知りたい/Emotion in Service Design
mogaming
1
8.2k
Other Decks in Technology
See All in Technology
食べログが挑む!飲食店ネット予約システムで自動テスト無双して手動テストゼロを実現する戦略
hagevvashi
1
140
50人の組織でAIエージェントを使う文化を作るためには / How to Create a Culture of Using AI Agents in a 50-Person Organization
yuitosato
6
2.9k
OPENLOGI Company Profile
hr01
0
62k
OSSコントリビュートをphp-srcメンテナの立場から語る / OSS Contribute
sakitakamachi
0
1.1k
LLM とプロンプトエンジニアリング/チューターをビルドする / LLM, Prompt Engineering and Building Tutors
ks91
PRO
1
200
試験は暗記より理解 〜効果的な試験勉強とその後への活かし方〜
fukazawashun
0
300
.mdc駆動ナレッジマネジメント/.mdc-driven knowledge management
yodakeisuke
23
9.8k
AIエージェント開発における「攻めの品質改善」と「守りの品質保証」 / 2024.04.09 GPU UNITE 新年会 2025
smiyawaki0820
0
370
フロントエンドも盛り上げたい!フロントエンドCBとAmplifyの軌跡
mkdev10
2
190
はてなの開発20年史と DevOpsの歩み / DevOpsDays Tokyo 2025 Keynote
daiksy
5
1.2k
自分の軸足を見つけろ
tsuemura
2
510
Creating Awesome Change in SmartNews
martin_lover
1
180
Featured
See All Featured
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
Raft: Consensus for Rubyists
vanstee
137
6.9k
Speed Design
sergeychernyshev
28
880
Reflections from 52 weeks, 52 projects
jeffersonlam
349
20k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
30
2.3k
Typedesign – Prime Four
hannesfritz
41
2.6k
Navigating Team Friction
lara
184
15k
Site-Speed That Sticks
csswizardry
4
470
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
46
2.4k
Why Our Code Smells
bkeepers
PRO
336
57k
Stop Working from a Prison Cell
hatefulcrawdad
268
20k
Writing Fast Ruby
sferik
628
61k
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Λ͏Լ४උʢৄࡉʣ