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

出前館アプリにおけるFlutterアプリ設計とそれを支えるCICD環境の進化

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

 出前館アプリにおけるFlutterアプリ設計とそれを支えるCICD環境の進化

FlutterKaigi2024登壇資料です

Avatar for 株式会社出前館

株式会社出前館

November 26, 2024
Tweet

More Decks by 株式会社出前館

Other Decks in Technology

Transcript

  1. ࣗݾ঺հ ኍ෦وಙ / Takanori Hirobe • ॴଐ • LINEϠϑʔגࣜձࣾʢژ౎ΦϑΟεʣ •

    גࣜձࣾग़લؗʹग़޲ • ͜Ε·Ͱͷܦݧ • ϞόΠϧΞϓϦ։ൃΛ͔Ε͜Ἑ೥΍͍ͬͯ·͢ • ग़લؗ͸2021೥͔Β • ࣎լݝ௕඿ࢢࡏॅʢ͔ͳΓઇ͕߱Γ·͢ʣ 4
  2. 8

  3. ग़લؗΞϓϦͷઃܭ - ϑΥϧμߏ੒ ϑΥϧμߏ੒Ͱߟྀ͢΂͖ཁૉ • ίʔυϕʔεͷେ͖͞ • ձһొ࿥͔Β஫จ·ͰίϚʔεΞϓϦʹඞཁͳ͢΂ͯͷػೳΛ࣮૷͍ͯ͠Δ • /lib/

    ҎԼͷ.dartϑΝΠϧͷ਺͸1300Ҏ্ʢࣗಈੜ੒ϑΝΠϧΛؚΉʣ • ։ൃମ੍΁ͷཁٻ • ػೳຖɺνʔϜຖʹ։ൃΛฒߦͰ͖Δ͜ͱ • ि1ճͷϦϦʔε 14
  4. ग़લؗΞϓϦͷઃܭ - ϑΥϧμߏ੒ Type/Domain vs Feature vs Package ‣ lib

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

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

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

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

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

    σϝϦοτ Type/Domain • ॳظ/খن໛ϓϩδΣΫτͰ͸ϑΝΠϧ͕୳ ͠΍͍͢ • ن໛͕େ͖͘ͳΔ΄ͲϑΝΠϧ਺͕ଟ͘ͳ Γɺ؅ཧ͕൥ࡶʹͳΔ Feature • େن໛ϓϩδΣΫτͰϑΝΠϧ͕୳͠΍͢ ͘ͳΔ • ผػೳͷ։ൃ࣌ͷίϯϑϦΫτ͕๷͛Δ • ॳظߏ੒͕ෳࡶʹͳΔ • ڞ௨ίʔυͷ؅ཧ͕೉͘͠ͳΔ Package • ֤ػೳΛಠཱͯ͠։ൃɺςετ͕Ͱ͖Δ • ໾ׂͷ෼୲͕༰қʹͳΔ • ґଘؔ܎͕ෳࡶʹͳΔ • ϓϩδΣΫτߏ੒ɺϦιʔε؅ཧ͕ෳࡶʹ ͳΔ 21
  10. ग़લؗΞϓϦͷઃܭ - Ξηοτ؅ཧ طଘΞϓϦͷ؅ཧํ๏ 25 Ξηοτͷ؅ཧํ๏͸ɺطଘΞϓϦʢυϥΠόʔɺՃໍళ޲͚ΞϓϦʣΛࢀߟʹ ൺֱ͢Δ͜ͱͰݕ౼ͨ͠ ύεͷ௚઀ೖྗ fl utter_gen

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

    ಠࣗεΫϦϓτͰClass࡞੒ ίʔυྫ ϝϦοτ γϯϓϧܰྔ IDEͷࢧԉɺίϯύΠϥͷ੩త νΣοΫ IDEͷࢧԉɺίϯύΠϥͷ੩త νΣοΫ σϝϦοτ λΠϙ Ξηοτ௥Ճͷ౓ʹbuild_runner ͷ࣮ߦ͕ඞཁ εΫϦϓτͷϝϯςφϯείετ
  12. 43

  13. 44

  14. 45

  15. 46

  16. 47

  17. 49

  18. 50

  19. ग़લؗΞϓϦͷCI/CD؀ڥ - ಋೖલ ࣌͸2020೥ 2016.5 ग़લؗͱLINE͕
 ۀ຿ఏܞ 2020.3 ग़લؗͱLINE͕
 ࢿຊۀ຿ఏܞ

    2020.5 LINE͔ΒΞϓϦΤϯδχΞ͕ ։ൃʹࢀՃ ͦΕ·Ͱ͸֎෦ύʔτφʔ ͕։ൃ͍ͯͨ͠ • CICD؀ڥ͸ະಋೖͰɺϩʔΧϧ؀ڥͰखಈϏϧυ͍ͯͨ͠ • ग़લؗΞϓϦ͸React Native, Ճໍళ޲͚ΞϓϦ͸XamarinͰ։ൃ͞Ε͍ͯͨ 58
  20. ग़લؗΞϓϦͷCI/CD؀ڥ - ಋೖલ Bitriseಋೖͷཧ༝ • React Native ͱ XamarinʹରԠ͍ͯ͠ΔɺBitriseʹനӋͷ໼ཱ͕ͬͨɻ •

    ͨΊ͠ʹςετಋೖͯ͠Έͨͱ͜Ζɺ্ख͍͖ͦ͘͏ͩͬͨͨΊɺBitriseʹܾ ఆͨ͠ɻ • ҰਓͷΤϯδχΞ͕ઐ೚Ͱಋೖ࡞ۀΛ୲౰ͨ͠ɻ 59
  21. ग़લؗΞϓϦͷCI/CD؀ڥ - TeamCityҠߦ Bitrise͔ΒͷҠߦ • ग़લؗࣄۀͷFlutterҠߦ͕͖͔͚ͬ • BtoBΞϓϦʢυϥΠόʔ޲͚ɺՃໍళ޲͚ʣ͔ΒઌʹؖࠃνʔϜओಋͰ FlutterԽͨ͠ •

    BtoB޲͚ΞϓϦ͸ɺ΋ͱ΋ͱؖࠃνʔϜͰӡ༻͍ͯͨ͠TeamCityͰCI/ CD؀ڥΛߏஙͨ͠ • ग़લؗΞϓϦͰ΋ɺ͢Ͱʹ͋ͬͨϏϧυ؀ڥ΍ΠϯϑϥΛ࢖͏͜ͱʹͳͬ ͨ 63
  22. ग़લؗΞϓϦͷCI/CD؀ڥ - TeamCityҠߦ Ҡߦޙͷ՝୊ • ෳ਺ͷνʔϜʢυϥΠόʔ޲͚ΞϓϦνʔϜɺՃໍళ޲͚ΞϓϦνʔϜͳͲʣ ͕ಉ͡MacStudioΛ࢖༻͍ͯ͠Δ • νʔϜຖͷ؀ڥͷҧ͍ʢFlutter, Xcode,

    Android SDK౳ͷόʔδϣϯʣ • σϓϩΠͷͨΊͷࣗಈεΫϦϓτͷอक LYϓϥΠϕʔτΫϥ΢υ TeamCity Mac Studio
 (ΦϯϓϨ) Ϗϧυ໋ྩ σϓϩΠ
 (ࣗಈεΫϦϓτ) App Store
 Google Play 📲 66
  23. ग़લؗΞϓϦͷ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
  24. ग़લؗΞϓϦͷCI/CD؀ڥ - Xcode 15ରԠ 2024೥4݄ͷXcode 15ରԠͷ࿩ • Xcode 15ରԠ •

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

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

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