Slide 1

Slide 1 text

Takanori Hirobe ग़લؗΞϓϦʹ͓͚ΔFlutterΞϓϦઃܭͱ ͦΕΛࢧ͑ΔCICD؀ڥͷਐԽ FlutterKaigi 2024  1

Slide 2

Slide 2 text

ΞδΣϯμ લ൒ͱޙ൒ʹ෼͚ͯ࿩͠·͢ 1. ࣗݾ঺հ 2. ग़લؗͷ͝঺հ 3. ग़લؗΞϓϦͷઃܭ 4. ग़લؗΞϓϦͷCI/CD؀ڥ 2

Slide 3

Slide 3 text

ΞδΣϯμ લ൒ͱޙ൒ʹ෼͚ͯ࿩͠·͢ 1. ࣗݾ঺հ 2. ग़લؗͷ͝঺հ 3. ग़લؗΞϓϦͷઃܭ 4. ग़લؗΞϓϦͷCI/CD؀ڥ 3

Slide 4

Slide 4 text

ࣗݾ঺հ ኍ෦وಙ / Takanori Hirobe • ॴଐ • LINEϠϑʔגࣜձࣾʢژ౎ΦϑΟεʣ • גࣜձࣾग़લؗʹग़޲ • ͜Ε·Ͱͷܦݧ • ϞόΠϧΞϓϦ։ൃΛ͔Ε͜Ἑ೥΍͍ͬͯ·͢ • ग़લؗ͸2021೥͔Β • ࣎լݝ௕඿ࢢࡏॅʢ͔ͳΓઇ͕߱Γ·͢ʣ 4

Slide 5

Slide 5 text

ΞδΣϯμ લ൒ͱޙ൒ʹ෼͚ͯ࿩͠·͢ 1. ࣗݾ঺հ 2. ग़લؗͷ͝঺հ 3. ग़લؗΞϓϦͷઃܭ 4. ग़લؗΞϓϦͷCI/CD؀ڥ 5

Slide 6

Slide 6 text

ग़લؗͷ͝঺հ 6

Slide 7

Slide 7 text

ग़લؗͷ͝঺հ • ̍೥ؒͷΦʔμʔ਺͸7032ສ݅ʢ2024೥8݄ظʣ • ΞΫςΟϒϢʔβʔ਺542ສਓ ※ 1೥Ҏ಺ʹ1ճҎ্஫จͨ͠Ϣʔβ਺ 7

Slide 8

Slide 8 text

8

Slide 9

Slide 9 text

ग़લؗͷ͝঺հ • MISSION • ςΫϊϩδʔͰ࣌ؒՁ஋ΛߴΊΔ • VISION • ஍Ҭͷਓʑͷ޾ͤΛͭͳ͙ϥΠϑΠϯϑϥ • VALUE • ϗεϐλϦςΟ • νϟϨϯδ • ΫϦΤΠςΟϏςΟ 9

Slide 10

Slide 10 text

ग़લؗͷ͝঺հ • ΦϯϥΠϯͰີʹ࿈ܞ • ؖࠃνʔϜͱ΋࿈ܞ • ΞϓϦΤϯδχΞ20ਓ΄Ͳ
 ʢؖࠃνʔϜؚΉʣ [େࡕ/ژ౎] αʔό/Ξϓ Ϧ [෱Ԭ/ࣛࣇౡ] QA/CS [౦ژ] αʔό/ΞϓϦ /QA/اը 10

Slide 11

Slide 11 text

ΞδΣϯμ લ൒ͱޙ൒ʹ෼͚ͯ࿩͠·͢ 1. ࣗݾ঺հ 2. ग़લؗͷ͝঺հ 3. ग़લؗΞϓϦͷઃܭ 4. ग़લؗΞϓϦͷCI/CD؀ڥ 11

Slide 12

Slide 12 text

ΞδΣϯμ લ൒ͱޙ൒ʹ෼͚ͯ࿩͠·͢ 1. ࣗݾ঺հ 2. ग़લؗͷ͝঺հ 3. ग़લؗΞϓϦͷઃܭ - ϑΥϧμߏ੒ - Ξηοτ؅ཧ - ঢ়ଶ؅ཧ 4. ग़લؗΞϓϦͷCI/CD؀ڥ 12

Slide 13

Slide 13 text

ΞδΣϯμ લ൒ͱޙ൒ʹ෼͚ͯ࿩͠·͢ 1. ࣗݾ঺հ 2. ग़લؗͷ͝঺հ 3. ग़લؗΞϓϦͷઃܭ - ϑΥϧμߏ੒ - Ξηοτ؅ཧ - ঢ়ଶ؅ཧ 4. ग़લؗΞϓϦͷCI/CD؀ڥ 13

