ΞοςJ04ͷઃܭͱ։ൃϑϩʔͷมભ2016/04/18
View Slide
ࣗݾհ2ੴ ༸ࢿ (ishkawa)• 20162݄ೖࣾͷiOSΤϯδχΞ• ΧϠοΫ → LINE → ικ• ઃܭΛߟ͑Δͷ͕͖
INDEX1. ಉ͡ߏͷ࣮ͷҰݩԽ2. Ωϟογϡઓུ3. σϓϩΠ
ಉ͡ߏͷ࣮ͷҰݩԽ
Α͋͘Δಉ͡ߏ51. ϖʔδωʔγϣϯ2. ϑΥʔϜͷόϦσʔγϣϯ
“ಉ͡ߏ”Λ୲͢ΔͷViewModel66*7JFX$POUSPMMFS6*7JFX "1*$MJFOU6*Πϕϯτ ϦΫΤετϨεϙϯεView ViewModel Model7JFX.PEFMදࣔ
ϖʔδωʔγϣϯ͕ඞཁͳՕॴ71. λΠϜϥΠϯ2. ͍͍ͶϦετ3. ϝοηʔδ4. ௨5. ίϝϯτ
ϖʔδωʔγϣϯ͕ඞཁͳՕॴ85JNFMJOF7JFX$POUSPMMFS"1*$MJFOU5JNFMJOF7JFX.PEFM-JLFE0⒎FST7JFX$POUSPMMFS-JLFE0⒎FST7JFX.PEFM.FTTBHFT7JFX$POUSPMMFS.FTTBHFT7JFX.PEFM/PUJpDBUJPOT7JFX$POUSPMMFS/PUJpDBUJPOT7JFX.PEFM$PNNFOUT7JFX$POUSPMMFS$PNNFOUT7JFX.PEFM
ϖʔδωʔγϣϯ͕ඞཁͳՕॴ95JNFMJOF7JFX$POUSPMMFS"1*$MJFOU1BHJOBUJPO7JFX.PEFM&MFNFOU-JLFE0⒎FST7JFX$POUSPMMFS.FTTBHFT7JFX$POUSPMMFS/PUJpDBUJPOT7JFX$POUSPMMFS$PNNFOUT7JFX$POUSPMMFS
ԿΛύϥϝʔλʔԽ͢Δ͔ʁ10class PaginationViewModel {...func bindRequestwhere Request.Response.Element == Element>(baseRequest: Request) {...}}• ϖʔδωʔγϣϯͷΤϨϝϯτ(Message, NotificationͳͲ)• ϖʔδωʔγϣϯͷͨΊͷϦΫΤετ
Ͳ͏࣮͢Δʁ11protocol PaginationRequestType: AtteRequestType {associatedtype Response: PaginationResponseTypevar page: Int64 { get }}protocol PaginationResponseType {associatedtype Elementvar elements: [Element] { get }var hasNextPage: Bool { get }}• ϓϩτίϧͰ࣮ͷͨΊͷΛ༻ҙ• ϓϩτίϧͰఆٛͨ͠ΠϯλʔϑΣʔε͚ͩͰ࣮
ϖʔδωʔγϣϯ͕ඞཁͳՕॴ125JNFMJOF7JFX$POUSPMMFS"1*$MJFOU1BHJOBUJPO7JFX.PEFM&MFNFOU-JLFE0⒎FST7JFX$POUSPMMFS.FTTBHFT7JFX$POUSPMMFS/PUJpDBUJPOT7JFX$POUSPMMFS$PNNFOUT7JFX$POUSPMMFS
࣮ͷҰݩԽͰಘͨͷ13• ߴ• ҆શ
Ωϟογϡઓུͷมભ
ॳͷΩϟογϡઓུ15• RealmͰΩϟογϡΛऔΔ• ϨεϙϯεRealmͷObjectͱͯ͠දݱ
ॳͷΩϟογϡઓུͷ16Կ͔RealmͷObjectʹͳͬͯ͠·͏ͧ...• Կ͕ӬଓԽ͞Ε͍ͯΔͷ͔ܕ͔ΒผͰ͖ͳ͍• আϙϦγʔ͕ෳࡶ• ϚΠάϨʔγϣϯର͕͘ͳΔ
ͦͦRealm͕୲ͬͯͨͷʁ17• ϨεϙϯεͷӬଓԽ• ը໘ؒͷมߋͷڞ༗
ϨεϙϯεͷӬଓԽ18ࣺͯͯྑ͍ͷύʔδલఏͷػߏͰอଘ͢Δ• LRUͷσΟεΫΩϟογϡͰJSONΛอଘ• อଘ͞ΕͨJSONͱܕʹෆ߹͕͋ΕJSONΛࣺͯΕྑ͍• আϙϦγʔɾϚΠάϨʔγϣϯͷ৺͕ͳ͘ͳͬͨ
ϨεϙϯεͷӬଓԽ19ϨεϙϯεΛද͢ܕͷ੍ݶ͕ͳ͘ͳͬͨ• ҎલObjectMapperΛ͍ͬͯͨ• ݱࡏHimotokiʹҠߦࡁΈ• JSONͷόϦσʔγϣϯͱܕͷΠϯελϯεԽΛҰகͤ͞ΒΕͨ• ෆਖ਼ͳJSONʹΑΔΤϥʔΛہॴతʹཹΊΔ͜ͱ͕Ͱ͖ͨ
ը໘ؒͷมߋͷڞ༗20άϩʔόϧͳSubjectͰڞ༗• ಉظಉظ͕ಘҙͳͷʹͤΔ(RxSwift)
ͪͳΈʹ21RealmࠓͰͬͯ·͢
RealmͱLRUΩϟογϡͷ͍͚22• αʔόʔʹಧ͍͍ͯΔσʔλ: LRUσΟεΫΩϟογϡ• αʔόʔʹಧ͍͍ͯͳ͍σʔλ: Realm
αʔόʔʹಧ͍͍ͯͳ͍σʔλ231. ૹ৴தͷϝοηʔδɾίϝϯτ2. ೖྗதͷϑΥʔϜ
Ωϟογϡʹର͢ΔϙϦγʔ24దࡐదॴ
ࣗಈσϓϩΠ
ࣗಈσϓϩΠͷϞνϕʔγϣϯ26• Pull Request͕Ϛʔδ͞ΕͨΒ୭Ͱಈ࡞֬ೝͰ͖ΔΑ͏ʹ͍ͨ͠• QA͕ྃͨ͠Β͙͢ʹ৹ࠪʹग़ͤΔΑ͏ʹ͍ͨ͠• ୭͔ͷڥʹґଘͤͣʹσϓϩΠͰ͖ΔΑ͏ʹ͍ͨ͠
Travis CI27
ࣗಈσϓϩΠͷϙϦγʔ28• git push͞ΕͨΒΞʔΧΠϒ + σϓϩΠ• Ϗϧυ൪߸Travis CI͕ৼΔ• खݩͰͷΞʔΧΠϒجຊతʹ͠ͳ͍
ڥ29%FQMPZ(BUF%FWFMPQNFOU5FTU'MJHIU 1SPEVDUJPO
Gitϒϥϯν͝ͱͷϏϧυλεΫ30• feature: ςετ• master: ςετ + Development• release: ςετ + Development + Production
Ϗϧυ࣌ؒ31
Ϗϧυ࣌ؒ32
Ͳ͏ͳ͔ͬͨʁ33• ͙͢ಈ࡞Λ֬ೝͯ͠Β͑ΔΑ͏ʹͳͬͨ• Ϗϧυ͍ͯͩͬͯ͘͠͞ݴΘΕͳ͍• ਃָ͕ʹͳͬͨ• ୭ͰਃͰ͖ΔΑ͏ʹͳͬͨ
34·ͱΊ
·ͱΊ35• ָʹ͘։ൃͰ͖ΔΑ͏ʹઃܭΛߟ͍͑ͯΔ• ϛε͕ى͜Γ͍͢ઃܭආ͚Δ• ୭ͰؾܰʹσϓϩΠͰ͖ΔΑ͏ʹ͓ͯ͘͠• ·ͩ·ͩൃల్্...ʂ