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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
株式会社出前館
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
240
現実的なセキュリティ体制の構築 限られたリソースの中で成果を最大化する「選択と集中」
demaecan
7
4.9k
中期計画、2回作ってみた ~業務委託と正社員、両方の視点から~
demaecan
1
1.2k
複雑にからみあう複数のシステムを要する出前館QAの実情、展望
demaecan
0
220
QA業務を変える(!?)AIを併用した不具合分析の実践
demaecan
0
260
出前館アプリの品質を支えるリリーストレインとその実践
demaecan
0
310
出前館アプリ進化論 アーキテクチャと組織のリアルな変⾰の舞台裏
demaecan
0
970
Flutterにしてよかった?出前館アプリを2年運用して気づいたことを全部話します
demaecan
1
1.4k
Boxを“使われる場”にする統制と自動化の仕組み
demaecan
1
540
Other Decks in Technology
See All in Technology
「ピッケル本」日本語版は4.0(第6版)が出版されるべき / pickaxe4-nagoyark05
kakutani
1
170
映像変換サーバーなしで端末内でHLSを生成してライブ配信
hikarusato
0
120
生成AIエージェントを用いた、 手動テスト手順書から自動テストへの 変換手法の検討
magicpod
0
160
事業課題から技術的負債に向き合う
sansantech
PRO
2
1.9k
OpenTelemetry eBPF Instrumentationの舞台裏 / Behind the Scenes of OpenTelemetry eBPF Instrumentation
ymotongpoo
4
1.3k
Railsのように考える: See through the Master
snoozer05
PRO
4
960
OpenTelemetryのメトリクスをCloudWatchに送ってPromQLで見てみた
ota1022
0
150
研究開発部の紹介 / Sansan R&D Profile
sansan33
PRO
5
25k
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
3
510
AI de Idea
kawaguti
PRO
2
120
俺の仕事は AIに奪われないし、たぶんその BIも要らない
hikaruri
0
500
登壇の自信を奪う3匹のオバケ / 3 Ghosts That Rob You of Your Confidence in Public Speaking
pauli
9
980
Featured
See All Featured
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
260
Ruling the World: When Life Gets Gamed
codingconduct
0
330
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
Agile that works and the tools we love
rasmusluckow
331
22k
My Coaching Mixtape
mlcsv
0
310
WCS-LA-2024
lcolladotor
0
830
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
490
How STYLIGHT went responsive
nonsquared
100
6.3k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
Scaling GitHub
holman
464
140k
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