Slide 14

Slide 14 text

ग़લؗΞϓϦͷઃܭ - ϑΥϧμߏ੒ ϑΥϧμߏ੒Ͱߟྀ͢΂͖ཁૉ • ίʔυϕʔεͷେ͖͞ • ձһొ࿥͔Β஫จ·ͰίϚʔεΞϓϦʹඞཁͳ͢΂ͯͷػೳΛ࣮૷͍ͯ͠Δ • /lib/ ҎԼͷ.dartϑΝΠϧͷ਺͸1300Ҏ্ʢࣗಈੜ੒ϑΝΠϧΛؚΉʣ • ։ൃମ੍΁ͷཁٻ • ػೳຖɺνʔϜຖʹ։ൃΛฒߦͰ͖Δ͜ͱ • ि1ճͷϦϦʔε 14

Slide 15

Slide 15 text

ग़લؗΞϓϦͷઃܭ - ϑΥϧμߏ੒ Type/Domain vs Feature vs Package • ҎԼͷબ୒ࢶ͔Βݕ౼ͨ͠ • Type/Domain • Feature • Package 15

Slide 16

Slide 16 text

ग़લؗΞϓϦͷઃܭ - ϑΥϧμߏ੒ Type/Domain vs Feature vs Package ‣ lib ‣ src ‣ presentation ‣ order ‣ login ‣ application ‣ order ‣ login ‣ domain ‣ order ‣ login ‣ data ‣ order ‣ login • ϑΝΠϧΛυϝΠϯผʹ෼ྨ͢Δ • ϝϦοτ • ॳظ/খن໛ϓϩδΣΫτͰ͸ϑΝΠ ϧ͕୳͠΍͍͢ • σϝϦοτ • ن໛͕େ͖͘ͳΔ΄ͲϑΝΠϧ਺͕ଟ ͘ͳΓɺ؅ཧ͕൥ࡶʹͳΔ 16

Slide 17

Slide 17 text

ग़લؗΞϓϦͷઃܭ - ϑΥϧμߏ੒ Type/Domain vs Feature vs Package ‣ lib ‣ src ‣ features ‣ order ‣ presentation ‣ application ‣ domain ‣ data ‣ login ‣ presentation ‣ application ‣ domain ‣ data • ֤ػೳ(feature)ผʹϑΥϧμΛߏ੒͠ɺͦ ΕͧΕͷ഑Լʹwidget/controller/model͕ ؚ·ΕΔ • ϝϦοτ • େن໛ϓϩδΣΫτͰϑΝΠϧ͕୳͠΍ ͘͢ͳΔ • ผػೳͷ։ൃ࣌ͷίϯϑϦΫτ͕๷͛Δ • σϝϦοτ • ॳظߏ੒͕ෳࡶʹͳΔ • ڞ௨ίʔυͷ؅ཧ͕೉͘͠ͳΔ 17

Slide 18

Slide 18 text

ग़લؗΞϓϦͷઃܭ - ϑΥϧμߏ੒ Type/Domain vs Feature vs Package ‣ lib ‣ src ‣ presentation ‣ application ‣ domain ‣ data ‣ packages ‣ order ‣ lib ‣ src ‣ login ‣ lib ‣ src • ֤ػೳ(feature)ΛͦΕͧΕύοέʔδͰ؅ ཧͯ͠ϞδϡʔϧԽ • ϝϦοτ • ֤ػೳΛಠཱͯ͠։ൃɺςετ͕Ͱ͖Δ • ໾ׂͷ෼୲͕༰қʹͳΔ • σϝϦοτ • ґଘؔ܎͕ෳࡶʹͳΔ • ϓϩδΣΫτߏ੒ɺϦιʔε؅ཧ͕ෳࡶ ʹͳΔ 18

Slide 19

Slide 19 text

ग़લؗΞϓϦͷઃܭ - ϑΥϧμߏ੒ Type/Domain vs Feature vs Package ·ͱΊ ϝϦοτ σϝϦοτ Type/Domain • ॳظ/খن໛ϓϩδΣΫτͰ͸ϑΝΠϧ͕୳ ͠΍͍͢ • ن໛͕େ͖͘ͳΔ΄ͲϑΝΠϧ਺͕ଟ͘ͳ Γɺ؅ཧ͕൥ࡶʹͳΔ Feature • େن໛ϓϩδΣΫτͰϑΝΠϧ͕୳͠΍͢ ͘ͳΔ • ผػೳͷ։ൃ࣌ͷίϯϑϦΫτ͕๷͛Δ • ॳظߏ੒͕ෳࡶʹͳΔ • ڞ௨ίʔυͷ؅ཧ͕೉͘͠ͳΔ Package • ֤ػೳΛಠཱͯ͠։ൃɺςετ͕Ͱ͖Δ • ໾ׂͷ෼୲͕༰қʹͳΔ • ґଘؔ܎͕ෳࡶʹͳΔ • ϓϩδΣΫτߏ੒ɺϦιʔε؅ཧ͕ෳࡶʹ ͳΔ 19

