Upgrade to Pro — share decks privately, control downloads, hide ads and more …

US 版 Mercari をまるごと1から作り直した話

Naoki ISHIKAWA
September 17, 2017

US 版 Mercari をまるごと1から作り直した話

iOSDC 2017 in Tokyo, September 16-17, 2017
https://iosdc.jp/2017/node/1438

Naoki ISHIKAWA

September 17, 2017
Tweet

More Decks by Naoki ISHIKAWA

Other Decks in Technology

Transcript

  1. US ൛ Mercari Λ·Δ͝ͱ
    1͔Β࡞Γ௚ͨ͠࿩
    iOSDC Japan 2017
    Naoki Ishikawa @jarinosuke

    View Slide

  2. ࣗݾ঺հ
    • ੴ઒௚थ (@jarinosuke)
    • Mercari, Inc (joined at 2016/05)
    •iOS Engineer

    View Slide

  3. աڈͷεϥΠυ
    • Drink Meetup with Mercari iOS(2016೥6݄)
    • https://speakerdeck.com/jarinosuke/drink-meetup-with-
    mercari-number-36
    • Mercari Day 2017(2017೥1݄)
    • https://speakerdeck.com/jarinosuke/mercari-day-2017

    View Slide

  4. Agenda
    1. ࡞Γ௚ͨ͠എܠɺ΋͘͠͸ੵΈॏͶΒΕͨྺ࢙
    2. Ͳ͏΍ͬͯ࡞Γ௚ͨ͠ͷ͔ʢώτɺ࣌ؒɺํ๏ʣ
    3. ࡞Γ௚ͯ͠ղܾͨ͠ίτ

    View Slide

  5. 1.࡞Γ௚ͨ͠എܠɺ
    ΋͘͠͸ੵΈॏͶΒΕͨྺ࢙

    View Slide

  6. mercari-ios ͷྺ࢙
    !
    " 2016/11
    master

    View Slide

  7. mercari-ios ͷྺ࢙
    !
    " 2016/11ࠒ
    master
    jp/master

    View Slide

  8. ιʔείʔυ෼ׂ
    • ϚϧνιʔεϚϧνόΠφϦ
    • ୯Ұ repos Ͱ branch ͰϦʔδϣϯຖʹ෼ׂ

    View Slide

  9. mercari-ios ͷྺ࢙
    !
    " 2016/11ࠒ
    master
    jp/master
    2017/4த०
    ໿3,4ϲ݄

    View Slide

  10. ιʔείʔυ෼ׂͨ͠ޙͷ3,4ϲ݄
    • ϋϯόʔΨʔϝχϡʔ->λϒԽ
    • ঎඼ϖʔδͷϦχϡʔΞϧ
    • ϓϥΠϕʔτνϟοτػೳ
    • ͳͲͳͲ…
    • ୹͍αΠΫϧͰͨ͘͞Μͷ৽ػೳΛϦϦʔεͰ͖ͨ

    View Slide

  11. ґવͱͯ͠࢒Δ՝୊
    • Ϧʔδϣϯ෼ذɺABςετͷංେԽ
    • Objective-Cͱܕ
    • ΞʔΩςΫνϟ(MVC, MVVM)͕ࠞࡏ
    मਖ਼ʹରͯ͠ͷίετ͕ͱͯ΋ߴ͘ͳ͖͍ͬͯͯͨ

    View Slide

  12. Ϧʔδϣϯ෼ذɺABςετͷංେԽ
    • if (isUS) {} else {}
    • if (AB_improve_xxx) {} else {}
    • if (isUS) { if (AB) {} else {} } else { if (AB) {} else {} } * ͋͘·ͰྫͰ͢
    ࣮૷ίετ↗ QAίετ↗

    View Slide

  13. Objective-Cͱܕ
    • class A { init(with string: String) }
    • NSDictionary *data;
    • [[A alloc] initWithString:data[@“id”]];
    • ಈతܕ෇͚ͱ੩తܕ෇͚͕ࠞࡏ͠ɺ༧ظͤ͵Ϋϥογϡ

    View Slide

  14. ΞʔΩςΫνϟ(MVC, MVVM)͕ࠞࡏ
    • ϝϧΧϦ iOS ͸2013೥ʹϦϦʔε(iOS7͕ϦϦʔε͞Εͨࠒ)
    • ग़඼ը໘VC Created by Shinichiro Oba on 2013/04/20
    • ObjC/Swift, MVC/MVVM ͷڞଘʢࠞࡏʣ

    View Slide

  15. mercari-ios ͷྺ࢙
    !
    " 2016/11ࠒ
    master
    jp/master
    2017/4த०

    View Slide

  16. mercari-ios ͷྺ࢙
    !
    " 2016/11ࠒ
    master
    jp/master
    2017/4த०

    View Slide

  17. ⇧ + ⌘ + N

    View Slide

  18. ⇧ + ⌘ + N
    Create New Project

    View Slide

  19. 2.Ͳ͏΍ͬͯ࡞Γ௚͔ͨ͠
    ʢώτɺ࣌ؒɺํ๏ʣ

    View Slide

  20. νʔϜߏ੒
    • kitasuke
    • chuganzy
    • yoichi
    • jarinosuke

    View Slide

  21. νʔϜߏ੒
    • kitasuke Introducing protobuf in Swift
    • chuganzy ϝϧΧϦͰ࣮ࢪͨ͠աڈ࠷େن໛ͷABςετʮυϩϫʔ
    vs Լλϒʯͷ෣୆ཪ
    • yoichi ϞόΠϧΞϓϦͰࠔΒͳ͍ΤϥʔϋϯυϦϯάͱϩΪϯάͷ
    ϕετϓϥΫςΟε
    • jarinosuke US ൛ Mercari Λ·Δ͝ͱ1͔Β࡞Γ௚ͨ͠࿩

    View Slide

  22. ࣮૷ػೳ
    • Tab, Home, Login/Signup, Network, Overall architecture
    • Checkout, Search, WebView
    • DI, Item Detail, ReactNative
    • Listing, Local DB, Migration from current app
    ΊͪΌͪ͘Ό͋Δ

    View Slide

  23. ࡞ۀ෼୲
    • Tab, Home, Login/Signup, Network, Overall architecture
    • Checkout, Search, WebView
    • DI, Item Detail, ReactNative
    • Listing, Local DB, Migration from current app

    View Slide

  24. ։ൃεέδϡʔϧ
    • 4݄த०։ൃ։࢝
    • 6݄຤ϦϦʔε໨ඪ
    • ࣮࣭2ϲ݄൒

    View Slide

  25. View Slide

  26. ࡞ۀλΠϜϥΠϯ
    4݄ 5݄ 6݄
    Checkout WebView Search
    Tab, Home, Login/Signup, Network, Overall architecture
    DI, Item Detail ReactNative
    LocalDB Listing Migration

    View Slide

  27. ༏ઌͨ͠ίτ
    • ͓٬༷͕ϦχϡʔΞϧΛҙࣝͤͣ࢖͏͜ͱ͕Ͱ͖Δ
    • ΞʔΩςΫνϟΛ౷Ұ͢Δɺςελϒϧͳߏ੒Λҡ࣋͢Δ
    • ϦϦʔε͓ͯ͠٬༷ʹ৽͍͠ΞϓϦΛಧ͚Δ

    View Slide

  28. ༏ઌ͠ͳ͔ͬͨίτ
    • ॆ෼ͳςετίʔυ
    • iPad ରԠ
    • طଘΞϓϦͷ࢓༷ʢθϩ͔Βߟ͑Δʣ

    View Slide


  29. before after

    View Slide

  30. 3.࡞Γ௚ͯ͠ղܾͨ͠ίτ

    View Slide

  31. طଘʹ༷͋ͬͨʑͳϢʔεέʔεΛ࡟আ
    • Ϧʔδϣϯ("/!)ʹΑΔίʔυ෼ذ
    • 20ݸऑͷABςετʹΑΔίʔυ෼ذ
    • ΞϓϦέʔγϣϯϩδοΫͷΈʹूதͰ͖ΔΑ͏ʹͳͬͨ

    View Slide

  32. Swift/protobufͰܕ҆શ
    before
    after
    Objective-C Free

    View Slide

  33. Swift/protobufͰܕ҆શ
    • protocol buffer
    • API Request/Response Ͱѻ͏ Model ͱͦͷϓϩύςΟͷܕ͕
    อূ͞Εͨ
    • ৄ͘͠͸ kitasuke ͞Μͷ͜ͷهࣄ
    • kitasuke Introducing protobuf in Swift

    View Slide

  34. BitriseʹҠߦ͠ϝϯςφϯείετ࡟ݮ
    • ࠓ·Ͱ͸ࣗલͷ Jenkins on Mac
    • සൟʹωοτϫʔΫʹΞΫηεͰ͖ͣʹམͪΔ
    • ֎෦IP͔ΒΞΫηεͰ͖ͳ͍
    • Xcode ͷόʔδϣϯΞοϓ

    View Slide

  35. Swinject ʹΑΔ DI Ͱ Testable ͳߏ੒ʹ
    • ΞϓϦશମͷΞʔΩςΫνϟ΋ DI Λҙࣝͨ͜͠ͱʹΑΓ౷Ұ͞
    Εͨ
    • Author ͷ yoichi ͞ΜࣗΒಋೖͯ͘͠Εͨ
    • ViewModel ʹରͯ͠ Service Λ Injectable ͳߏ੒ʹͨ͠

    View Slide

  36. Swinject ʹΑΔ DI Ͱ Testable ͳߏ੒ʹ
    ViewModel
    struct ViewModel {
    let service: Service
    typealias Dependency = Service
    init(dependency: Dependency) {
    service = dependency
    }
    }
    ֎෦ʹґଘ͍ͯ͠Δ Service ͸ protocol
    ʹ੾Γग़͠ɺMock Ͱ͖ΔΑ͏ʹઃܭ

    View Slide

  37. Swinject ʹΑΔ DI Ͱ Testable ͳߏ੒ʹ
    Mercari Tech Conf 2017

    US൛Mercari iOSΞϓϦͷΞʔΩςΫνϟͱDependency Injection

    View Slide

  38. ͓ΘΓʹ

    View Slide

  39. ืू
    https://open.talentio.com/
    1/c/mercari/requisitions/
    detail/4256

    View Slide