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

High 意識 Android - Mercari Day

High 意識 Android - Mercari Day

Presentation at #mercariday

Motohiro Takayama

January 20, 2017
Tweet

More Decks by Motohiro Takayama

Other Decks in Technology

Transcript

  1. High ҙࣝ Android
    mootoh

    View Slide

  2. FAQ

    View Slide

  3. : ϝϧΧϦͬͯ΋͏

    ΞϓϦ׬੒ͯ͠Δ͠

    ΍Δ͜ͱͳ͍Μ͡Όͳ͍ͷ?

    View Slide

  4. A: ·ͩ·ͩ·ͩ·ͩ
    ·ͩ·ͩ·ͩ·ͩ
    ͋Δ

    View Slide

  5. 2016/02~
    • νϟϨϯδ
    • Χϧνϟʔ
    • ະདྷ

    View Slide

  6. 2016

    View Slide

  7. Stats
    % git diff --shortstat `git log --pretty=%H --since 'last year' | tail -n 1`
    → 2,029 files changed, +385,707, -170,628 ■■■■
    % git log --pretty=%H --since 'last year' | wc -l
    → 4,049 commits

    View Slide

  8. Team of 4 in "#
    #
    "

    View Slide

  9. Team of 4→7 in "#$
    $
    #
    "

    View Slide

  10. ެ҆9՝

    View Slide

  11. “զʑͷؒʹ͸ɺνʔϜϓϨʔͳͲͱ͍͏
    ౎߹ͷΑ͍ݴ͍༁͸ଘࡏͤΜɻ
    ͋Δͱ͢Ε͹ελϯυϓϨʔ͔Βੜ͡Δɺ
    νʔϜϫʔΫ͚ͩͩɻ”
    — ߥרେี, 2002

    View Slide

  12. ެ҆9՝Ϟσϧ
    • ߈֪ػಈୂ S.A.C
    • ཱࣗͨ͠ଟ༷ͳϝϯόʔ
    • ݸʑͷ؍఺͔ΒϓϩμΫτ/૊৫ͷվળΛ

    ࣮ફ͢Δ

    View Slide

  13. FAQ

    View Slide

  14. : ̓ਓ΋ΤϯδχΞ͍Ε͹
    े෼Ͱ͠ΐ

    View Slide

  15. A: ·ΔͰ଍Γͳ͍

    #, ", $ ͦΕͧΕʹ෼͔Ε͍ͯΔ
    • ϓϩδΣΫτ͋ͨΓ 1~2ਓ
    • ΋ͬͱ͍Ε͹΍ΕΔ͜ͱΛ૿΍ͤΔ

    View Slide

  16. Challenges

    View Slide

  17. View Slide

  18. ଠฏ༸Λ·͙ͨ Code Review
    " PR
    # Review
    " Revise
    # Review # LGTM
    " Revise " Merge
    ☀ ☀ ☀ ☀

    PR ͷ଺ཹ͕࣌ؒ௕͘ͳΔ → ϦϦʔε஗

    View Slide

  19. Solution A

    View Slide

  20. 6:30am standup meeting

    " ϝϯόʔ͕Έͳ༮ࣇ࣋ͪͩͬͨ

    → ڧ੍ૣى͖
    • # ʹ༏͍͠ (ன)
    • Նͩͬͨ → ே໌Δ͍ͷͰૣى͖͠΍͍͢

    → ࢼ͠ʹ΍ͬͯΈΑ͏

    View Slide

  21. ݁Ռ:

    • Sync ͷճ਺͕૿͑ͨ͜ͱʹΑΓɺϨϏϡʔͷޮ཰
    ্͕͕ͬͨ


    • ࢠ͕6am ʹى͖ΔͷͰग़੮Ͱ͖ͳ͍
    • ҙਤͷ֬ೝͳͲ͸Ͱ͖Δ͕ PR ϕʔεͳͷͰ async

    View Slide

  22. Solution B
    https://screenhero.com

    View Slide

  23. ScreenHero
    • ϦϞʔτϖΞϓϩ
    • protected void synchronized review { … }
    • ࣌ؒ͸߹ΘͤΔඞཁ͕͋Δ

    View Slide

  24. ݁Ռ
    • ίϛϡχέʔγϣϯͷଳҬ͕޿͍
    • ࢖͍෼͚
    • ॏ͍ϨϏϡʔͷ࣌ʹ໾ཱͭ
    • PR Ͱ2-3౓΍ΓऔΓͯͯ͠Β͕͔ͪ͋ͳ͍ →
    ͭͳ͍Ͱνϟνϟͬͱղܾ

    View Slide

  25. #
    "
    $
    Or…

    View Slide

  26. ๺ۃ Meeting

    ཱྀ͍͍ͩͨඅ30~100ສ
    • ͍͍ͩͨ౳ڑ཭

    פ͍⛄️

    View Slide

  27. ஌ݟ
    • ૣى͖͸Ωπ͍͕໾ʹཱͭ
    • ෳࡶ౓ʹԠͯ͡ίϛϡχέʔγϣϯͷଳҬΛม͑Δ
    • ͕࣌ࠩൃੜ͠ͳ͍Α͏ʹνʔϜΛ෼͚Δͷ΋
    • ๺ۃΛఘΊͳ͍❄

    View Slide

  28. Challenges

    View Slide

  29. https://commons.wikimedia.org/wiki/File:Adobe_guadalupe_wine_barrel.jpg
    ख़੒

    View Slide

  30. ख़੒ίʔυ
    • ϓϩμΫτ։ൃΛ࠷଎ͰલʹਐΊ͖ͯͨ
    • 3೥ख़੒ (౰࣌)
    • ݹΊͷςΫϊϩδ
    • (ಛʹ)৽͍͠ϝϯόʔʹͱͬͯมߋͮ͠Β͍

    View Slide

  31. ݹΊͷςΫϊϩδ 34
    • Networking:
    • HttpUrlConnection / Apache HttpClient

    with ൿ఻ͷϨγϐ
    • Async Operation:
    • Callback Interface / EventBus
    • Singletons
    • Giant Activities

    View Slide

  32. →एฦΓ 5
    • Networking: okhttp
    • Async Operation: RxJava
    • Singletons: Dagger2
    • Giant Activities: MVVM

    View Slide

  33. ϦϑΝΫλϦϯά͍͕ͨ͠…
    • Ҋ݅։ൃͰύπύπ
    • ϦϑΝΫλϦϯά͢Δ͜ͱͰσάϨ͢Δ͜ͱ
    ͕͋ͬͨ
    • QA ͔Βͷ৴པஷۚ㽊

    View Slide

  34. ࡞ઓ⚽
    • Ҋ݅ͷεέδϡʔϧʹ৫ΓࠐΉ
    • ϦϑΝΫλͨ͠ํ͕ૣ͍ূڌΛ஝ੵ͢Δ
    • ςετͰσάϨΛ๷ࢭ͠ɺ৴པΛஷΊΔ

    View Slide

  35. ஌ݟ
    • ৽͍͠ػೳ࣮૷Λ͢ΔલʹϦϑΝΫλϦϯά
    • εέδϡʔϧʹ৫ΓࠐΉ
    • ͡Θ͡Θ޿͛Δ
    • ಆ͍ଓ͚ΔɺఘΊͳ͍

    View Slide

  36. Challenges

    View Slide

  37. #
    "
    1 → 8 0 → 1
    Product Phase

    View Slide

  38. $ #
    "
    0 → 1 8 → 10 1 → 8
    Product Phase

    View Slide

  39. Repository # " + $
    • ONE OK REPOSITORY
    • flavor Ͱ෼͚͍ͯͨ

    View Slide

  40. ໰୊
    • มߋͮ͠Β͍
    • isJP(), isUS(), isUK()
    • #޲͚ͷมߋΛ͍͚ͨͩ͠ͳͷʹ"ͷίʔυΛؾʹ͠ͳ͍ͱ͍͚ͳ͍
    • ࣌ࠩ໰୊ (ઌड़)
    • QA େม
    • Өڹൣғ: #޲͚ͷมߋ͚ͩͲɺ΄Μͱʹ"͸յΕͯͳ͍?
    • Region ͝ͱͰ phase ͕ҟͳΔ
    • ༏ઌ౓΍։ൃελΠϧ΋ҟͳΔ

    View Slide

  41. Solutions
    • ͻͱ·ͣ Branch Λ෼͚ͨ ⎇
    • Fork ͨ͠Β໭Δͷ͸ࠔ೉
    • ΋ͬͱ Region ͕૿͑ͨΒ?

    View Slide

  42. Challenges

    View Slide

  43. ID ج൫

    View Slide

  44. ID ج൫
    • Single Sign On తͳ΋ͷ
    • Mercari Souzoh
    • iOS / Android ͷϥΠϒϥϦॻ͘͜ͱʹͳͬͨ

    View Slide

  45. ݸਓతνϟϨϯδ
    • Kotlin
    • ຊମΞϓϦʹಋೖ͸᪳᪯ΘΕΔ͕ϥΠϒϥϦʹͳΒ
    • gRPC
    • HTTP/2, Protobuf, ΫϩεϓϥοτϑΥʔϜ

    View Slide

  46. gRPC "# ໰୊

    #-"Ͱ gRPC ௨৴͢Δͱࢗ͞ΔσόΠε͕

    " Ͱ͸໰୊͕ൃੜ͠ͳ͍
    • ϥΠϒϥϦͷԞਂ͍ͱ͜Ζʹ໰୊͕͋Γͦ͏
    • ී௨ͷ௨৴͸໰୊͕ͳ͍
    • ͔͕࣌ؒ͠͠ͳ͍⌛

    View Slide

  47. gRPC-gateway ?
    • gRPC ͷαʔϏεʹ RESTful JSON API ͰΞΫ
    ηεͰ͖Δ
    • ී௨ͷ HTTPS ΞΫηε͸ͭͳ͕Δ
    • ໰୊ճආ

    View Slide

  48. ஌ݟ
    • Kotlin

    ϥΠϒϥϦɺςετͳͲ͔Β߈ΊΔ → μϝʔδগͳ͍

    ϨϏϡʔ͞ΕͮΒ͍
    • gRPC
    • REST ͸ಀ͕͛ͩ໾ʹཱͭ
    • ίϯτϦϏϡʔγϣϯͰ͖Δ༨༟Λ࢒͓ͯ͘͠

    View Slide

  49. Future

    View Slide

  50. ·ͩ·ͩ·ͩ·ͩ·ͩ·ͩ͋Δ
    • ܻҧ͍ʹͨ͘͞Μͷ A/B ςετΛ

    ؆୯ʹճͤΔ࢓૊Έ
    • ଞ Region ্ཱͪ͛
    • Inter-Region ചങ
    • 3D ग़඼ɺ VR γϣοϐϯά (ໝ૝)

    View Slide

  51. Wrap Up

    View Slide

  52. Wrap up
    • ·ͩ·ͩνϟϨϯδ͕͋Δ
    • ٕज़త & ϓϩμΫτత
    • ެ҆̕՝Ϟσϧ

    View Slide

  53. “و༷ɺ͍͍࿹Λ͍ͯ͠Δͳɻ
    ࠓ͔Βࢲͷ෦ԼʹͳΕɻ”
    — ૲ಽૉࢠ, 2004

    View Slide

  54. JOIN US

    View Slide