Slide 20

Slide 20 text

ग़લؗΞϓϦͷઃܭ - ϑΥϧμߏ੒ Type/Domain vs Feature vs Package ·ͱΊ ϝϦοτ σϝϦοτ Type/Domain • ॳظ/খن໛ϓϩδΣΫτͰ͸ϑΝΠϧ͕୳ ͠΍͍͢ • ن໛͕େ͖͘ͳΔ΄ͲϑΝΠϧ਺͕ଟ͘ͳ Γɺ؅ཧ͕൥ࡶʹͳΔ Feature • େن໛ϓϩδΣΫτͰϑΝΠϧ͕୳͠΍͢ ͘ͳΔ • ผػೳͷ։ൃ࣌ͷίϯϑϦΫτ͕๷͛Δ • ॳظߏ੒͕ෳࡶʹͳΔ • ڞ௨ίʔυͷ؅ཧ͕೉͘͠ͳΔ Package • ֤ػೳΛಠཱͯ͠։ൃɺςετ͕Ͱ͖Δ • ໾ׂͷ෼୲͕༰қʹͳΔ • ґଘؔ܎͕ෳࡶʹͳΔ • ϓϩδΣΫτߏ੒ɺϦιʔε؅ཧ͕ෳࡶʹ ͳΔ 20

Slide 21

Slide 21 text

ग़લؗΞϓϦͷઃܭ - ϑΥϧμߏ੒ Type/Domain vs Feature vs Package ·ͱΊ ϝϦοτ σϝϦοτ Type/Domain • ॳظ/খن໛ϓϩδΣΫτͰ͸ϑΝΠϧ͕୳ ͠΍͍͢ • ن໛͕େ͖͘ͳΔ΄ͲϑΝΠϧ਺͕ଟ͘ͳ Γɺ؅ཧ͕൥ࡶʹͳΔ Feature • େن໛ϓϩδΣΫτͰϑΝΠϧ͕୳͠΍͢ ͘ͳΔ • ผػೳͷ։ൃ࣌ͷίϯϑϦΫτ͕๷͛Δ • ॳظߏ੒͕ෳࡶʹͳΔ • ڞ௨ίʔυͷ؅ཧ͕೉͘͠ͳΔ Package • ֤ػೳΛಠཱͯ͠։ൃɺςετ͕Ͱ͖Δ • ໾ׂͷ෼୲͕༰қʹͳΔ • ґଘؔ܎͕ෳࡶʹͳΔ • ϓϩδΣΫτߏ੒ɺϦιʔε؅ཧ͕ෳࡶʹ ͳΔ 21

Slide 22

Slide 22 text

ϚΠϖʔδͱ͍͏ػೳ ϚΠϖʔδͷϑΥϧμҎԼʹ ؔ࿈͢ΔϑΝΠϧΛू໿ 22

Slide 23

Slide 23 text

ΞδΣϯμ લ൒ͱޙ൒ʹ෼͚ͯ࿩͠·͢ 1. ࣗݾ঺հ 2. ग़લؗͷ͝঺հ 3. ग़લؗΞϓϦͷઃܭ - ϑΥϧμߏ੒ - Ξηοτ؅ཧ - ঢ়ଶ؅ཧ 4. ग़લؗΞϓϦͷCI/CD؀ڥ 23

Slide 24

Slide 24 text

ग़લؗΞϓϦͷઃܭ Ξηοτ؅ཧʹٻΊΔ͜ͱ • ग़લؗΞϓϦͰѻ͏Ξηοτ • ը૾ɺϑΥϯτɺ৭ɺJSONͳͲɺछྨ͕ଟ͍ • IDEʹΑΔิ׬΍ɺίϯύΠϥͷ੩తνΣοΫΛͰ͖Δ͚ͩ׆༻͍ͨ͠ 24

Slide 25

Slide 25 text

