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
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
CASwift_11.pdf
Search
Shunsaku Miki
January 30, 2020
Programming
1.4k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
CASwift_11.pdf
Shunsaku Miki
January 30, 2020
More Decks by Shunsaku Miki
See All by Shunsaku Miki
iOS12 New Notification
shunsakumiki
0
76
Other Decks in Programming
See All in Programming
世界の中心で、AI(App Intents)をさけぶ ー App Intents中心設計の実践ガイド
touyou
0
190
新人はどこまで自力でやり、どこからAIに頼るべきか/エンジニア育成に向き合う_先輩たちの悩みと知見共有会
toppan_digital_dev
1
580
AgentCore CLI で進化した AWS での AI エージェントの作り方 : 必要な機能を必要な時に
icoxfog417
PRO
2
210
マイコン向けの軽量Ruby「PicoRuby」で各種デバイスを制御するネイティブアプリの実現手法
bash0c7
0
190
フロントエンドUIフレームワークのこれまでとこれから
ssssota
1
1.2k
Webの地図
yosuke_furukawa
PRO
3
3.1k
Webプラットフォームで議論されているセキュリティ課題 / Security issues being discussed on Web Platforms
petamoriken
0
300
AI に Inclusive UI を書かせよう — Design Rules Skill で Compose UI を作り直す
theoriatec2024
1
460
Seeing Through Serverless: Observability for AWS Lambda with ADOT and CloudWatch Application Signals
seike460
PRO
1
130
AIを上手に使っていこうとしたら越境せざるを得なくなった話 〜実践1年で見えた境界を越えなければならない理由と進め方〜 / Crossing borders with AI
tomoyakitaura
4
1.1k
アクセシビリティから考える情報設計
high_g_engineer
0
330
数年滞っていたダークモード対応をおよそ2週間で完了させる
chigichan24
0
690
Featured
See All Featured
Prompt Engineering for Job Search
mfonobong
0
450
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.2k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
AI: The stuff that nobody shows you
jnunemaker
PRO
9
980
A Modern Web Designer's Workflow
chriscoyier
698
190k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
320
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.5k
Everyday Curiosity
cassininazir
0
310
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
Transcript
Amebaͷઃܭͱ͜Ε͔Β ~ΧΦε͔Βͷ٫ͱ࠶ͼΧΦεΛੜΈग़͞ͳ͍ྗʙ 2020/1/30
1.ࣗݾհ&ϓϩμΫτհ 2.ΧΦε͗ͨ͢ઃܭ 3.ϦΞʔΩςΫνϟ:yatteiki: 4.݁Ռͱະདྷ
ࣗݾհ&ϓϩμΫτհ
ࣗݾհˍϓϩμΫτհ • ࡾ ढ़࡞ • 2017த్ೖࣾ Ameba iOS։ൃϦʔμʔ • 2010ϦϦʔε
• Twitter/shun_sakuuu • Github/shun-mk
ΧΦε͗ͨ͢ઃܭ
ΧΦε͗ͨ͢ઃܭ • 2010ʹϦϦʔε͞Ε10Ҏ্ӡ༻Λ͍ͯ͠ΔΞϓϦ • ࣌ͷྲྀΕͷதͰͨ͘͞Μͷసظ • WebViewΞϓϦ͔ΒϑϧωΠςΟϒʹ • Objective-C͔ΒSwiftʹ •
વνʔϜͷϝϯόʔͷೖΕସΘΓܹ͍͠ • ࣌ͷྲྀΕͷதͰ࣌σϑΝΫτͩͱݴΘΕ͖ͯͨઃܭͨ͘͞Μ͋Δ • ΧΦε͔Β٫͠Α͏ͱͯ͠ૡ͍ͨࠟɻɻɻ
MVC • ଏʹݴ͏FatViewController • ΊͬͪΌViewControllerͰAPI௨৴ͯ͠Δ • ViewControllerͰAPI௨৴ͱ͔ॻ͍ͪΌͩΊͩΑʁ͍ͬͯ͏࣌ͷἤΓΛड͚ ͨͷ͔HogeHogeManagerͱ͔HogeHogeHelperͱ໋໊͔͔ΒԿ͢Δͷ͔Α͘ Θ͔Βͳ͍Ϋϥε͕API௨৴Λ࣋ͬͯͨΓ͢Δ •
વςετͳ͍
VIPER • Ұ෦VIPERͷߏͰ࡞ΒΕͯΔը໘͕͋Δ • ͓ͦΒ͘͜ΕAmebaΛΧΦε͔Β٫͢ΔͨΊʹઓͨ͠Ұͭͳͷ͔ͳʁ • ઃܭࢿྉ͕ͳ͘Ͳ͏͍͏ࢥͰͲ͏͍͏ߏʹͳ͍ͬͯΔͷ͔͕ඇৗʹ ͔ΓͮΒ͍ • વςετͳ͍
ΧΦε͗ͨ͢ઃܭ • ৽نը໘Λ࣮͢Δ࣌Ͳ͏͍͏ઃܭʹ͢Ε͍͍͔ຖճ0͔Βߟ͑Δͷ݁ߏେ ม • ͔͠ਓͦΕͧΕ͜Ε͕͍͍͍ͬͯ͏ͷ͕ҧ͏ͷͰϨϏϡʔίετΓΓ • ͦͷઃܭʹͨ͠ΤϯδχΞ͕͍ͳ͘ͳΔͱෛ࠴ײ͕ੌ͍ • ઃܭ͕΅ΜΓ&ີ݁߹&ςετಛʹͳ͘Կ͕ਖ਼ͷಈ͖ͳͷ͔Θ͔Βͳ͍ͷ
ࡾॏۤͰ༷มߋػೳՃʹ༨ʹ͕ൃੜ͢Δঢ়ଶʹ
ϦΞʔΩςΫνϟ:yatteiki:
ͬ͘͟Γͱͨ͠ํ • ࠓճͷϦΞʔΩςΫνϟͰࢦͨ͠࠷ऴܕMVVM ʴ Flux • ಋೖ͕ਐΜͰ͍ͳ͔ͬͨRxSwiftϦΞʔΩςΫνϟʹ߹ΘͤͯਐΊΔ • ͔ͤͬ͘ઃܭ͢͠ͳΒςετͷ࣮·Ͱߟ͑ΒΕͯΔઃܭʹ͍ͨ͠ •
ςετॻ͘ͳΒCIͷڥݟͯ͠ςετΛॻ͘͜ͱʹҙຯ͕͋Δঢ়ଶΛ࡞ Γ͍ͨ • ઃܭҊʹؔͯ͠ৗʹνʔϜͰ͢Γ߹ΘͤΛߦ͏(୭͔ҰਓͷઃܭΛօ͕ਅࣅ ͯ͠ॻ͚ͩ͘ͷঢ়ଶආ͚͍ͨ)
MVVM • Ұൠతʹࢥ͍ු͔ͿMVVMͱ΄΅มΘΒͳ͍ߏ • 1ը໘ͷϩδοΫ͕ෳࡶͳը໘͕ͦͦ͋͜͜Δͷͱෳͷը໘͕ಉظ͠ͳͯ͘ ͍͚ͳ͍Α͏ͳ༷͕ଟ͍Θ͚Ͱͳ͔ͬͨͷͰγϯϓϧͳMVVMΛ࠾༻ ͨ͠ • ViewͱViewModelͷbindingΛ͢ΔͨΊͷFrameworkRxSwiftΛ࠾༻(ࣾʹ ͓͚Δ࠾༻࣮ΛؑΈܾͯఆ)
MVVM • ॳظViewModelͷߏinitͰPublishSubjectΛੜ͠Observerͱ ObservableͷϓϩύςΟʹηοτͯ͠ߪಡ͢Δܗʹ͍ͯͨ͠ • ؆୯ͳը໘ͳΒˢͷ࣮ͰࠔΔ͜ͱಛʹͳ͍ • ViewModelͷIn-OutͷI/F͕࣮ऀʹҕͶΒΕ͓ͯΓϨϏϡʔίετ͕ංେԽ • ෳࡶͳॲཧ͕ೖͬͯ͘Δͱinit͕ஶ͘͠ංେԽ͠ϝϯςίετ͕ര૿ͨ͠
MVVM • ViewModelͷinitͰߦ͍ͬͯͨObservableͷՃAPI௨৴ɺViewදࣔ༻ͷ ModelͷTranslatorݺͼग़͠ΛUsecaseͱͯ͠Γग़͠ • ViewModelͷInputͱOutputΛProtocolʹΓग़͠In-OutͷI/FΛڞ௨Խ • ViewModelͷinitͰߦΘΕ͍ͯͨॲཧΛͦΕͧΕͷຖʹΓग़͠ංେԽ Λ͙ͱͱʹখ͍͞୯ҐͰςετ͕ॻ͚ΔΑ͏ʹ
Flux • MVVMͷΈͩͱ࣮ݱ͢ΔͷʹࡶԽ͢ΔΑ͏ͳ༷͕ग़͖ͯͨ • ϩάΠϯ/ϩάΞτʹΑͬͯΞϓϦશମͷঢ়ଶΛΓସ͑ͨΓɺλϒͷΑ͏ ͳը໘Ͱߋ৽௨ΛϒϩʔυΩϟετͨ͠Γ • ࠷ॳObserverͱObservableΛI/Fʹ࣋ͭSingletonͷΦϒδΣΫτΛར༻ͯ͠ ղܾ͍ͯ͠ΔՕॴ͕͋ͬͨԿ༷ʹѱ͍͜ͱ͕Ͱ͖ͯ͠·͏ͷͱεέʔ ϧ͢ΔΠϝʔδ͕ͳ͔ͬͨͨΊղܾ͔ͨͬͨ͠
Flux • Fluxര • σʔλϑϩʔFacebookͷFluxͱಉ༷ • ඇRxґଘ -> StoreViewModelͱbindͤͨ͞΄͏͕߹͕ྑ͍Օॴ͕͋ΔͷͰ StoreͷϕʔεΫϥεʹExtensionͰObservableʹม͢ΔॲཧΛՃ͍ͯ͠Δ
Flux • Fluxͷར༻ऀStoreͷΠϯελϯεΛੜ͠దٓbind͢Δ • SingletonͰ࣮͍ͯͨ࣌͠ͱҧ͍ར༻ऀଆ͕ඞཁͳΠϕϯτStateΛ࣋ͭ Store͚ͩΛݟΕ͍͍ͨΊෆཁͳObservableΛߪಡ͢Δ͜ͱΛ͛Δ • ංେԽ͠ଓ͚Δະདྷ͔͠ݟ͑ͳ͔ͬͨSingleton͔ΒඞཁʹԠͯ͡ܗΛม͑Δ StoreΛੜͰ͖ΔΑ͏ʹͳͬͨͷͰεέʔϧ͢Δײ •
σʔλϑϩʔ୯ํͳͷͰAPI௨৴͕ඞཁʹͳΔॲཧͰΩϨΠͳߏΛ อͭ͜ͱ͕Ͱ͖ΔΑ͏ʹ
ͨͩ͠
Flux • ར༻ՕॴͪΌΜͱߟ͑Δ͜ͱ • FluxΛར༻͢Δඞཁ͕ͳ͍ը໘FluxͰ࣮͢Δͱٯʹࡶʹͳͬͯ͠·͏ ՄೳੑΛሃΜͰ͍Δ • MVVMͰΩϨΠʹ࡞Εͳ͍ॲཧͷྲྀΕ͕͋ΔΑ͏ͳͱ͖ʹબࢶͱͯ͠ར ༻ •
ݸਓతʹNotificationCenterͱ͔ObserverύλʔϯͰຖճಠࣗͷศརΫϥε ࡞ΔΑΓஅવFlux
݁Ռͱະདྷ
ྑ͔ͬͨ • ৽࣮͘͠͞ΕΔը໘ͷ࡞Γ͕͋Δఔ౷Ұ͞Ε͍ͯΔͷϨϏϡʔίετ Λߟ͑ͯѹతʹྑ͍ • Ұਓ͕ઃܭ͢ΔͷͰͳ͘ɺνʔϜͰ͖ͬͪΓೝࣝΛ߹Θͤͳ͕ΒਐΊΔ ͜ͱͰઃܭΛߟ͑Δେࣄ͕͞ਁಁͨ͠ײ͕ͨ͡͠ • ઃܭͷࢿྉͳͲ͕ࣾͷυΩϡϝϯτʹ͞Ε͍ͯΔঢ়ଶΛ࡞Εͨ •
෭࣍తͰ͋Δ͕ςετͷࣄΛߟྀ͢ΔΑ͏ʹͳͬͨ͜ͱͰCIڥͷݟ͠ ͳͲਐΊΔ͜ͱ͕Ͱ͖ͨ(ϝϯςφʔ͕ଐਓԽ͍ͯͨ͠Jenkins͔ΒBitrise )
ΠϚΠνͩͬͨ • ࢼߦࡨޡ͠ͳ͕ΒͷϦΞʔΩςΫνϟͩͬͨͷͰίʔυͷதʹຊདྷඞཁͳ͍ ෛ࠴͕ͬͨ • ͕࣌ؒڐ͞ΕΔͳΒͬͱ৭ʑߟ͑Δ͖ͩͬͨ(init͕ංେԽ͢ΔϨΠ ϠʔΛҙࣝͨ͠ઃܭʣ • શը໘Λࠓճͷઃܭʹ͢ΔϚΠϧετʔϯͳͲҾ͚͓ͯΒͣࠜຊʹ͋ΔΧ Φε͕·ͩͳ͍ͤͯ͘ͳ͍
େࣄͳͷ͜ΕΒΛ౿·͑ͯ ͜Ε͔ΒͲ͏͍ͯ͘͠ͷ͔
͜Ε͔ΒͷAmebaͷઃܭ • ݱঢ়՝ͩͱײ͍ͯ͡Δͷ͕ViewModelΑΓཪଆͷ෦ͷ࡞Γ(Usecaseͱ͔ Repositoryͱ͔) • ࠓઃܭΛͨ͠ϝϯόʔ͕·ͩνʔϜʹἧ͍ͬͯΔͷͰடং͕อͨΕ͍ͯ Δ͚ͩ • શһ͍ͳ͘ͳͬͨ͋ͱΧΦεΛੜΈग़͢ةݥੑ·ͩ·ͩሃΜͰ͍Δ •
ͰԿΛ͢Δͷ͔ʁʁʁ
͜Ε͔ΒͷAmebaͷઃܭ • Layered Architectureͷߟ͑ํΛࢀߟʹऔΓೖΕ͍͖͍ͯͨ
͜Ε͔ΒͷAmebaͷઃܭ • Layered Architectureͷߟ͑ํଊ͑ํɺ࣮ࡍͷ࣮ʹࢸΔ·Ͱ৭ʑͳߟ͑ํ Λ࣋ͬͯΔਓ͕͍Δ • ݪཧओٛͰͳ͋͘͘·ͰAmebaͱͯ͠औΓೖΕΔͳΒͲͷܗ͕ཧͳͷ͔ Λߟ͍͖͍͑ͯͨ • ྫ͑EntityDomainͳͷ͔Dataͳͷ͔ɺ༷ʑͳߟ͑ํ͋Δͱࢥ͏
͕AmebaͷಛੑEmbedFrameworkͱͯ͠Γग़ͨ͠ͱ͖ʹෆՄղͳґଘঢ় ଶʹͳΒͳ͍Α͏ߟྀ͖͍ͯͨ͠
·ͱΊ • ͘ӡӦͯ͠ΔαʔϏεͩͱΧΦε͕ੜ·Εͯ͠·͏ͷํͳ͍͜ͱ • ݱঢ়ʹҤ͑Δ͚ͩ͡Όͳͯ͘Ή͠Ζ৳ͼ͠Ζͩͱଊ͑ΒΕΔϝϯόʔͱঢ়گ ͕ἧ͍ͬͯΕΨϯΨϯ͍ͬͯͬͨ΄͏͕͍͍͜ͱ͕͋Δ • ઃܭʹۜͷؙͳ͍ͷͰ৽͍͠ͷΛΩϟον্ͨ͠ͰαʔϏεಛੑʹ Ϛον͢ΕΨγΨγऔΓೖΕ͍ͯ͘ •
ಠΓΑ͕ΓͷઃܭͰͳ͘ઃܭͷνʔϜશମͰͷίϛοτํ๏ઃܭ͢Δ ඞཁ͕͋Δ
͋Γ͕ͱ͏͍͟͝·ͨ͠☺