Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
出前館アプリにおけるFlutterアプリ設計とそれを支えるCICD環境の進化
Search
株式会社出前館
November 26, 2024
Technology
2.5k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
出前館アプリにおけるFlutterアプリ設計とそれを支えるCICD環境の進化
FlutterKaigi2024登壇資料です
株式会社出前館
November 26, 2024
More Decks by 株式会社出前館
See All by 株式会社出前館
出前館のメニュー登録・更新用APIをSpring Boot+Kafkaで実現したお話
demaecan
0
290
現実的なセキュリティ体制の構築 限られたリソースの中で成果を最大化する「選択と集中」
demaecan
8
6k
中期計画、2回作ってみた ~業務委託と正社員、両方の視点から~
demaecan
1
1.3k
複雑にからみあう複数のシステムを要する出前館QAの実情、展望
demaecan
0
240
QA業務を変える(!?)AIを併用した不具合分析の実践
demaecan
0
290
出前館アプリの品質を支えるリリーストレインとその実践
demaecan
0
330
出前館アプリ進化論 アーキテクチャと組織のリアルな変⾰の舞台裏
demaecan
0
1.1k
Flutterにしてよかった?出前館アプリを2年運用して気づいたことを全部話します
demaecan
1
1.5k
Boxを“使われる場”にする統制と自動化の仕組み
demaecan
1
570
Other Decks in Technology
See All in Technology
Kiro Crewで「みのるん式」仕事術やってみた
minorun365
PRO
2
570
脆弱性診断って、何をしているの? 〜弱点を見つけて、会社の改善につなげるまで〜
keeg
0
930
実体験から学ぶ分析エージェントの開発と運⽤
recruitengineers
PRO
8
2.4k
React改造してみた
tsukina_7mochi
0
110
「Docker Desktop不要の時代」は 来たのか?
ueponx
0
830
Railsで挑む大量データ永続化 〜600億件を永続化するための設計とボトルネックとの戦い〜
occhi
1
760
スプシの手作業からの解脱 ~更新はClaude Codeに、見せ方と使い方はGASアプリに任せる~
kentarofujii
0
160
Tofu-Controller lightning talk @ Containerday 2026
gionn
0
120
[JAWS-UG彩の国埼玉#12]そろそろ準備する?re:Invent2026をやさしく解説 / reinvent2026-sainokuni
sh_fk2
1
360
Getting Started with Google Antigravity
glaforge
0
320
Rust で関数型ドメインモデリング
takonda
0
170
LambdaWebFunctionsを試してみた / exploring-lambda-web-functions
koukihosaka
1
360
Featured
See All Featured
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
890
Producing Creativity
orderedlist
PRO
348
41k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
540
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
A Tale of Four Properties
chriscoyier
163
24k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
460
The Limits of Empathy - UXLibs8
cassininazir
2
720
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.3k
Git: the NoSQL Database
bkeepers
PRO
433
67k
Practical Orchestrator
shlominoach
192
12k
The Curse of the Amulet
leimatthew05
3
16k
Building AI with AI
inesmontani
PRO
1
1.3k
Transcript
Takanori Hirobe ग़લؗΞϓϦʹ͓͚ΔFlutterΞϓϦઃܭͱ ͦΕΛࢧ͑ΔCICDڥͷਐԽ FlutterKaigi 2024  1
ΞδΣϯμ લͱޙʹ͚ͯ͠·͢ 1. ࣗݾհ 2. ग़લؗͷ͝հ 3. ग़લؗΞϓϦͷઃܭ 4. ग़લؗΞϓϦͷCI/CDڥ
2
ΞδΣϯμ લͱޙʹ͚ͯ͠·͢ 1. ࣗݾհ 2. ग़લؗͷ͝հ 3. ग़લؗΞϓϦͷઃܭ 4. ग़લؗΞϓϦͷCI/CDڥ
3
ࣗݾհ ኍ෦وಙ / Takanori Hirobe • ॴଐ • LINEϠϑʔגࣜձࣾʢژΦϑΟεʣ •
גࣜձࣾग़લؗʹग़ • ͜Ε·Ͱͷܦݧ • ϞόΠϧΞϓϦ։ൃΛ͔Ε͜Ἑ͍ͬͯ·͢ • ग़લؗ2021͔Β • ࣎լݝࢢࡏॅʢ͔ͳΓઇ͕߱Γ·͢ʣ 4
ΞδΣϯμ લͱޙʹ͚ͯ͠·͢ 1. ࣗݾհ 2. ग़લؗͷ͝հ 3. ग़લؗΞϓϦͷઃܭ 4. ग़લؗΞϓϦͷCI/CDڥ
5
ग़લؗͷ͝հ 6
ग़લؗͷ͝հ • ̍ؒͷΦʔμʔ7032ສ݅ʢ20248݄ظʣ • ΞΫςΟϒϢʔβʔ542ສਓ ※ 1Ҏʹ1ճҎ্จͨ͠Ϣʔβ 7
8
ग़લؗͷ͝հ • MISSION • ςΫϊϩδʔͰ࣌ؒՁΛߴΊΔ • VISION • ҬͷਓʑͷͤΛͭͳ͙ϥΠϑΠϯϑϥ •
VALUE • ϗεϐλϦςΟ • νϟϨϯδ • ΫϦΤΠςΟϏςΟ 9
ग़લؗͷ͝հ • ΦϯϥΠϯͰີʹ࿈ܞ • ؖࠃνʔϜͱ࿈ܞ • ΞϓϦΤϯδχΞ20ਓ΄Ͳ ʢؖࠃνʔϜؚΉʣ [େࡕ/ژ] αʔό/Ξϓ
Ϧ [Ԭ/ࣛࣇౡ] QA/CS [౦ژ] αʔό/ΞϓϦ /QA/اը 10
ΞδΣϯμ લͱޙʹ͚ͯ͠·͢ 1. ࣗݾհ 2. ग़લؗͷ͝հ 3. ग़લؗΞϓϦͷઃܭ 4. ग़લؗΞϓϦͷCI/CDڥ
11
ΞδΣϯμ લͱޙʹ͚ͯ͠·͢ 1. ࣗݾհ 2. ग़લؗͷ͝հ 3. ग़લؗΞϓϦͷઃܭ - ϑΥϧμߏ
- Ξηοτཧ - ঢ়ଶཧ 4. ग़લؗΞϓϦͷCI/CDڥ 12
ΞδΣϯμ લͱޙʹ͚ͯ͠·͢ 1. ࣗݾհ 2. ग़લؗͷ͝հ 3. ग़લؗΞϓϦͷઃܭ - ϑΥϧμߏ
- Ξηοτཧ - ঢ়ଶཧ 4. ग़લؗΞϓϦͷCI/CDڥ 13
ग़લؗΞϓϦͷઃܭ - ϑΥϧμߏ ϑΥϧμߏͰߟྀ͖͢ཁૉ • ίʔυϕʔεͷେ͖͞ • ձһొ͔Βจ·ͰίϚʔεΞϓϦʹඞཁͳͯ͢ͷػೳΛ࣮͍ͯ͠Δ • /lib/
ҎԼͷ.dartϑΝΠϧͷ1300Ҏ্ʢࣗಈੜϑΝΠϧΛؚΉʣ • ։ൃମ੍ͷཁٻ • ػೳຖɺνʔϜຖʹ։ൃΛฒߦͰ͖Δ͜ͱ • ि1ճͷϦϦʔε 14
ग़લؗΞϓϦͷઃܭ - ϑΥϧμߏ Type/Domain vs Feature vs Package • ҎԼͷબࢶ͔Βݕ౼ͨ͠
• Type/Domain • Feature • Package 15
ग़લؗΞϓϦͷઃܭ - ϑΥϧμߏ Type/Domain vs Feature vs Package ‣ lib
‣ src ‣ presentation ‣ order ‣ login ‣ application ‣ order ‣ login ‣ domain ‣ order ‣ login ‣ data ‣ order ‣ login • ϑΝΠϧΛυϝΠϯผʹྨ͢Δ • ϝϦοτ • ॳظ/খنϓϩδΣΫτͰϑΝΠ ϧ͕୳͍͢͠ • σϝϦοτ • ن͕େ͖͘ͳΔ΄ͲϑΝΠϧ͕ଟ ͘ͳΓɺཧ͕ࡶʹͳΔ 16
ग़લؗΞϓϦͷઃܭ - ϑΥϧμߏ Type/Domain vs Feature vs Package ‣ lib
‣ src ‣ features ‣ order ‣ presentation ‣ application ‣ domain ‣ data ‣ login ‣ presentation ‣ application ‣ domain ‣ data • ֤ػೳ(feature)ผʹϑΥϧμΛߏ͠ɺͦ ΕͧΕͷԼʹwidget/controller/model͕ ؚ·ΕΔ • ϝϦοτ • େنϓϩδΣΫτͰϑΝΠϧ͕୳͠ ͘͢ͳΔ • ผػೳͷ։ൃ࣌ͷίϯϑϦΫτ͕͛Δ • σϝϦοτ • ॳظߏ͕ෳࡶʹͳΔ • ڞ௨ίʔυͷཧ͕͘͠ͳΔ 17
ग़લؗΞϓϦͷઃܭ - ϑΥϧμߏ Type/Domain vs Feature vs Package ‣ lib
‣ src ‣ presentation ‣ application ‣ domain ‣ data ‣ packages ‣ order ‣ lib ‣ src ‣ login ‣ lib ‣ src • ֤ػೳ(feature)ΛͦΕͧΕύοέʔδͰ ཧͯ͠ϞδϡʔϧԽ • ϝϦοτ • ֤ػೳΛಠཱͯ͠։ൃɺςετ͕Ͱ͖Δ • ׂͷ୲͕༰қʹͳΔ • σϝϦοτ • ґଘ͕ؔෳࡶʹͳΔ • ϓϩδΣΫτߏɺϦιʔεཧ͕ෳࡶ ʹͳΔ 18
ग़લؗΞϓϦͷઃܭ - ϑΥϧμߏ Type/Domain vs Feature vs Package ·ͱΊ ϝϦοτ
σϝϦοτ Type/Domain • ॳظ/খنϓϩδΣΫτͰϑΝΠϧ͕୳ ͍͢͠ • ن͕େ͖͘ͳΔ΄ͲϑΝΠϧ͕ଟ͘ͳ Γɺཧ͕ࡶʹͳΔ Feature • େنϓϩδΣΫτͰϑΝΠϧ͕୳͢͠ ͘ͳΔ • ผػೳͷ։ൃ࣌ͷίϯϑϦΫτ͕͛Δ • ॳظߏ͕ෳࡶʹͳΔ • ڞ௨ίʔυͷཧ͕͘͠ͳΔ Package • ֤ػೳΛಠཱͯ͠։ൃɺςετ͕Ͱ͖Δ • ׂͷ୲͕༰қʹͳΔ • ґଘ͕ؔෳࡶʹͳΔ • ϓϩδΣΫτߏɺϦιʔεཧ͕ෳࡶʹ ͳΔ 19
ग़લؗΞϓϦͷઃܭ - ϑΥϧμߏ Type/Domain vs Feature vs Package ·ͱΊ ϝϦοτ
σϝϦοτ Type/Domain • ॳظ/খنϓϩδΣΫτͰϑΝΠϧ͕୳ ͍͢͠ • ن͕େ͖͘ͳΔ΄ͲϑΝΠϧ͕ଟ͘ͳ Γɺཧ͕ࡶʹͳΔ Feature • େنϓϩδΣΫτͰϑΝΠϧ͕୳͢͠ ͘ͳΔ • ผػೳͷ։ൃ࣌ͷίϯϑϦΫτ͕͛Δ • ॳظߏ͕ෳࡶʹͳΔ • ڞ௨ίʔυͷཧ͕͘͠ͳΔ Package • ֤ػೳΛಠཱͯ͠։ൃɺςετ͕Ͱ͖Δ • ׂͷ୲͕༰қʹͳΔ • ґଘ͕ؔෳࡶʹͳΔ • ϓϩδΣΫτߏɺϦιʔεཧ͕ෳࡶʹ ͳΔ 20
ग़લؗΞϓϦͷઃܭ - ϑΥϧμߏ Type/Domain vs Feature vs Package ·ͱΊ ϝϦοτ
σϝϦοτ Type/Domain • ॳظ/খنϓϩδΣΫτͰϑΝΠϧ͕୳ ͍͢͠ • ن͕େ͖͘ͳΔ΄ͲϑΝΠϧ͕ଟ͘ͳ Γɺཧ͕ࡶʹͳΔ Feature • େنϓϩδΣΫτͰϑΝΠϧ͕୳͢͠ ͘ͳΔ • ผػೳͷ։ൃ࣌ͷίϯϑϦΫτ͕͛Δ • ॳظߏ͕ෳࡶʹͳΔ • ڞ௨ίʔυͷཧ͕͘͠ͳΔ Package • ֤ػೳΛಠཱͯ͠։ൃɺςετ͕Ͱ͖Δ • ׂͷ୲͕༰қʹͳΔ • ґଘ͕ؔෳࡶʹͳΔ • ϓϩδΣΫτߏɺϦιʔεཧ͕ෳࡶʹ ͳΔ 21
ϚΠϖʔδͱ͍͏ػೳ ϚΠϖʔδͷϑΥϧμҎԼʹ ؔ࿈͢ΔϑΝΠϧΛू 22
ΞδΣϯμ લͱޙʹ͚ͯ͠·͢ 1. ࣗݾհ 2. ग़લؗͷ͝հ 3. ग़લؗΞϓϦͷઃܭ - ϑΥϧμߏ
- Ξηοτཧ - ঢ়ଶཧ 4. ग़લؗΞϓϦͷCI/CDڥ 23
ग़લؗΞϓϦͷઃܭ ΞηοτཧʹٻΊΔ͜ͱ • ग़લؗΞϓϦͰѻ͏Ξηοτ • ը૾ɺϑΥϯτɺ৭ɺJSONͳͲɺछྨ͕ଟ͍ • IDEʹΑΔิɺίϯύΠϥͷ੩తνΣοΫΛͰ͖Δ͚ͩ׆༻͍ͨ͠ 24
ग़લؗΞϓϦͷઃܭ - Ξηοτཧ طଘΞϓϦͷཧํ๏ 25 Ξηοτͷཧํ๏ɺطଘΞϓϦʢυϥΠόʔɺՃໍళ͚ΞϓϦʣΛࢀߟʹ ൺֱ͢Δ͜ͱͰݕ౼ͨ͠ ύεͷೖྗ fl utter_gen
ಠࣗεΫϦϓτͰClass࡞ ίʔυྫ ϝϦοτ γϯϓϧܰྔ IDEͷࢧԉɺίϯύΠϥͷ੩త νΣοΫ IDEͷࢧԉɺίϯύΠϥͷ੩త νΣοΫ σϝϦοτ λΠϙ ΞηοτՃͷʹbuild_runner ͷ࣮ߦ͕ඞཁ εΫϦϓτͷϝϯςφϯείετ
ग़લؗΞϓϦͷઃܭ - Ξηοτཧ طଘΞϓϦͷཧํ๏ 26 Ξηοτͷཧํ๏ɺطଘΞϓϦʢυϥΠόʔɺՃໍళ͚ΞϓϦʣΛࢀߟʹ ൺֱ͢Δ͜ͱͰݕ౼ͨ͠ ύεͷೖྗ fl utter_gen
ಠࣗεΫϦϓτͰClass࡞ ίʔυྫ ϝϦοτ γϯϓϧܰྔ IDEͷࢧԉɺίϯύΠϥͷ੩త νΣοΫ IDEͷࢧԉɺίϯύΠϥͷ੩త νΣοΫ σϝϦοτ λΠϙ ΞηοτՃͷʹbuild_runner ͷ࣮ߦ͕ඞཁ εΫϦϓτͷϝϯςφϯείετ
ग़લؗΞϓϦͷઃܭ - Ξηοτཧ fl utter_gen • IDEͷิɺίϯύΠϥͷ੩తνΣοΫॿ͔Δ • build_runner͢Ͱʹଞͷ༻్Ͱ͍ͬͯͨͷͰͳ͔ͬͨ 27
ग़લؗΞϓϦͷઃܭ - Ξηοτཧ fl utter_gen࣮ࡍͷ༻ํ๏ BuildContextͷextension͔ΒΞΫηε͢ΔΑ͏ʹ͍ͯ͠Δ 28
ग़લؗΞϓϦͷઃܭ - Ξηοτཧ fl utter_gen࣮ࡍͷ༻ํ๏ BuildContextͷextension͔ΒΞΫηε͢ΔΑ͏ʹ͍ͯ͠Δ 29
ग़લؗΞϓϦͷઃܭ - Ξηοτཧ fl utter_gen࣮ࡍͷ༻ํ๏ BuildContextͷextension͔ΒΞΫηε͢ΔΑ͏ʹ͍ͯ͠Δ 30
ΞδΣϯμ લͱޙʹ͚ͯ͠·͢ 1. ࣗݾհ 2. ग़લؗͷ͝հ 3. ग़લؗΞϓϦͷઃܭ - ϑΥϧμߏ
- Ξηοτཧ - ঢ়ଶཧ 4. ग़લؗΞϓϦͷCI/CDڥ 31
ग़લؗΞϓϦͷઃܭ - ঢ়ଶཧ ࠷࣮ۙͨ͠ྫ͔Β ୯७ͦ͏ʹݟ͑Δϝʔϧೝূը໘ 32
ग़લؗΞϓϦͷઃܭ - ঢ়ଶཧ ࠷࣮ۙͨ͠ྫ͔Β ୯७ͦ͏ʹݟ͑Δϝʔϧೝূը໘ ΫϥΠΞϯτଆͰ࣋ͭΤϥʔ 33
ग़લؗΞϓϦͷઃܭ - ঢ়ଶཧ ࠷࣮ۙͨ͠ྫ͔Β ୯७ͦ͏ʹݟ͑Δϝʔϧೝূը໘ ΫϥΠΞϯτଆͰ࣋ͭΤϥʔ αʔόʔ͔Β͞ΕΔΤϥʔ 34
ग़લؗΞϓϦͷઃܭ - ঢ়ଶཧ ࠷࣮ۙͨ͠ྫ͔Β ୯७ͦ͏ʹݟ͑Δϝʔϧೝূը໘ ΫϥΠΞϯτଆͰ࣋ͭΤϥʔ αʔόʔ͔Β͞ΕΔΤϥʔ ιʔγϟϧϩάΠϯػೳ 35
ग़લؗΞϓϦͷઃܭ - ঢ়ଶཧ ࠷࣮ۙͨ͠ྫ͔Β ୯७ͦ͏ʹݟ͑Δϝʔϧೝূը໘ ΫϥΠΞϯτଆͰ࣋ͭΤϥʔ αʔόʔ͔Β͞ΕΔΤϥʔ ιʔγϟϧϩάΠϯػೳ ϝʔϧೝূτʔΫϯͷѻ͍ 36
ग़લؗΞϓϦͷઃܭ - ঢ়ଶཧ ࠷࣮ۙͨ͠ྫ͔Β ͬͱଟ͘ͷঢ়ଶΛ࣋ͭը໘͋Δ 37
ग़લؗΞϓϦͷઃܭ - ঢ়ଶཧ ग़લؗΞϓϦͷঢ়ଶཧ • ֤ը໘͕ෳͷঢ়ଶΛ࣋ͪಘΔ • ࣗલͰঢ়ଶཧΛߦ͏͜ͱݫ͍͠ͷͰϥΠϒϥϦΛ͏͜ͱʹͨ͠ • ग़લؗΞϓϦͷن/ෳࡶ͞ΛؑΈͯɺBLoC͕Ϛονͦ͠͏
38
ग़લؗΞϓϦͷઃܭ - ঢ়ଶཧ ར༻ϥΠϒϥϦ Ҿ༻: https://pub.dev/packages/ fl utter_bloc 39
ग़લؗΞϓϦͷઃܭ - ঢ়ଶཧ ར༻ϥΠϒϥϦ 40 ࣗલ࣮ Provider Riverpod BLoC
ग़લؗΞϓϦͷઃܭ - ঢ়ଶཧ ग़લؗΞϓϦͰͷBLoCͷར༻ํ๏ EventʢϘλϯλοϓɺϝʔϧೖྗʣ State ೝূAPI BLoC 41
ग़લؗΞϓϦͷઃܭ - ঢ়ଶཧ ग़લؗΞϓϦͰͷBLoCͷར༻ํ๏ EventʢϘλϯλοϓɺϝʔϧೖྗʣ State ೝূAPI BLoC 42 EmailAuthState
43
44
45
46
47
48 ϩʔσΟϯάΞΠίϯ
49
50
ग़લؗΞϓϦͷઃܭ - ঢ়ଶཧ Freezed 51
ग़લؗΞϓϦͷઃܭ - ঢ়ଶཧ Freezed 52
ग़લؗΞϓϦͷઃܭ - ঢ়ଶཧ Freezed 53
ग़લؗΞϓϦͷઃܭ - ঢ়ଶཧ Freezed 54
ग़લؗΞϓϦͷઃܭ ·ͱΊ • ϑΥϧμΛػೳ͝ͱʹ͚ɺυϝΠϯผʹࡉԽ͍ͯ͠Δ • fl utter_genͱಠࣗͷextensionΛΈ߹ΘͤͯΞηοτΛཧ͍ͯ͠Δ • ঢ়ଶཧͷͨΊʹBLoCΛ༻͓ͯ͠Γɺ State
֤ঢ়ଶ͝ͱʹઐ༻Ϋϥε + FreezedΛ༻͍ͯ͠Δ 55
ΞδΣϯμ લͱޙʹ͚ͯ͠·͢ 1. ࣗݾհ 2. ग़લؗͷ͝հ 3. ग़લؗΞϓϦͷઃܭ 4. ग़લؗΞϓϦͷCI/CDڥ
56
ΞδΣϯμ લͱޙʹ͚ͯ͠·͢ 1. ࣗݾհ 2. ग़લؗͷ͝հ 3. ग़લؗΞϓϦͷઃܭ 4. ग़લؗΞϓϦͷCI/CDڥ
- Bitriseͷಋೖ - TeamCityͷҠߦ - ݱঢ়ͷCI/CDڥ 57
ग़લؗΞϓϦͷCI/CDڥ - ಋೖલ ࣌2020 2016.5 ग़લؗͱLINE͕ ۀఏܞ 2020.3 ग़લؗͱLINE͕ ࢿຊۀఏܞ
2020.5 LINE͔ΒΞϓϦΤϯδχΞ͕ ։ൃʹࢀՃ ͦΕ·Ͱ֎෦ύʔτφʔ ͕։ൃ͍ͯͨ͠ • CICDڥະಋೖͰɺϩʔΧϧڥͰखಈϏϧυ͍ͯͨ͠ • ग़લؗΞϓϦReact Native, Ճໍళ͚ΞϓϦXamarinͰ։ൃ͞Ε͍ͯͨ 58
ग़લؗΞϓϦͷCI/CDڥ - ಋೖલ Bitriseಋೖͷཧ༝ • React Native ͱ XamarinʹରԠ͍ͯ͠ΔɺBitriseʹനӋͷཱ͕ͬͨɻ •
ͨΊ͠ʹςετಋೖͯ͠Έͨͱ͜Ζɺ্ख͍͖ͦ͘͏ͩͬͨͨΊɺBitriseʹܾ ఆͨ͠ɻ • ҰਓͷΤϯδχΞ͕ઐͰಋೖ࡞ۀΛ୲ͨ͠ɻ 59
ग़લؗΞϓϦͷCI/CDڥ - Bitriseಋೖ ಋೖʹΑΔ։ൃޮ্ • ετΞ͚ɺQA͚ΞϓϦͷࣗಈσϓϩΠ͕ՄೳʹͳΓɺ։ൃޮ্͕ • CI/CDڥʹٻΊΒΕΔػೳेʹຬͨͤͨ 60
ΞδΣϯμ લͱޙʹ͚ͯ͠·͢ 1. ࣗݾհ 2. ग़લؗͷ͝հ 3. ग़લؗΞϓϦͷઃܭ 4. ग़લؗΞϓϦͷCI/CDڥ
- Bitriseͷಋೖ - TeamCityͷҠߦ - ݱঢ়ͷCI/CDڥ 61
ग़લؗΞϓϦͷCI/CDڥ - TeamCityҠߦ TeamCityͱ • JetBrainsͷΦϯϓϨϛεCI/CDπʔϧ • Con fl uence
JIRA ͱੑ͕ߴ͍ 62
ग़લؗΞϓϦͷCI/CDڥ - TeamCityҠߦ Bitrise͔ΒͷҠߦ • ग़લؗࣄۀͷFlutterҠߦ͕͖͔͚ͬ • BtoBΞϓϦʢυϥΠόʔ͚ɺՃໍళ͚ʣ͔ΒઌʹؖࠃνʔϜओಋͰ FlutterԽͨ͠ •
BtoB͚ΞϓϦɺͱͱؖࠃνʔϜͰӡ༻͍ͯͨ͠TeamCityͰCI/ CDڥΛߏஙͨ͠ • ग़લؗΞϓϦͰɺ͢Ͱʹ͋ͬͨϏϧυڥΠϯϑϥΛ͏͜ͱʹͳͬ ͨ 63
• LYϓϥΠϕʔτΫϥυʹTeamCityΛΠϯετʔϧ • TeamCity͔ΒΦϯϓϨͰӡ༻͍ͯ͠ΔMacStudioʹϏϧυ໋ྩ • fastlaneΛͬͯࣗಈεΫϦϓτͰσϓϩΠ • fastlaneɿϞόΠϧΞϓϦ༻ͷ։ൃࣗಈԽπʔϧͰɺ༻ݴޠRuby ग़લؗΞϓϦͷCI/CDڥ -
TeamCityҠߦ ߏ LYࣾϓϥΠϕʔτΫϥυ TeamCity Mac Studio (ΦϯϓϨ) Ϗϧυ໋ྩ σϓϩΠ (ࣗಈεΫϦϓτ) 📲 App Store Google Play 64
ΞδΣϯμ લͱޙʹ͚ͯ͠·͢ 1. ࣗݾհ 2. ग़લؗͷ͝հ 3. ग़લؗΞϓϦͷઃܭ 4. ग़લؗΞϓϦͷCI/CDڥ
- Bitriseͷಋೖ - TeamCityͷҠߦ - ݱঢ়ͷCI/CDڥ 65
ग़લؗΞϓϦͷCI/CDڥ - TeamCityҠߦ Ҡߦޙͷ՝ • ෳͷνʔϜʢυϥΠόʔ͚ΞϓϦνʔϜɺՃໍళ͚ΞϓϦνʔϜͳͲʣ ͕ಉ͡MacStudioΛ༻͍ͯ͠Δ • νʔϜຖͷڥͷҧ͍ʢFlutter, Xcode,
Android SDKͷόʔδϣϯʣ • σϓϩΠͷͨΊͷࣗಈεΫϦϓτͷอक LYϓϥΠϕʔτΫϥυ TeamCity Mac Studio (ΦϯϓϨ) Ϗϧυ໋ྩ σϓϩΠ (ࣗಈεΫϦϓτ) App Store Google Play 📲 66
ग़લؗΞϓϦͷCI/CDڥ - ΦϯϓϨӡ༻ Ҡߦޙͷ՝ • ΞϓϦؒͰҟͳΔXcode, FlutterͷόʔδϣϯΛ༻͍ͯ͠Δ • XcodeXcodes, Flutterfenv(https://github.com/fenv-org/fenv)ͰΓସ͑
• ϏϧυεΫϦϓτʹ༻͍ͯ͠ΔݴޠʢRubyͳͲʣͷอक • ݱঢ়ɺಉ͡ݴޠόʔδϣϯΛ༻͍ͯ͠Δ 67
ग़લؗΞϓϦͷCI/CDڥ - ΦϯϓϨӡ༻ ΦϯϓϨͳΒͰʢʁʣͷਏ͍ • XcodeͱmacOSͷόʔδϣϯཧ • Xcode 15.3macOS 14.0Ҏ্͕ඞཁ
macOS 14.xXcode 14.x͕ΠϯετʔϧͰ͖ͳ͍ • ಉ͡ϚγϯͰXcode 15.3ͱXcode 14.3Λಉ࣌ΠϯετʔϧͰ͖ͳ͍ ʢ྆ํͷXcodeʹରԠͨ͠macOSͷόʔδϣϯ͕ଘࡏ͠ͳ͍ͨΊʣ Xcode 15.3Πϯετʔϧ͍ͨ͠͠ɺ macͷόʔδϣϯ͍͍͋͛ͯʁ ͪΐͬͱͬͯɺདྷिɺXcode 14ͰϏϧυͯ͠ ετΞఏग़͍ͨ͠Μ͚ͩͲ ΞϓϦA୲ ΞϓϦB୲ 68
ग़લؗΞϓϦͷCI/CDڥ - Xcode 15ରԠ 20244݄ͷXcode 15ରԠͷ 2024य़ɺXcodeͷϝδϟʔΞοϓσʔτରԠ 20244݄29Ҏ߱ඞͣXcode 15ͰϏϧυͯ͠Ͷ by
Apple 69 Ҿ༻: https://developer.apple.com/news/
ग़લؗΞϓϦͷCI/CDڥ - Xcode 15ରԠ 20244݄ͷXcode 15ରԠͷ • Xcode 15ରԠ •
Privacy ManifestରԠ • ϥΠϒϥϦຖʹPrivacy ManifestʹରԠ͕ඞཁͳͨΊɺ FlutterΛؚΉϥΠϒϥϦͷόʔδϣϯΞοϓඞཁ 70
ग़લؗΞϓϦͷCI/CDڥ - Xcode 15ରԠ 20244݄ͷXcode 15ରԠͷ • ཁ݅ • 4݄29·ͰʹXcode
15ରԠ͠ɺPrivacy Manifest൛ͷϥΠϒϥϦʹΞοϓ σʔτ͢Δ • Xcode 15/Privacy Manifest ରԠͷͨΊʹɺϦϦʔεΛεέδϡʔϧ • ͕͋ͬͨ࣌ʹϩʔϧόοΫͰ͖ΔΑ͏ʹXcode 14ڥͨ͠ • ଞͷΞϓϦͷ୲ऀͱɺچڥͷҡ࣋ظؒΛ૬ஊ 71
ग़લؗΞϓϦͷCI/CDڥ - Xcode 15ରԠ 20244݄ͷXcode 15ରԠͷ • ཁ݅ • 4݄29·ͰʹXcode
15ରԠ͠ɺPrivacy Manifest൛ͷϥΠϒϥϦʹΞοϓ σʔτ͢Δ • Xcode 15/Privacy Manifest ରԠͷͨΊʹɺϦϦʔεΛεέδϡʔϧ • ͕͋ͬͨ࣌ʹϩʔϧόοΫͰ͖ΔΑ͏ʹXcode 14ڥͨ͠ • ଞͷΞϓϦͷ୲ऀͱɺچڥͷҡ࣋ظؒΛ૬ஊ ϩʔϧόοΫͳ͘ɺແࣄʹϦϦʔε🎉 72
• 2020·ͰϩʔΧϧڥͰखಈϏϧυ͍ͯͨ͠ • BitriseΛಋೖ͢Δ͜ͱͰCI/CDڥΛߏங • FlutterԽΛ͖͔͚ͬʹTeamCityͷҠߦΛߦͳͬͨ • ݱঢ়ͰɺҰ෦ΦϯϓϨͰϏϧυ͍ͯ͠ΔͨΊɺอकӡ༻͕ਏ͍ͷ͕՝ͱ ͳ͍ͬͯΔ ग़લؗΞϓϦͷCI/CDڥ
·ͱΊ 73
શମͷ·ͱΊ ग़લؗΞϓϦʹ͓͚ΔFlutterΞϓϦઃܭ • ཁ݅(ಛʹඇػೳཁ݅) • ෳͷػೳΛಉ࣌ฒߦͰ։ൃͰ͖Δ • ຖिϦϦʔεՄೳ • ཁ݅Λຬͨͨ͢ΊʹɺϑΥϧμߏ͔Βঢ়ଶཧ·Ͱࢼߦࡨޡͨ݁͠Ռɺݱ
ࡏͳ͘ӡ༻Ͱ͖͍ͯΔ 74
શମͷ·ͱΊ CI/CDڥ • ឯ༨ۂંΛܦͯɺΦϯϓϨΛؚΉߏͰCI/CDڥΛߏங͍ͯ͠Δ • ෳΞϓϦ͕ಉ͡ڥΛڞ༗͍ͯ͠ΔͨΊɺͦΕͧΕͷඞཁͱ͢ΔڥΛఏ ڙͰ͖ΔΑ͏ʹ͠ͳ͕Βӡ༻͍ͯ͠Δ 75
We are hiring! 76
Takanori Hirobe ग़લؗΞϓϦʹ͓͚ΔFlutterΞϓϦઃܭͱ ͦΕΛࢧ͑ΔCICDڥͷਐԽ FlutterKaigi 2024 77
Thank you 78