Slide 1

Slide 1 text

গਓ਺Ͱ΋ ߈Ίଓ͚Δ freee ͷϞόΠϧνʔϜ laprasDrum

Slide 2

Slide 2 text

@laprasDrum Β΀Β΀ iOS/Android Lead Engineer 2015/4~ freee

Slide 3

Slide 3 text

ձܭ freee ͷ Web / iOS / Android Λ ։ൃͯ͠·͢

Slide 4

Slide 4 text

ैۀһ޲͚ΞϓϦ freee for νʔϜͷ iOS / Android Λ ։ൃͯ͠·͢

Slide 5

Slide 5 text

εϞʔϧϏδωεʹܞΘΔ͢΂ͯͷਓ͕ ૑଄తͳ׆ಈʹϑΥʔΧεͰ͖ΔΑ͏

Slide 6

Slide 6 text

2013/3 2014/2 2014/4 2014/5 2015/9 ϓϩμΫτͷาΈ

Slide 7

Slide 7 text

2013/3 2014/1 νʔϜൃ଍ 2014/2 2014/4 2014/5 2014/7 νʔϜղࢄ 2015/9 2015/4 2016/6 2016/7 2016/12 2017/5 νʔϜͷาΈ

Slide 8

Slide 8 text

2013/3 2014/1 νʔϜൃ଍ 2014/2 2014/4 2014/5 2014/7 νʔϜղࢄ 2015/9 2015/4 2016/6 2016/7 2016/12 2017/5 େ෦෼͕2ਓӡ༻ ۀ຿ҕୗͷํ1ਓʹ ୹ظ͓ؒख఻͍ͯ͠௖͍ͯ·ͨ͠

Slide 9

Slide 9 text

2ਓͩͱ • େ͖ͳػೳΛͻͱΓ͕࡞Δͱ΋͏ͻͱΓ͸ϨϏϡʔͰσο υϩοΫ͞ΕΔ • ౰વ Web ΞϓϦͷਐԽʹ௥ैͰ͖Δ଎౓͕ෆ଍ • ͱ͸͍͑ࢢ৔ͷதͰΞϓϦΛҭ͍ͯͯͨ͘Ίʹ΋ͲΜͲ ΜՁ஋ΛੜΈग़͍͔ͯ͠ͳͯ͘͸͍͚ͳ͍ • ͲΜͲΜ଍ճΓ͕੔Θͳ͘ͳͬͯ͘Δ

Slide 10

Slide 10 text

͕ͩ߈ΊΔ

Slide 11

Slide 11 text

ձܭ freeeʢ2014/2~ʣ • ։ൃظؒ1ϲ݄ • Rx (ReactiveCocoa & RxJava) & MVVM Λॳظ࠾༻ ViewModel User Interactions Web API Utils Web API External Actions Internal Actions ඇಉظॲཧ Gesture ൃՐҎ֎ͷ ಺෦ॲཧ ViewController Activity/Fragment Rx Rx Models

Slide 12

Slide 12 text

freee for νʔϜʢ2015/9~ʣ • ։ൃظؒ1ϲ݄ • Full Swift ʹରͯ͠ Full Kotlin Λॳظ࠾༻ • ౰࣌ͷ Kotlin ͷόʔδϣϯ͸ M9 • flux ΞʔΩςΫνϟͷॳظ࠾༻ • Fat ViewModel Խ͖ͯͨ͠ձܭ freee ʹର͢ΔԾઆݕূ • ViewModel ≒ Action + Store

Slide 13

Slide 13 text

ViewModel User Interactions Web API Utils Web API External Actions Internal Actions ඇಉظॲཧ Gesture ൃՐҎ֎ͷ ಺෦ॲཧ ViewController Activity/Fragment Models

Slide 14

Slide 14 text

Actions User Interactions Dispatcher Web API Utils EmitChange (DataBinding) Web API External Actions Internal Actions NotificationCenter ExecutorService ViewModel ඇಉظॲཧ Gesture ൃՐҎ֎ͷ ಺෦ॲཧ ViewController Activity/Fragment Store Models

Slide 15

Slide 15 text

߈ΊΔͨΊͷ ٕज़ɾΞʔΩςΫνϟ બఆج४

Slide 16

Slide 16 text

·͖͜Έ΍͘͢ શྗ౤ࢿͭͭ͠ӡ༻

Slide 17

Slide 17 text

·͖͜Έ΍͘͢ • αʔόʔαΠυ΍ϑϩϯτΤϯυ෼ִ͚ͯͳ͘։ൃ͢Δ͜ͱ͕ଟ͍ • ॳظ͸ϞόΠϧઐ໳ͷਓ͸গͳ͔ͬͨ • iOS / Android ͱ΋ʹΞʔΩςΫνϟΛ౷Ұ • MVVM ΍ flux ͷڞ௨Խ • ͲͪΒ͔ͷίʔυʹ৮ΕΕ͹ଞํ΋ཧղ͠΍͍͢Α͏ʹ • Kotlin ͷૣظ࠾༻͸ Swift ͱͷ਌࿨ੑʹدͤͨ݁Ռ • Java ίʔυͷࢿ࢈Λ࠶ར༻Մೳɾ͍ͭͰ΋ Java ʹఫୀ͠௚ͤΔ҆৺ײ͕ ܾΊखͱͯ͠͸ڧ͍