ग़લؗΞϓϦͷઃܭ - Ξηοτ؅ཧ طଘΞϓϦͷ؅ཧํ๏ 25 Ξηοτͷ؅ཧํ๏͸ɺطଘΞϓϦʢυϥΠόʔɺՃໍళ޲͚ΞϓϦʣΛࢀߟʹ ൺֱ͢Δ͜ͱͰݕ౼ͨ͠ ύεͷ௚઀ೖྗ fl utter_gen ಠࣗεΫϦϓτͰClass࡞੒ ίʔυྫ ϝϦοτ γϯϓϧܰྔ IDEͷࢧԉɺίϯύΠϥͷ੩త νΣοΫ IDEͷࢧԉɺίϯύΠϥͷ੩త νΣοΫ σϝϦοτ λΠϙ Ξηοτ௥Ճͷ౓ʹbuild_runner ͷ࣮ߦ͕ඞཁ εΫϦϓτͷϝϯςφϯείετ

Slide 26

Slide 26 text

ग़લؗΞϓϦͷઃܭ - Ξηοτ؅ཧ طଘΞϓϦͷ؅ཧํ๏ 26 Ξηοτͷ؅ཧํ๏͸ɺطଘΞϓϦʢυϥΠόʔɺՃໍళ޲͚ΞϓϦʣΛࢀߟʹ ൺֱ͢Δ͜ͱͰݕ౼ͨ͠ ύεͷ௚઀ೖྗ fl utter_gen ಠࣗεΫϦϓτͰClass࡞੒ ίʔυྫ ϝϦοτ γϯϓϧܰྔ IDEͷࢧԉɺίϯύΠϥͷ੩త νΣοΫ IDEͷࢧԉɺίϯύΠϥͷ੩త νΣοΫ σϝϦοτ λΠϙ Ξηοτ௥Ճͷ౓ʹbuild_runner ͷ࣮ߦ͕ඞཁ εΫϦϓτͷϝϯςφϯείετ

Slide 27

Slide 27 text

ग़લؗΞϓϦͷઃܭ - Ξηοτ؅ཧ fl utter_gen • IDEͷิ׬΍ɺίϯύΠϥͷ੩తνΣοΫ͸ॿ͔Δ • build_runner͸͢Ͱʹଞͷ༻్Ͱ࢖͍ͬͯͨͷͰ໰୊ͳ͔ͬͨ 27

Slide 28

Slide 28 text

ग़લؗΞϓϦͷઃܭ - Ξηοτ؅ཧ fl utter_gen࣮ࡍͷ࢖༻ํ๏ BuildContextͷextension͔ΒΞΫηε͢ΔΑ͏ʹ͍ͯ͠Δ 28

Slide 29

Slide 29 text

ग़લؗΞϓϦͷઃܭ - Ξηοτ؅ཧ fl utter_gen࣮ࡍͷ࢖༻ํ๏ BuildContextͷextension͔ΒΞΫηε͢ΔΑ͏ʹ͍ͯ͠Δ 29

Slide 30

Slide 30 text

ग़લؗΞϓϦͷઃܭ - Ξηοτ؅ཧ fl utter_gen࣮ࡍͷ࢖༻ํ๏ BuildContextͷextension͔ΒΞΫηε͢ΔΑ͏ʹ͍ͯ͠Δ 30

Slide 31

Slide 31 text

ΞδΣϯμ લ൒ͱޙ൒ʹ෼͚ͯ࿩͠·͢ 1. ࣗݾ঺հ 2. ग़લؗͷ͝঺հ 3. ग़લؗΞϓϦͷઃܭ - ϑΥϧμߏ੒ - Ξηοτ؅ཧ - ঢ়ଶ؅ཧ 4. ग़લؗΞϓϦͷCI/CD؀ڥ 31

Slide 32

Slide 32 text

ग़લؗΞϓϦͷઃܭ - ঢ়ଶ؅ཧ ࠷࣮ۙ૷ͨ͠ྫ͔Β ୯७ͦ͏ʹݟ͑Δϝʔϧೝূը໘ 32

Slide 33

Slide 33 text

ग़લؗΞϓϦͷઃܭ - ঢ়ଶ؅ཧ ࠷࣮ۙ૷ͨ͠ྫ͔Β ୯७ͦ͏ʹݟ͑Δϝʔϧೝূը໘ ΫϥΠΞϯτଆͰ࣋ͭΤϥʔ 33

Slide 34

Slide 34 text

ग़લؗΞϓϦͷઃܭ - ঢ়ଶ؅ཧ ࠷࣮ۙ૷ͨ͠ྫ͔Β ୯७ͦ͏ʹݟ͑Δϝʔϧೝূը໘ ΫϥΠΞϯτଆͰ࣋ͭΤϥʔ αʔόʔ͔Β౉͞ΕΔΤϥʔ 34

Slide 35

Slide 35 text

