Slide 1

Slide 1 text

ΞϓϦ͕ࠃࡍԽ͢Δ࣌ by punchdrunker shibuya.apk#18

Slide 2

Slide 2 text

punchdrunker ࣣඌ و࢙ Web੍࡞ձࣾۈ຿Λܦͯ2011೥ϛΫγΟೖࣾɻ 2011 - 2016 : SNS mixiͷΞϓϦ։ൃɺϚωδϝϯτ 2016 - ݱࡏ : Ո଒ΞϧόϜ ΈͯͶͷ։ൃશൠ (iOS / Android / Rails)

Slide 3

Slide 3 text

INDEX 1. ΈͯͶʹ͍ͭͯ 2. ΧϧνϟϥΠζ 3. ଟݴޠԽ 4. ஍ҬԽ 5. ͦͷଞ 0 ͓࿩͢͠Δ͜ͱ

Slide 4

Slide 4 text

ABOUT 1 ΈͯͶʹ͍ͭͯ

Slide 5

Slide 5 text

ABOUT 1 ΈͯͶʹ͍ͭͯ

Slide 6

Slide 6 text

ABOUT 1 ΈͯͶʹ͍ͭͯ ੈքதͷՈ଒ͷ“͜͜ΖͷΠϯϑϥ”Λͭ͘Δ ࢠҭͯΛ΋ͬͱָ͘͠͠ɺݽಠͳࢠҭͯΛͳ͘͢ ͦͷࢠͷਓੜΛ·Δ͝ͱ࢒ͤΔՈ଒ΞϧόϜΛ

Slide 7

Slide 7 text

ABOUT 2015೥αʔϏε։࢝ 180ສϢʔβʔ ૯Ξοϓϩʔυຕ ਺ԯສຕ ύύɺϚϚ͕࢖͍ͨ͘ͳΔΑ͏ͳ ελΠϦογϡ͞ & ͍͡͡ɺ͹͋͹Ͱ΋ ࢖͑Δ؆୯͞ Google Play StoreͷϢʔβʔධՁ ˑ4.672 ධՁ૯਺19,310 1 ΈͯͶʹ͍ͭͯ

Slide 8

Slide 8 text

ABOUT ΈͯͶϑΥτϒοΫ 2016೥αʔϏε։࢝ ݄ؒ໿30,000࡭Λൢച ϫϯίΠϯͰങ͑ΔΧδϡΞϧ͞ ๩͍͠ύύɾϚϚʹ޲͚ͨࣗಈ࡞੒͕ಛ௃ 1 ΈͯͶʹ͍ͭͯ

Slide 9

Slide 9 text

ABOUT ࠃࡍԽ 2017೥7݄ΑΓӳޠදࣔʹରԠ ϑΥτϒοΫͷւ֎ൃૹ͸ࠓޙରԠ༧ఆ 1 ΈͯͶʹ͍ͭͯ

Slide 10

Slide 10 text

CULTURIZATION 2 จԽͷҧ͍

Slide 11

Slide 11 text

CULTURIZATION 2 จԽͷҧ͍ ಉੑࠗ

Slide 12

Slide 12 text

CULTURIZATION 2 จԽͷҧ͍ ΞϓϦͷ໊લ ΞϝϦΧਓɺmitene͕ಡΊͳ͍໰୊ൃੜ ౤ථ΍ձٞΛܦͯɺ໊લΛܾΊΔͷʹ2िؒ͘Βֻ͍ ͔ͬͨɻ ϚΠςΟʔϯ ϊΡ Ποπϛɾςɾω Ξʔϋʔ

Slide 13

Slide 13 text

MULTILINGUALIZATION 3 ଟݴޠԽ

Slide 14

Slide 14 text

೔ӳ2ϲࠃޠ ೔ຊޠҎ֎͸ӳޠѻ͍ɻ ॳظϦϦʔεͰ͸୺຤ͷϩέʔϧ͔Βࣗಈ൑ผ͍ͯ͠ ͕ͨɺϢʔβʔ͔Βͷཁ๬ͰઃఆՄೳʹ͢ΔରԠΛ ϦϦʔεɻ ୺຤͸ӳޠ͕ͩɺΞϓϦ͸೔ຊޠͰ࢖͍͍ͨਓ͕Ұ ఆ਺͍Δɻ MULTILINGUALIZATION 3 ଟݴޠԽ

Slide 15

Slide 15 text

ෳ਺ܗ Android͸ඪ४ͰPluralରԠ͕؆୯ // plurals.xml %1$d photo %1$d photos // usage getResources() .getQuantityString(R.plurals.photo, quantity, count) // ஫ҙ: quantity͕0ͷ࣌͸”other”͕ਖ਼͍͠(15෼ϋϚͬͨ) MULTILINGUALIZATION 3 ଟݴޠԽ

Slide 16

Slide 16 text

ෳ਺ܗ Xcode͸ඪ४ͰPluralରԠ͍ͯ͠Δ͕ɺdictionaryͳͷͰ΍΍μϧ͍ // Localizable.stringsdict number_of_days NSStringLocalizedFormatKey %#@value@ value NSStringFormatSpecTypeKey // ܕ NSStringPluralRuleType NSStringFormatValueTypeKey d one // ୯਺ %d day remaining other // ෳ਺ %d days remaining MULTILINGUALIZATION 3 ଟݴޠԽ

Slide 17

Slide 17 text

ෳ਺ܗ AndroidͬΆ͍ఆٛͰ࢖͑ΔΑ͏ʹͪΐͬͱ࣮ͨ͠૷ // Localizable.strings “photo.one”="%d photo”; “photo.other”="%d photos"; // usage func pluralString(key: String, quantity: Int) -> String { let suffix: String if quantity == 1 { suffix = ".one" } else { suffix = ".other" } return NSLocalizedString(key + suffix, comment: "") } // ࣮ࡍʹ͸ࣗલͷFormatter͕͋ΔͷͰɺ // ͍ͦͭʹ౉͢จࣈྻͱͯ͠ར༻ pluralString(key: “photo”, quantity: quantity) MULTILINGUALIZATION 3 ଟݴޠԽ

