Slide 1

Slide 1 text

@kobaken Composeۦಈ։ൃͷͨΊͷ ϚϧνϞδϡʔϧԽ

Slide 2

Slide 2 text

ࣗݾ঺հ • kobakenʢ@koba_dog_ʣ • ίϛοΫࣄۀ෦pixivίϛοΫ෦։ൃνʔϜ • AndroidΞϓϦΛ୲౰ • ࠷ۙ͸Rails΋ॻ͍ͯ·͢

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

pixivίϛοΫΞϓϦͷ։ൃঢ়گʹ͍ͭͯ • 2015೥2݄ʹAndroidΞϓϦ͕ϦϦʔε • جຊతʹ͸appϞδϡʔϧ಺Ͱ͢΂ͯͷػೳ͕࣮૷͞Ε͍ͯͨ • ՝ۚपΓͷॲཧ͕ผϞδϡʔϧͰ੾Γ෼͚ΒΕ͍ͯͨఔ౓ • 2023೥10݄ݱࡏɺAndroidΞϓϦΤϯδχΞ3ਓମ੍

Slide 5

Slide 5 text

ϚϧνϞδϡʔϧԽͷϞνϕʔγϣϯ • pixivίϛοΫΞϓϦͰ΋Jetpack ComposeΛಋೖ͢Δ͜ͱʹ • ࣮ࡍʹಋೖͯ͠ΈΔͱϓϨϏϡʔ͕஗͍ • ΄΅͢΂ͯͷґଘؔ܎͕appϞδϡʔϧ಺Ͱ׬͍݁ͯ͠ΔͨΊ • Composeͷ։ൃମݧΛվળ͍ͨ͠

Slide 6

Slide 6 text

ϚϧνϞδϡʔϧԽΛਐΊΔલʹ • ϚϧνϞδϡʔϧԽ͸੍໿ͱͯ͠॥؀ࢀরNG͕͋ΔͷͰܭըతʹਐΊͯ ͍͘ඞཁ͕͋Δ • νʔϜ։ൃͷ৔߹ɺํ਑ڞ༗ͷͨΊʹਤʹى͍ͯ͘͜͠

Slide 7

Slide 7 text

pixivίϛοΫͰͷϞδϡʔϧઃܭ • app • feature • core

Slide 8

Slide 8 text

appϞδϡʔϧ pixivίϛοΫͰͷϞδϡʔϧઃܭ ΞϓϦશମͷΤϯτϦϙΠϯτͱͳ ΔϞδϡʔϧɻ ɾApplicationΫϥε΍ΤϯτϦͱͳ ΔActivity͕഑ஔ͞ΕΔɻ ɾϏϧυόϦΞϯτͷ੾Γସ͑΋୲ ౰ɻ ɾҠߦظؒத͸શͯͷϞδϡʔϧͷ ґଘؔ܎Λ࣋ͪɺDI΋͜͜Ͱߦ͏ɻ

Slide 9

Slide 9 text

featureϞδϡʔϧ pixivίϛοΫͰͷϞδϡʔϧઃܭ ֤ػೳͷ࣮૷͕഑ஔ͞ΕΔϞδϡʔ ϧɻ :feature:${ػೳ໊}:presentation Activity΍ViewModelΛ഑ஔɻ :feature:${ػೳ໊}:compose ࠓճͷ؊ɻػೳ༝དྷͷCompose࣮ ૷Λ഑ஔɻޙड़͢Δcommon΍uiͱ ͍ͬͨ࠷খݶͷґଘؔ܎ͷΈɻ

Slide 10

Slide 10 text

coreϞδϡʔϧ pixivίϛοΫͰͷϞδϡʔϧઃܭ Model΍utilܥͳͲڞ௨ϩδοΫ͕ ഑ஔ͞ΕΔϞδϡʔϧɻ :core:data:model σʔλܕΛදݱ͢ΔModelΛ഑ஔɻ :core:data:repository RepositoryΛ഑ஔɻσʔλͷऔಘߋ ৽ͳͲɻ࣮ࡍʹ௨৴ͨ͠ΓɺDBͳ ͲϩʔΧϧϑΝΠϧʹΞΫηε͢Δ ॲཧܥ͸ޙड़͢Δinfraʹ഑ஔ͢Δɻ

Slide 11

Slide 11 text