ग़લؗΞϓϦͷઃܭ - ঢ়ଶ؅ཧ ࠷࣮ۙ૷ͨ͠ྫ͔Β ୯७ͦ͏ʹݟ͑Δϝʔϧೝূը໘ ΫϥΠΞϯτଆͰ࣋ͭΤϥʔ αʔόʔ͔Β౉͞ΕΔΤϥʔ ιʔγϟϧϩάΠϯػೳ 35

Slide 36

Slide 36 text

ग़લؗΞϓϦͷઃܭ - ঢ়ଶ؅ཧ ࠷࣮ۙ૷ͨ͠ྫ͔Β ୯७ͦ͏ʹݟ͑Δϝʔϧೝূը໘ ΫϥΠΞϯτଆͰ࣋ͭΤϥʔ αʔόʔ͔Β౉͞ΕΔΤϥʔ ιʔγϟϧϩάΠϯػೳ ϝʔϧೝূτʔΫϯͷѻ͍ 36

Slide 37

Slide 37 text

ग़લؗΞϓϦͷઃܭ - ঢ়ଶ؅ཧ ࠷࣮ۙ૷ͨ͠ྫ͔Β ΋ͬͱଟ͘ͷঢ়ଶΛ࣋ͭը໘΋͋Δ 37

Slide 38

Slide 38 text

ग़લؗΞϓϦͷઃܭ - ঢ়ଶ؅ཧ ग़લؗΞϓϦͷঢ়ଶ؅ཧ • ֤ը໘͕ෳ਺ͷঢ়ଶΛ࣋ͪಘΔ • ࣗલͰঢ়ଶ؅ཧΛߦ͏͜ͱ͸ݫ͍͠ͷͰϥΠϒϥϦΛ࢖͏͜ͱʹͨ͠ • ग़લؗΞϓϦͷن໛/ෳࡶ͞ΛؑΈͯɺBLoC͕Ϛονͦ͠͏ 38

Slide 39

Slide 39 text

ग़લؗΞϓϦͷઃܭ - ঢ়ଶ؅ཧ ར༻ϥΠϒϥϦ Ҿ༻: https://pub.dev/packages/ fl utter_bloc 39

Slide 40

Slide 40 text

ग़લؗΞϓϦͷઃܭ - ঢ়ଶ؅ཧ ར༻ϥΠϒϥϦ 40 ࣗલ࣮૷ Provider Riverpod BLoC

Slide 41

Slide 41 text

ग़લؗΞϓϦͷઃܭ - ঢ়ଶ؅ཧ ग़લؗΞϓϦͰͷBLoCͷར༻ํ๏ EventʢϘλϯλοϓɺϝʔϧೖྗʣ State ೝূAPI BLoC 41

Slide 42

Slide 42 text

ग़લؗΞϓϦͷઃܭ - ঢ়ଶ؅ཧ ग़લؗΞϓϦͰͷBLoCͷར༻ํ๏ EventʢϘλϯλοϓɺϝʔϧೖྗʣ State ೝূAPI BLoC 42 EmailAuthState

Slide 43

Slide 43 text

43

Slide 44

Slide 44 text

44

Slide 45

Slide 45 text

45

Slide 46

Slide 46 text

46

Slide 47

Slide 47 text

47

Slide 48

Slide 48 text

48 ϩʔσΟϯάΞΠίϯ

Slide 49

Slide 49 text

49

Slide 50

Slide 50 text

50

Slide 51

Slide 51 text

ग़લؗΞϓϦͷઃܭ - ঢ়ଶ؅ཧ Freezed 51

Slide 52

Slide 52 text

ग़લؗΞϓϦͷઃܭ - ঢ়ଶ؅ཧ Freezed 52

Slide 53

Slide 53 text

ग़લؗΞϓϦͷઃܭ - ঢ়ଶ؅ཧ Freezed 53

Slide 54

Slide 54 text

ग़લؗΞϓϦͷઃܭ - ঢ়ଶ؅ཧ Freezed 54

Slide 55

Slide 55 text

ग़લؗΞϓϦͷઃܭ ·ͱΊ • ϑΥϧμΛػೳ͝ͱʹ෼͚ɺυϝΠϯผʹࡉ෼Խ͍ͯ͠Δ • fl utter_genͱಠࣗͷextensionΛ૊Έ߹ΘͤͯΞηοτΛ؅ཧ͍ͯ͠Δ • ঢ়ଶ؅ཧͷͨΊʹBLoCΛ࢖༻͓ͯ͠Γɺ
 State͸ ֤ঢ়ଶ͝ͱʹઐ༻Ϋϥε + FreezedΛ࢖༻͍ͯ͠Δ 55

Slide 56

Slide 56 text