Slide 18

Slide 18 text

ςετ RobolectricͷΞϊςʔγϣϯͰϦιʔεͷछྨΛࢦఆͰ͖Δͷ Ͱɺจࣈྻͷςετ͸ָͩͬͨ @Test @Config(qualifiers = “en-port”) // ӳޠ&ॎը໘ public void testFormatter() { …. assertEquals(“Newborn”, formatter.getAge(context, 0)) } ͋͘·ͰϦιʔεͷम০ࢠΛݻఆ͢ΔͨΊͷ΋ͰɺLocaleͷ஋͕ ϞοΫ͞ΕΔΘ͚Ͱ͸ͳ͍ɻ LocaleΛऔಘ͢ΔΑ͏ͳॲཧͷ৔߹͸ผ్mock͢Δඞཁ͕͋ Δɻ MULTILINGUALIZATION 3 ଟݴޠԽ

Slide 19

Slide 19 text

LOCALIZATION 4 ஍ҬԽ

Slide 20

Slide 20 text

LOCALIZATION 4 ஍ҬԽ ωοτϫʔΫ؀ڥͷҧ͍ τϨϯυϥΠϯͰൺֱ͢ΔͱɺΞοϓϩʔυ͕࣌ؒඵͷ஍఺Ͱɺ ೔ຊ͸ʙ.#ɺถࠃ͸ʙ.#લޙ

Slide 21

Slide 21 text

LOCALIZATION 4 ஍ҬԽ ಈը౤ߘ طଘͷߏ੒͸౦ژϦʔδϣϯͷΈͩͬͨͷͰɺւ֎ͷϦʔδϣ ϯʹ΋όέοτΛ࡞੒ɻ ౤ߘ࣌ʹͲͷόέοτ͕͍͔ۙΛAPIʹฉ͍͔ͯΒɺ௚Ξο ϓϩʔυ͢ΔΑ͏ʹͨ͠ɻ ౤ߘޙ͸ΤϯίʔυॲཧΛߦ͍ɺΫϩεϦʔδϣϯ ϨϓϦ έʔγϣϯͰ౦ژʹ໭͢ɻ ౰࣌͸transfer accelerationΛ஌Βͣʹ࣮૷ͨ͠ͷͰɺ࠷ॳ ͔ΒAWSͷਓʹܰ͘૬ஊ͓͚ͯ͠͹Α͔ͬͨɻ

Slide 22

Slide 22 text

LOCALIZATION 4 ஍ҬԽ ͓஌Βͤ௨஌ ϢʔβʔͷߦಈىҼͷ΋ͷ͸ϦΞϧλΠϜͷ··ɻ ͓஌Βͤܥͷ࣌ؒΛௐ੔͢Δҝʹ௨஌Λ༧໿͢ΔΑ͏ʹ͠ ͨɻ ʮn݄ͷϑΥτϒοΫ͕Ͱ͖·ͨ͠ʯͷΑ͏ͳ௨஌͸ϐʔΫ λΠϜͷ਺࣌ؒલʹૹΓ͍ͨɻ ϦϦʔε௚લͰmigration࣌ͷσʔλΛϛε͓ͬͯ஌Β͕ͤ ۭදࣔʹͳΔͱ͜Ζͩͬͨɻ

Slide 23

Slide 23 text

MISC 5 ͦͷଞ

Slide 24

Slide 24 text

ετΞͷݴޠ MISC 5 ͦͷଞ App Store΋Google Play΋ɺӳޠ൛ͷϦϦʔεΛҰ౓ऴ͑ ͔ͯΒͰͳ͍ͱɺprimary language(σϑΥϧτݴޠ)Λઃఆ Ͱ͖ͳ͔ͬͨɻ ϝδϟʔΞοϓσʔτ࣌ʹσϑΥϧτ͸ӳޠͰύʔϯοΈͨ ͍ͳ͜ͱΛ΍Γ͔ͨͬͨΒɺखલͷόʔδϣϯͰӳޠͷܝࡌ ৘ใΛೖΕͯϦϦʔε͓ͯ͘͠ඞཁ͕͋Δɻ

Slide 25

Slide 25 text

THANK YOU!

Slide 26

Slide 26 text

ຊ೔ͷϏʔϧ

Slide 27

Slide 27 text

KIRIN HEARTLAND ϐϧεφʔελΠϧ ΨϒΨϒҿΊΔ 1

Slide 28

Slide 28 text

SANKTGALLEN PINEAPPLE ALE ϑϧʔπϏʔϧ εΠεΠҿΊΔ 2

Slide 29

Slide 29 text

BREWDOG ELVIS JUICE ΄΅άϨʔϓϑϧʔπδϡʔε ΰΫΰΫҿΊΔ 3

Slide 30

Slide 30 text

YOHHO BREWING YONA YONA ALE ΞϝϦΧϯ ϖʔϧΤʔϧ ίϯϏχͰ΋ങ͑Δ ఆ൪ΤʔϧϏʔϧ 4

Slide 31

Slide 31 text

SHIGA KOGEN BEER IPA ΠϯσΟΞϯϖʔϧΤʔϧ ೔ຊΛ୅ද͢ΔIPA 5

Slide 32

Slide 32 text

SHIGA KOGEN BEER PORTER ϩϒετϙʔλʔ ࠇϏʔϧ͕ۤखͳਓʹ΋ҿΜͰ΋Β ͍͍ͨ 6