coreϞδϡʔϧ pixivίϛοΫͰͷϞδϡʔϧઃܭ Model΍utilܥͳͲڞ௨ϩδοΫ͕ ഑ஔ͞ΕΔϞδϡʔϧɻ :core:infra:local DB΍DataStoreɺϑΝΠϧૢ࡞ܥͳ ͲΛ഑ஔɻ :core:infra:remote APIΫϥΠΞϯτ΍Responseͷܕఆ ٛͳͲΛ഑ஔɻ

Slide 12

Slide 12 text

coreϞδϡʔϧ pixivίϛοΫͰͷϞδϡʔϧઃܭ Model΍utilܥͳͲڞ௨ϩδοΫ͕ ഑ஔ͞ΕΔϞδϡʔϧɻ :core:network ωοτϫʔΫ઀ଓʹؔ͢Δॲཧ΍൚ ༻ResponseͳͲΛ഑ஔɻ :core:analytics FirebaseͷΠϕϯτ΍ϩάૹ৴ϩ δοΫΛ഑ஔɻ

Slide 13

Slide 13 text

coreϞδϡʔϧ pixivίϛοΫͰͷϞδϡʔϧઃܭ Model΍utilܥͳͲڞ௨ϩδοΫ͕ ഑ஔ͞ΕΔϞδϡʔϧɻ :core:ui ComposeͷTheme΍ΧϥʔύϨο τɺ൚༻ComposableΛ഑ஔɻ :core:common ଞͷcoreʹؔ͢ΔϞδϡʔϧʹଐ͞ ͳ͍൚༻ॲཧܥΛ഑ஔɻ

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

࣮ߦ • খ࢝͘͞Ί͍ͯ͘ • ຊདྷͷ໨తͰ͋ΔʮCompose։ൃମݧͷվળʯΛҙࣝ • ·ͣ͸:feature:${ػೳ໊}:compose͔Βணख • appϞδϡʔϧʹ͋ΔModelʹґଘ͠ͳ͍Α͏ʹcomposeϞδϡʔϧ ͰUIStateΛఆٛ

Slide 16

Slide 16 text

࣮૷ྫ :appͰࢀর͍ͯͨ͠Model ͱ૬ޓม׵Ͱ͖ΔUIͷͨΊ ͷܕΛ:composeͰ࠶ఆٛ

Slide 17

Slide 17 text

࣮૷ྫ :featureʹViewModelͷ interfaceΛઃ͚ͯରԠ͢Δ ͷ΋OK

Slide 18

Slide 18 text

࣮ࡍʹҠߦͯ͠Έͨ݁Ռ…

Slide 19

Slide 19 text

ͱ͋ΔҰը໘ͷ composeϞδϡʔϧ΁ͷҠߦલޙͷϓϨϏϡʔʹ͔͔Δ࣌ؒ

Slide 20

Slide 20 text

ࠓޙͷల๬ • coreϞδϡʔϧ΁ͷ෼ׂ • Model΍Repositoryɺͦͷଞڞ௨ॲཧͷҠߦ • ֤ը໘ΛfeatureϞδϡʔϧ΁෼ׂ • Activity΍ViewModel࣮૷Λ:feature:presentationʹҠߦ͢Δ

Slide 21

Slide 21 text

·ͱΊ • ComposeΛϞδϡʔϧ෼ׂͨ͜͠ͱͰϓϨϏϡʔ଎౓Λվળͨ͠ • Compose͚ͩͷ෼ׂͳΒҊ֎ؾܰʹߦಈʹҠͤΔ • ϚϧνϞδϡʔϧ͕૝ఆ͞Εͯͳ͍தن໛Ҏ্ͷϓϩδΣΫτͰͷϚϧ νϞδϡʔϧԽ͸େม • ϓϩδΣΫτن໛ʹΑΔ͕ɺࣄલͷܭը͕େࣄ • Ұؾʹ΍Ζ͏ͱͤͣʹͪΐͬͱͣͭਐΊΔͷ͕٢

Slide 22

Slide 22 text

AndroidΞϓϦΛ Ұॹʹ։ൃͯ͘͠ΕΔ ਓΛืू͍ͯ͠·͢ʂ ΧδϡΞϧ໘ஊͷ͓஌Βͤ ϚϧνϞδϡʔϧ΍ComposeͳͲ ͳΜͰ΋͓ؾܰʹ ԼهQRίʔυ͔ΒΧδϡΞϧ໘ஊ ͓଴͓ͪͯ͠Γ·͢