Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
出前館アプリにおけるFlutterアプリ設計とそれを支えるCICD環境の進化
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
株式会社出前館
November 26, 2024
Technology
2.3k
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 株式会社出前館
中期計画、2回作ってみた ~業務委託と正社員、両方の視点から~
demaecan
1
890
複雑にからみあう複数のシステムを要する出前館QAの実情、展望
demaecan
0
180
QA業務を変える(!?)AIを併用した不具合分析の実践
demaecan
0
200
出前館アプリの品質を支えるリリーストレインとその実践
demaecan
0
240
出前館アプリ進化論 アーキテクチャと組織のリアルな変⾰の舞台裏
demaecan
0
680
Flutterにしてよかった?出前館アプリを2年運用して気づいたことを全部話します
demaecan
1
1.2k
Boxを“使われる場”にする統制と自動化の仕組み
demaecan
1
450
生成AI導入における「短期ROIを超えた」共存戦略
demaecan
0
150
Okta Identity Governanceで実現する最小権限の原則
demaecan
1
490
Other Decks in Technology
See All in Technology
2026TECHFRESH畢業分享會 - 原生還是跨平台? App 開發踩坑實錄
line_developers_tw
PRO
0
1.1k
Android の公式 Skill / Android skills
yanzm
0
150
AGENTS.mdとSkillsで始めるAIエージェント活用
sonoda_mj
3
220
自宅LLMの話
jacopen
1
600
AAIFに入ってみた ~内から見えるコミュニティ動向~
sato4
0
240
20260619 私の日常業務での生成 AI 活用
masaruogura
1
220
FinOps × AIエージェントで実現する コストインシデントの自動調査
oasis1994liveforever
0
140
脆弱性対応、どこで線を引くか
rymiyamoto
1
400
2026 TECHFRESH 畢業分享會 - AI-Native 重塑軟體工程與虛擬講師
line_developers_tw
PRO
0
1.1k
機械学習を「社会実装」するということ 2026年夏版 / Social Implementation of Machine Learning June 2026 Version
moepy_stats
6
2.4k
プロダクト開発から業務改善コンサルまで。事業全体へ「染み出す」ことで広がるエンジニアの可能性
ham0215
0
130
LLMにもCAP定理があるという話
harukasakihara
0
380
Featured
See All Featured
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2k
Designing Experiences People Love
moore
143
24k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
430
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
180
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
330
What does AI have to do with Human Rights?
axbom
PRO
1
2.2k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.5k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
Tell your own story through comics
letsgokoyo
1
950
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
The Curious Case for Waylosing
cassininazir
1
390
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