ΞδΣϯμ લ൒ͱޙ൒ʹ෼͚ͯ࿩͠·͢ 1. ࣗݾ঺հ 2. ग़લؗͷ͝঺հ 3. ग़લؗΞϓϦͷઃܭ 4. ग़લؗΞϓϦͷCI/CD؀ڥ 56

Slide 57

Slide 57 text

ΞδΣϯμ લ൒ͱޙ൒ʹ෼͚ͯ࿩͠·͢ 1. ࣗݾ঺հ 2. ग़લؗͷ͝঺հ 3. ग़લؗΞϓϦͷઃܭ 4. ग़લؗΞϓϦͷCI/CD؀ڥ - Bitriseͷಋೖ - TeamCity΁ͷҠߦ - ݱঢ়ͷCI/CD؀ڥ 57

Slide 58

Slide 58 text

ग़લؗΞϓϦͷCI/CD؀ڥ - ಋೖલ ࣌͸2020೥ 2016.5 ग़લؗͱLINE͕
 ۀ຿ఏܞ 2020.3 ग़લؗͱLINE͕
 ࢿຊۀ຿ఏܞ 2020.5 LINE͔ΒΞϓϦΤϯδχΞ͕ ։ൃʹࢀՃ ͦΕ·Ͱ͸֎෦ύʔτφʔ ͕։ൃ͍ͯͨ͠ • CICD؀ڥ͸ະಋೖͰɺϩʔΧϧ؀ڥͰखಈϏϧυ͍ͯͨ͠ • ग़લؗΞϓϦ͸React Native, Ճໍళ޲͚ΞϓϦ͸XamarinͰ։ൃ͞Ε͍ͯͨ 58

Slide 59

Slide 59 text

ग़લؗΞϓϦͷCI/CD؀ڥ - ಋೖલ Bitriseಋೖͷཧ༝ • React Native ͱ XamarinʹରԠ͍ͯ͠ΔɺBitriseʹനӋͷ໼ཱ͕ͬͨɻ • ͨΊ͠ʹςετಋೖͯ͠Έͨͱ͜Ζɺ্ख͍͖ͦ͘͏ͩͬͨͨΊɺBitriseʹܾ ఆͨ͠ɻ • ҰਓͷΤϯδχΞ͕ઐ೚Ͱಋೖ࡞ۀΛ୲౰ͨ͠ɻ 59

Slide 60

Slide 60 text

ग़લؗΞϓϦͷCI/CD؀ڥ - Bitriseಋೖ ಋೖʹΑΔ։ൃޮ཰޲্ • ετΞ޲͚ɺQA޲͚ΞϓϦͷࣗಈσϓϩΠ͕ՄೳʹͳΓɺ։ൃޮ཰͕޲্ • CI/CD؀ڥʹٻΊΒΕΔػೳ͸े෼ʹຬͨͤͨ 60

Slide 61

Slide 61 text

ΞδΣϯμ લ൒ͱޙ൒ʹ෼͚ͯ࿩͠·͢ 1. ࣗݾ঺հ 2. ग़લؗͷ͝঺հ 3. ग़લؗΞϓϦͷઃܭ 4. ग़લؗΞϓϦͷCI/CD؀ڥ - Bitriseͷಋೖ - TeamCity΁ͷҠߦ - ݱঢ়ͷCI/CD؀ڥ 61

Slide 62

Slide 62 text

ग़લؗΞϓϦͷCI/CD؀ڥ - TeamCityҠߦ TeamCityͱ͸ • JetBrains੡ͷΦϯϓϨϛεCI/CDπʔϧ • Con fl uence ΍ JIRA ͱ਌࿨ੑ͕ߴ͍ 62

Slide 63

Slide 63 text

ग़લؗΞϓϦͷCI/CD؀ڥ - TeamCityҠߦ Bitrise͔ΒͷҠߦ • ग़લؗࣄۀͷFlutterҠߦ͕͖͔͚ͬ • BtoBΞϓϦʢυϥΠόʔ޲͚ɺՃໍళ޲͚ʣ͔ΒઌʹؖࠃνʔϜओಋͰ FlutterԽͨ͠ • BtoB޲͚ΞϓϦ͸ɺ΋ͱ΋ͱؖࠃνʔϜͰӡ༻͍ͯͨ͠TeamCityͰCI/ CD؀ڥΛߏஙͨ͠ • ग़લؗΞϓϦͰ΋ɺ͢Ͱʹ͋ͬͨϏϧυ؀ڥ΍ΠϯϑϥΛ࢖͏͜ͱʹͳͬ ͨ 63

Slide 64

Slide 64 text