Slide 18

Slide 18 text

શྗ౤ࢿͭͭ͠ӡ༻ • ٕज़ɾΞʔΩςΫνϟಋೖ͸ΞϓϦͷӡ༻อकͱฒߦͰ΍Γ͖ͬͯΔ • ౰ͨΓલ͕ͩ඼࣭վળͷखΛࢭΊͯ͸͍͚ͳ͍ • ઃܭࢥ૝ͱ iOS / Android Ͱͷ࣮૷ͷམͱ͠ॴΛ೗Կʹૉૣ͘ਐΊΔ͔ • ࣦഊ͋Γ͖Ͱ߈ΊΔ • ৽͍͠ߟ͑ํɾٕज़͸ࡲΓ੾ΕΔ·Ͱ࢖͍౗͞ͳ͍ͱݟ͑ͯ͜ͳ͍΋ ͷ͕͋Δ • Web ϑϩϯτΤϯυʹݶΒͣ XAML ͷྺ࢙ͳͲ΋ࢀߟʹͭͭ͠ • ϞόΠϧಛ༗ͷը໘ͷϥΠϑαΠΫϧͱরΒ͠߹Θͤͳ͕Β

Slide 19

Slide 19 text

࣌͸ܦͪ ϞόΠϧઐ໳͕4ਓ΋

Slide 20

Slide 20 text

2013/3 2014/1 νʔϜൃ଍ 2014/2 2014/4 2014/5 2014/7 νʔϜղࢄ 2015/9 2015/4 2016/6 2016/7 2016/12 2017/5 ະ஌ͷ4ਓ࣌୅

Slide 21

Slide 21 text

૝૾Ҏ্ͷ։ൃ଎౓ • QA λεΫ͕3~4ഒʢ౰ࣾൺʣ • ϦϦʔε͕ελοΫ͢Δࣄଶ • ࠓ·Ͱख͕ճ͍ͬͯͳ͔ͬͨࣗಈԽɾ଍ճΓ੔උ͕ॏཁʹ • ϏϧυόΠφϦੜ੒ɾετΞ΁ͷࣗಈΞοϓϩʔυΛ Bitrise ʹ • ఆৗతͳਓྗνΣοΫ͸ E2E ςετ΁

Slide 22

Slide 22 text

૝૾Ҏ্ͷ։ൃ଎౓ • QA λεΫ͕3~4ഒʢ౰ࣾൺʣ • ϦϦʔε͕ελοΫ͢Δࣄଶ • ࠓ·Ͱख͕ճ͍ͬͯͳ͔ͬͨࣗಈԽɾ଍ճΓ੔උ͕ॏཁʹ • ϏϧυόΠφϦੜ੒ɾετΞ΁ͷࣗಈΞοϓϩʔυΛ Bitrise ʹ • ఆৗతͳਓྗνΣοΫ͸ E2E ςετ΁

Slide 23

Slide 23 text

No content

Slide 24

Slide 24 text

ࣗಈԽɾࣗಈԽɾࣗಈԽ • BuildVersion ΍ versionName ͷखಈΞοϓσʔτແବ… • lane λεΫԽ • iOS: branch ໊ͷόʔδϣϯͰ increment_version_number • Android: branch ໊ͷόʔδϣϯͰ increment_version_name master 10.2.3 Bitrise ͕ Webhook ͯ͠ lane λεΫΛ࣮ߦ

Slide 25

Slide 25 text

ࣗಈԽɾࣗಈԽɾࣗಈԽ • ϦϦʔε΋ࣗಈԽ͍ͨ͠ͳ… • Android ͸ apk Λ Developer Console ͷ α ൛ʹࣗಈΞοϓϩʔυ͢ΔΑ͏ʹ lane Խ • ͋ͱ͸ஈ֊తϦϦʔεͰΫϥογϡϨϙʔτΛݟकΓͭͭ੡඼Խ • ਖ਼ࣾһ͕૿͑·ͨ͠ʂདྷि͔ΒΠϯλʔϯੜདྷ·͢ʂ • iOS ͩͱূ໌ॻͷॳظઃఆͱ͔େม… • fastlane match ͰηοτΞοϓΛࣗಈԽ ✌

Slide 26

Slide 26 text

ࡶ຿΋ࣗಈԽ

Slide 27

Slide 27 text

͓ΘΓʹ

Slide 28

Slide 28 text

͜͜·Ͱ߈ΊΒΕΔͷ͸ freee ͕ ֤ΤϯδχΞʹ ࡋྔΛ༩͑ͯ͘Ε͍ͯΔ͔Β

Slide 29

Slide 29 text

͔ͩΒͦ͜ ϓϩμΫτͷํ޲ੑ΋ݟਾ্͑ͨͰ ࠓେࣄͳ͜ͱΛ ֤ʑͷ൑அͰऔΓ૊Έ࣮ݱ͢Δ͜ͱ͕Ͱ͖Δ

Slide 30

Slide 30 text

͜Ε͔Β΋ ര଎Ͱ߈Ί͍͖ͯ·͢