Presentation at #mercariday
High ҙࣝ Androidmootoh
View Slide
FAQ
: ϝϧΧϦͬͯ͏ ΞϓϦͯ͠Δ͠ Δ͜ͱͳ͍Μ͡Όͳ͍ͷ?
A: ·ͩ·ͩ·ͩ·ͩ·ͩ·ͩ·ͩ·ͩ͋Δ
2016/02~• νϟϨϯδ• Χϧνϟʔ• ະདྷ
2016
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
Team of 4 in "##"
Team of 4→7 in "#$$#"
ެ҆9՝
“զʑͷؒʹɺνʔϜϓϨʔͳͲͱ͍͏߹ͷΑ͍ݴ͍༁ଘࡏͤΜɻ͋Δͱ͢ΕελϯυϓϨʔ͔Βੜ͡ΔɺνʔϜϫʔΫ͚ͩͩɻ”— ߥרେี, 2002
ެ҆9՝Ϟσϧ• ߈֪ػಈୂ S.A.C• ཱࣗͨ͠ଟ༷ͳϝϯόʔ• ݸʑͷ؍͔ΒϓϩμΫτ/৫ͷվળΛ ࣮ફ͢Δ
: ̓ਓΤϯδχΞ͍ΕेͰ͠ΐ
A: ·ΔͰΓͳ͍ •#, ", $ ͦΕͧΕʹ͔Ε͍ͯΔ• ϓϩδΣΫτ͋ͨΓ 1~2ਓ• ͬͱ͍ΕΕΔ͜ͱΛ૿ͤΔ
Challenges
ଠฏ༸Λ·͙ͨ Code Review" PR# Review" Revise# Review # LGTM" Revise " Merge☀ ☀ ☀ ☀ PR ͷཹ͕࣌ؒ͘ͳΔ → ϦϦʔε
Solution A
6:30am standup meeting•" ϝϯόʔ͕Έͳ༮ࣇ࣋ͪͩͬͨ → ڧ੍ૣى͖• # ʹ༏͍͠ (ன)• Նͩͬͨ → ே໌Δ͍ͷͰૣى͖͍͢͠ → ࢼ͠ʹͬͯΈΑ͏
݁Ռ: • • Sync ͷճ͕૿͑ͨ͜ͱʹΑΓɺϨϏϡʔͷޮ্͕͕ͬͨ•• ࢠ͕6am ʹى͖ΔͷͰग़੮Ͱ͖ͳ͍• ҙਤͷ֬ೝͳͲͰ͖Δ͕ PR ϕʔεͳͷͰ async
Solution Bhttps://screenhero.com
ScreenHero• ϦϞʔτϖΞϓϩ• protected void synchronized review { … }• ࣌ؒ߹ΘͤΔඞཁ͕͋Δ
݁Ռ • ίϛϡχέʔγϣϯͷଳҬ͕͍• ͍͚• ॏ͍ϨϏϡʔͷ࣌ʹཱͭ• PR Ͱ2-3ΓऔΓͯͯ͠Β͕͔ͪ͋ͳ͍ →ͭͳ͍Ͱνϟνϟͬͱղܾ
#"$Or…
ۃ Meeting • ཱྀ͍͍ͩͨඅ30~100ສ• ͍͍ͩͨڑ• פ͍⛄️
ݟ• ૣى͖Ωπ͍͕ʹཱͭ• ෳࡶʹԠͯ͡ίϛϡχέʔγϣϯͷଳҬΛม͑Δ• ͕࣌ࠩൃੜ͠ͳ͍Α͏ʹνʔϜΛ͚Δͷ• ۃΛఘΊͳ͍❄
https://commons.wikimedia.org/wiki/File:Adobe_guadalupe_wine_barrel.jpgख़
ख़ίʔυ• ϓϩμΫτ։ൃΛ࠷ͰલʹਐΊ͖ͯͨ• 3ख़ (࣌)• ݹΊͷςΫϊϩδ• (ಛʹ)৽͍͠ϝϯόʔʹͱͬͯมߋͮ͠Β͍
ݹΊͷςΫϊϩδ 34• Networking:• HttpUrlConnection / Apache HttpClient with ൿͷϨγϐ• Async Operation:• Callback Interface / EventBus• Singletons• Giant Activities
→एฦΓ 5• Networking: okhttp• Async Operation: RxJava• Singletons: Dagger2• Giant Activities: MVVM
ϦϑΝΫλϦϯά͍͕ͨ͠…• Ҋ݅։ൃͰύπύπ• ϦϑΝΫλϦϯά͢Δ͜ͱͰσάϨ͢Δ͜ͱ͕͋ͬͨ• QA ͔Βͷ৴པஷۚ㽊
࡞ઓ⚽• Ҋ݅ͷεέδϡʔϧʹ৫ΓࠐΉ• ϦϑΝΫλͨ͠ํ͕ૣ͍ূڌΛੵ͢Δ• ςετͰσάϨΛࢭ͠ɺ৴པΛஷΊΔ
ݟ• ৽͍͠ػೳ࣮Λ͢ΔલʹϦϑΝΫλϦϯά• εέδϡʔϧʹ৫ΓࠐΉ• ͡Θ͡Θ͛Δ• ಆ͍ଓ͚ΔɺఘΊͳ͍
#"1 → 8 0 → 1Product Phase
$ #"0 → 1 8 → 10 1 → 8Product Phase
Repository # " + $• ONE OK REPOSITORY• flavor Ͱ͚͍ͯͨ
• มߋͮ͠Β͍• isJP(), isUS(), isUK()• #͚ͷมߋΛ͍͚ͨͩ͠ͳͷʹ"ͷίʔυΛؾʹ͠ͳ͍ͱ͍͚ͳ͍• ࣌ࠩ (ઌड़)• QA େม• Өڹൣғ: #͚ͷมߋ͚ͩͲɺ΄Μͱʹ"յΕͯͳ͍?• Region ͝ͱͰ phase ͕ҟͳΔ• ༏ઌ։ൃελΠϧҟͳΔ
Solutions• ͻͱ·ͣ Branch Λ͚ͨ ⎇• Fork ͨ͠ΒΔͷࠔ • ͬͱ Region ͕૿͑ͨΒ?
ID ج൫
ID ج൫• Single Sign On తͳͷ• Mercari Souzoh• iOS / Android ͷϥΠϒϥϦॻ͘͜ͱʹͳͬͨ
ݸਓతνϟϨϯδ• Kotlin• ຊମΞϓϦʹಋೖ᪳ΘΕΔ͕ϥΠϒϥϦʹͳΒ• gRPC• HTTP/2, Protobuf, ΫϩεϓϥοτϑΥʔϜ
gRPC "# •#-"Ͱ gRPC ௨৴͢Δͱ͞ΔσόΠε͕•" Ͱ͕ൃੜ͠ͳ͍• ϥΠϒϥϦͷԞਂ͍ͱ͜Ζʹ͕͋Γͦ͏• ී௨ͷ௨৴͕ͳ͍• ͔͕࣌ؒ͠͠ͳ͍⌛
gRPC-gateway ?• gRPC ͷαʔϏεʹ RESTful JSON API ͰΞΫηεͰ͖Δ• ී௨ͷ HTTPS ΞΫηεͭͳ͕Δ• ճආ
ݟ• Kotlin• ϥΠϒϥϦɺςετͳͲ͔Β߈ΊΔ → μϝʔδগͳ͍• ϨϏϡʔ͞ΕͮΒ͍• gRPC• REST ಀ͕͛ͩʹཱͭ• ίϯτϦϏϡʔγϣϯͰ͖Δ༨༟Λ͓ͯ͘͠
Future
·ͩ·ͩ·ͩ·ͩ·ͩ·ͩ͋Δ• ܻҧ͍ʹͨ͘͞Μͷ A/B ςετΛ ؆୯ʹճͤΔΈ• ଞ Region ্ཱͪ͛• Inter-Region ചങ• 3D ग़ɺ VR γϣοϐϯά (ໝ)
Wrap Up
Wrap up• ·ͩ·ͩνϟϨϯδ͕͋Δ• ٕज़త & ϓϩμΫτత• ެ҆̕՝Ϟσϧ
“و༷ɺ͍͍Λ͍ͯ͠Δͳɻࠓ͔Βࢲͷ෦ԼʹͳΕɻ”— ಽૉࢠ, 2004
JOIN US