• LYϓϥΠϕʔτΫϥ΢υʹTeamCityΛΠϯετʔϧ • TeamCity͔ΒΦϯϓϨͰӡ༻͍ͯ͠ΔMacStudioʹϏϧυ໋ྩ • fastlaneΛ࢖ͬͯࣗಈεΫϦϓτͰσϓϩΠ • fastlaneɿϞόΠϧΞϓϦ༻ͷ։ൃࣗಈԽπʔϧͰɺ࢖༻ݴޠ͸Ruby ग़લؗΞϓϦͷCI/CD؀ڥ - TeamCityҠߦ ߏ੒ LYࣾϓϥΠϕʔτΫϥ΢υ TeamCity Mac Studio
 (ΦϯϓϨ) Ϗϧυ໋ྩ σϓϩΠ
 (ࣗಈεΫϦϓτ) 📲 App Store
 Google Play 64

Slide 65

Slide 65 text

ΞδΣϯμ લ൒ͱޙ൒ʹ෼͚ͯ࿩͠·͢ 1. ࣗݾ঺հ 2. ग़લؗͷ͝঺հ 3. ग़લؗΞϓϦͷઃܭ 4. ग़લؗΞϓϦͷCI/CD؀ڥ - Bitriseͷಋೖ - TeamCity΁ͷҠߦ - ݱঢ়ͷCI/CD؀ڥ 65

Slide 66

Slide 66 text

ग़લؗΞϓϦͷCI/CD؀ڥ - TeamCityҠߦ Ҡߦޙͷ՝୊ • ෳ਺ͷνʔϜʢυϥΠόʔ޲͚ΞϓϦνʔϜɺՃໍళ޲͚ΞϓϦνʔϜͳͲʣ ͕ಉ͡MacStudioΛ࢖༻͍ͯ͠Δ • νʔϜຖͷ؀ڥͷҧ͍ʢFlutter, Xcode, Android SDK౳ͷόʔδϣϯʣ • σϓϩΠͷͨΊͷࣗಈεΫϦϓτͷอक LYϓϥΠϕʔτΫϥ΢υ TeamCity Mac Studio
 (ΦϯϓϨ) Ϗϧυ໋ྩ σϓϩΠ
 (ࣗಈεΫϦϓτ) App Store
 Google Play 📲 66

Slide 67

Slide 67 text

ग़લؗΞϓϦͷCI/CD؀ڥ - ΦϯϓϨӡ༻ Ҡߦޙͷ՝୊ • ΞϓϦؒͰҟͳΔXcode, FlutterͷόʔδϣϯΛ࢖༻͍ͯ͠Δ • Xcode͸Xcodes, Flutter͸fenv(https://github.com/fenv-org/fenv)Ͱ੾Γସ͑ • ϏϧυεΫϦϓτʹ࢖༻͍ͯ͠ΔݴޠʢRubyͳͲʣͷอक • ݱঢ়͸ɺಉ͡ݴޠόʔδϣϯΛ࢖༻͍ͯ͠Δ 67

Slide 68

Slide 68 text

ग़લؗΞϓϦͷCI/CD؀ڥ - ΦϯϓϨӡ༻ ΦϯϓϨͳΒͰ͸ʢʁʣͷਏ͍࿩ • XcodeͱmacOSͷόʔδϣϯ؅ཧ • Xcode 15.3͸macOS 14.0Ҏ্͕ඞཁ
 macOS 14.x͸Xcode 14.x͕ΠϯετʔϧͰ͖ͳ͍ • ಉ͡ϚγϯͰXcode 15.3ͱXcode 14.3Λಉ࣌ΠϯετʔϧͰ͖ͳ͍
 ʢ྆ํͷXcodeʹରԠͨ͠macOSͷόʔδϣϯ͕ଘࡏ͠ͳ͍ͨΊʣ Xcode 15.3Πϯετʔϧ͍ͨ͠͠ɺ macͷόʔδϣϯ͍͍͋͛ͯʁ ͪΐͬͱ଴ͬͯɺདྷिɺXcode 14ͰϏϧυͯ͠ ετΞఏग़͍ͨ͠Μ͚ͩͲ ΞϓϦA୲౰ ΞϓϦB୲౰ 68

Slide 69

Slide 69 text

ग़લؗΞϓϦͷCI/CD؀ڥ - Xcode 15ରԠ 2024೥4݄ͷXcode 15ରԠͷ࿩ 2024೥य़ɺXcodeͷϝδϟʔΞοϓσʔτରԠ 2024೥4݄29೔Ҏ߱͸ඞͣXcode 15ͰϏϧυͯ͠Ͷ
 by Apple 69 Ҿ༻: https://developer.apple.com/news/

Slide 70

Slide 70 text

ग़લؗΞϓϦͷCI/CD؀ڥ - Xcode 15ରԠ 2024೥4݄ͷXcode 15ରԠͷ࿩ • Xcode 15ରԠ • Privacy ManifestରԠ • ϥΠϒϥϦຖʹPrivacy ManifestʹରԠ͕ඞཁͳͨΊɺ
 FlutterΛؚΉϥΠϒϥϦͷόʔδϣϯΞοϓ΋ඞཁ 70

Slide 71

Slide 71 text

ग़લؗΞϓϦͷCI/CD؀ڥ - Xcode 15ରԠ 2024೥4݄ͷXcode 15ରԠͷ࿩ • ཁ݅ • 4݄29೔·ͰʹXcode 15ରԠ͠ɺPrivacy Manifest൛ͷϥΠϒϥϦʹΞοϓ σʔτ͢Δ • Xcode 15/Privacy Manifest ରԠͷͨΊʹɺϦϦʔεΛεέδϡʔϧ • ໰୊͕͋ͬͨ࣌ʹϩʔϧόοΫͰ͖ΔΑ͏ʹXcode 14؀ڥ΋࢒ͨ͠ • ଞͷΞϓϦͷ୲౰ऀͱɺچ؀ڥͷҡ࣋ظؒΛ૬ஊ 71

Slide 72

Slide 72 text

ग़લؗΞϓϦͷCI/CD؀ڥ - Xcode 15ରԠ 2024೥4݄ͷXcode 15ରԠͷ࿩ • ཁ݅ • 4݄29೔·ͰʹXcode 15ରԠ͠ɺPrivacy Manifest൛ͷϥΠϒϥϦʹΞοϓ σʔτ͢Δ • Xcode 15/Privacy Manifest ରԠͷͨΊʹɺϦϦʔεΛεέδϡʔϧ • ໰୊͕͋ͬͨ࣌ʹϩʔϧόοΫͰ͖ΔΑ͏ʹXcode 14؀ڥ΋࢒ͨ͠ • ଞͷΞϓϦͷ୲౰ऀͱɺچ؀ڥͷҡ࣋ظؒΛ૬ஊ ϩʔϧόοΫ΋ͳ͘ɺແࣄʹϦϦʔε🎉 72

Slide 73

Slide 73 text

• 2020೥·Ͱ͸ϩʔΧϧ؀ڥͰखಈϏϧυ͍ͯͨ͠ • BitriseΛಋೖ͢Δ͜ͱͰCI/CD؀ڥΛߏங • FlutterԽΛ͖͔͚ͬʹTeamCity΁ͷҠߦΛߦͳͬͨ • ݱঢ়Ͱ͸ɺҰ෦ΦϯϓϨͰϏϧυ͍ͯ͠ΔͨΊɺอकӡ༻͕ਏ͍ͷ͕՝୊ͱ ͳ͍ͬͯΔ ग़લؗΞϓϦͷCI/CD؀ڥ ·ͱΊ 73

Slide 74

Slide 74 text

શମͷ·ͱΊ ग़લؗΞϓϦʹ͓͚ΔFlutterΞϓϦઃܭ • ཁ݅(ಛʹඇػೳཁ݅) • ෳ਺ͷػೳΛಉ࣌ฒߦͰ։ൃͰ͖Δ • ຖिϦϦʔεՄೳ • ཁ݅Λຬͨͨ͢ΊʹɺϑΥϧμߏ੒͔Βঢ়ଶ؅ཧ·Ͱࢼߦࡨޡͨ݁͠Ռɺݱ ࡏ͸໰୊ͳ͘ӡ༻Ͱ͖͍ͯΔ 74

Slide 75

Slide 75 text

શମͷ·ͱΊ CI/CD؀ڥ • ឯ༨ۂંΛܦͯɺΦϯϓϨΛؚΉߏ੒ͰCI/CD؀ڥΛߏங͍ͯ͠Δ • ෳ਺ΞϓϦ͕ಉ͡؀ڥΛڞ༗͍ͯ͠ΔͨΊɺͦΕͧΕͷඞཁͱ͢Δ؀ڥΛఏ ڙͰ͖ΔΑ͏ʹ޻෉͠ͳ͕Βӡ༻͍ͯ͠Δ 75

Slide 76

Slide 76 text

We are hiring! 76

Slide 77

Slide 77 text

Takanori Hirobe ग़લؗΞϓϦʹ͓͚ΔFlutterΞϓϦઃܭͱ ͦΕΛࢧ͑ΔCICD؀ڥͷਐԽ FlutterKaigi 2024 77

Slide 78

Slide 78 text

Thank you 78