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
FlutterKaigi 2025 システム裏側
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Ryotaro Onoue
November 13, 2025
Programming
0
1.8k
FlutterKaigi 2025 システム裏側
リポジトリはこちら:
https://github.com/FlutterKaigi/2025
前日に半分寝ながらスライドを作っていたので、文章として成立しない箇所, おかしな表現があります🙏
Ryotaro Onoue
November 13, 2025
Tweet
Share
More Decks by Ryotaro Onoue
See All by Ryotaro Onoue
FlutterKaigi 2025 公式アプリ&WebサイトのCDについて
yumnumm
0
78
Terraform+cloud-initで自宅サーバのLXDをIaCするお話
yumnumm
2
180
FlutterKaigi 2024における開発チームの取り組み と 2025への展望
yumnumm
0
74
Dart WebAssemblyを使ったWeb API on Cloudflare Workers
yumnumm
0
100
Apple Walletでパスを作るお話
yumnumm
0
220
私がやってきたアウトプット集
yumnumm
0
180
俺/私のこだわりデスク大大大自慢LT大会 (LTFes #12)
yumnumm
0
120
仕事以外で作成したプロダクトの自慢大会
yumnumm
0
150
Cloudflare Workers でプリントシール機の画像共有システムを制作したお話 @serverlessF
yumnumm
0
280
Other Decks in Programming
See All in Programming
AI駆動開発の本音 〜Claude Code並列開発で見えたエンジニアの新しい役割〜
hisuzuya
4
480
AI主導でFastAPIのWebサービスを作るときに 人間が構造化すべき境界線
okajun35
0
580
SourceGeneratorのマーカー属性問題について
htkym
0
160
CSC307 Lecture 15
javiergs
PRO
0
220
Go Conference mini in Sendai 2026 : Goに新機能を提案し実装されるまでのフロー徹底解説
yamatoya
0
520
Rubyと楽しいをつくる / Creating joy with Ruby
chobishiba
0
210
Windows on Ryzen and I
seosoft
0
140
AWS×クラウドネイティブソフトウェア設計 / AWS x Cloud-Native Software Design
nrslib
6
1.1k
Swift ConcurrencyでよりSwiftyに
yuukiw00w
0
250
RAGでハマりがちな"Excelの罠"を、データの構造化で突破する
harumiweb
9
2.5k
CSC307 Lecture 14
javiergs
PRO
0
450
Fundamentals of Software Engineering In the Age of AI
therealdanvega
1
200
Featured
See All Featured
Heart Work Chapter 1 - Part 1
lfama
PRO
5
35k
Optimising Largest Contentful Paint
csswizardry
37
3.6k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
140
Measuring & Analyzing Core Web Vitals
bluesmoon
9
770
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
199
73k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
290
The Pragmatic Product Professional
lauravandoore
37
7.2k
RailsConf 2023
tenderlove
30
1.4k
Visualization
eitanlees
150
17k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
Music & Morning Musume
bryan
47
7.1k
Transcript
2025.11.12 FlutterKaigi 2025 γεςϜཪଆ FlutterKaigi 2025 લࡇLT
0. ࣗݾհ • ඌ্ ྒྷଠ࿕ (͓ͷ͏͑ Γΐ͏ͨΖ͏) • X:
@YumNumm (͙͙) • 2004.09.17ੜ·Ε (21ࡀ) • ਆಸݝࡏॅ --- Memo --- ɾۀͰFlutter, ϓϥΠϕʔτͰTS, Πϯϑ ϥपΓͰ༡Ϳ ɾਂ×ૣேۦಈ։ൃ ɾࣗϥοΫαʔόຽ
0. ࣗݾհ • Ԭࢁ ୡ࠸ (͓͔· ͨͭ) • X:
@blendthink • 1991.12.16ੜ·Ε (33ࡀ) • େࡕࡏॅ --- Memo --- ɾকعɾຑɾϓϩάϥϛϯά ɾ࠺ͱϚϦΦΧʔτότϧָ͠Έ ɾFlutter ͷσεΫτοϓͰϚϧνΟϯυରԠ ೖͬͨͷͰ͍ͬͺ͍σεΫτοϓΞϓϦ࡞Γ͍ͨ
γεςϜߏ mise-en-place - ڥߏங... ໘... - mise-en-place(MEEZͱൃԻ) Λར༻ͯ͠ɺ FlutterҎ֎ͷ։ൃऀπʔϧ, ݴޠΛͯ͢
ཧ - bun, flutter, node, swift, uv, terraformͳͲͳͲ https://mise.jdx.dev/
γεςϜߏ mise-en-place - ڥߏங... ໘... - mise-en-placeΛར༻ͯ͠ɺFlutterҎ ֎ͷ։ൃऀπʔϧ, ݴޠΛͯ͢ཧ -
bun, flutter, node, swift, uv, terraformͳͲͳͲ - ڥมͷઃఆ... ໘... - sopsΛར༻ͯ͠ɺ֤छڥมΛ҉߸Խ͠ ͯɺgitͰཧ - SupabaseͷDB Password, Access TokenͳͲΛཧͤ͞Δ - miseͱ࿈ܞͯ͠ɺ伴Λอ༗͍ͯ͠Δਓࣗಈ Ͱڥมʹઃఆ͞ΕΔ https://github.com/getsops/sops
- DartͱTypeScriptͷ߹ٕͤ - apps/app: ެࣜΞϓϦ (Android, iOS, macOS, Web) -
apps/website: ެࣜΣϒαΠτ (Jaspr) - bff/*: TypeScriptͷAPIͱύοέʔδ܈(BFFͱݴ͍ͭͭAPIͳͷποί·ͳ͍Ͱ΄͍͠) - packages/*: DartͷPackage - ύοέʔδཧ - Dart melos 3 + Pub Workspaces - TypeScriptBun Workspaces + Turborepo - 7ͭ΄Ͳ͋ΔAPI(ޙड़)ΛҰൃͰσϓϩΠ σΟϨΫτϦߏ
APIߏ Cloudflare Workers + ͘͞ΒΠϯλʔωοτ App Run - ڈɺͯ͢ͷAPIΛTypeScriptͰॻ͍͍ͯͨ -
ࠓ 💙Dart💙 🎯 - DartΛར༻͢Δ͜ͱͰ͜Μͳخ͍͜͠ͱ͕͋Δ - ΞϓϦͳͲͱݴޠ͕ಉ͡ͳͷͰɺܕϥΠϒϥϦ, طଘࢿ࢈Λڞ௨ԽͰ͖Δ
APIߏ Cloudflare Workers + ͘͞ΒΠϯλʔωοτ App Run - ڈɺͯ͢ͷAPIΛTypeScriptͰॻ͍͍ͯͨ -
ࠓ 💙Dart💙 🎯 - DartΛར༻͢Δ͜ͱͰ͜Μͳخ͍͜͠ͱ͕͋Δ - ΞϓϦͳͲͱݴޠ͕ಉ͡ͳͷͰɺܕϥΠϒϥϦ, طଘࢿ࢈Λڞ௨ԽͰ͖Δ - ͜͏͍͏ॴͰڳΛுͬͯʮDartͰAPI࡞ͬͯ·ͬ͢!ʯͬͯݴ͑Δ - ͨͩɺͯ͢ͷ࣮ͰDart͕༗ޮͳ༁Ͱແ͍ - طଘͷϥΠϒϥϦ͕ڧ͗͢Δ߹: Stripe APIͱͷΓऔΓ, Walletύεͷൃߦ - ར༻͢ΔαʔϏεͱͷ݉Ͷ߹͍: νέοτߪೖޙͷॲཧ(Cloudflare Workflows) - Docker imageΛ͘͞ΒΠϯλʔωοτͷApp RunʹσϓϩΠ͢Δ - Cloudflare WorkersͰϦΫΤετΛड͚औΓɺApp RunʹϓϩΩγͯ͠ॲཧ͢Δ ͪͳΈʹ... Dart WebAssemblyΛCloudflare WorkersͰಈ͔࣮͢ -> Dart VMΛCloudflare Containers(linux/amd64)Ͱಈ͔͢ -> Dart VMΛ͘͞ΒΠϯλʔωοτ App Run β/CR൛(linux/amd64)Ͱಈ͔͢ ͷΑ͏ʹɺ։ൃ్தʹߏΛେ͖͘ม͑ͨΓ͍ͯ͠·͢
APIߏ
ৄ͍ٕ͠ज़తͳɺ·Ͱʹٕज़هࣄॻ͖·͢! -> ϥΠϒσϞ
:: ࢿࡐஔ͖ ::
APIߏ - جຊతʹ΄΅ͯ͢ͷϦΫΤετɺCloudflare Workers͕ड͚Δ - ͜Ε͕࣮࣭తͳBFF - ޙड़͢Δ͕ɺDBఀࢭޙͷରࡦ -
·ͨɺ͘͞ΒͷApp RunͰো͕ى͖ͨͱ͖ʹɺ͜͜ͰΞΫηεઌΛΓସ͑ͯ͋͛Δ͜ͱՄೳ - (Cloudflare Workers͕୯Ұোʹͳ͍ͬͯΔ) APIͷྲྀΕ
APIߏ - جຊతʹ΄΅ͯ͢ͷϦΫΤετɺCloudflare Workers͕ड͚Δ - ͜Ε͕࣮࣭తͳBFF - ޙड़͢Δ͕ɺDBఀࢭޙͷରࡦ -
·ͨɺ͘͞ΒͷApp RunͰো͕ى͖ͨͱ͖ʹɺ͜͜ͰΞΫηεઌΛΓସ͑ͯ͋͛Δ͜ͱՄೳ - (Cloudflare Workers͕୯Ұোʹͳ͍ͬͯΔ) - DartͷAPI͕ϦΫΤετΛॲཧ
APIߏ - جຊతʹ΄΅ͯ͢ͷϦΫΤετɺCloudflare Workers͕ड͚Δ - ͜Ε͕࣮࣭తͳBFF - ޙड़͢Δ͕ɺDBఀࢭޙͷରࡦ -
·ͨɺ͘͞ΒͷApp RunͰো͕ى͖ͨͱ͖ʹɺ͜͜ͰΞΫηεઌΛΓସ͑ͯ͋͛Δ͜ͱՄೳ - (Cloudflare Workers͕୯Ұোʹͳ͍ͬͯΔ) - DartͷAPI͕ϦΫΤετΛॲཧ - Supabase Cloud(Postgres)ͱ௨৴͠ɺσʔλϕʔεͷॲཧΛߦ͏
APIߏ - Ұ෦ͷಛघͳϦΫΤετɺinternal-api-proxyΛ௨ͯ͡Cloudflare WorkersʹϦΫΤετΛసૹ - internal-api-proxy֎ͷΠϯλʔωοτʹ࿐ग़͍ͯ͠Δ - HTTP Header(X-API-KEY)Λར༻ͯ͠ɺBFF͔ΒͷϦΫΤετ͔ͦ͏Ͱͳ͍͔Λࣝผ
-
APIߏ - internal-api-proxyɺ Cloudflareʹଘࡏ͢Δ֤छ WorkerʹϦΫΤετΛసૹ r2-internal-api: ΦϒδΣΫτετ Ϩʔδ(R2)ͷૢ࡞Λߦ͏ stripe-internal-api:
ܾࡁURLͷ ൃߦ, ܾࡁྃޙͷWebhookड͚औΓ& ॲཧ Websocket-api: ΞϓϦ͔ΒΞΫηε ՄೳͳWebSocketΤϯυϙΠϯτɻೖ ࣌,ϓϩϑΟʔϧަ࣌ͳͲʹϖΠ ϩʔυΛૹ৴͢Δ profile-share— internal-api: ϓϩϑΟʔ ϧަͷॲཧΛ୲͏
νέοτಡΈऔΓ ಡΈऔΒΕΔଆ(ࠨ)Ͱɺೖॲཧྃޙʹ௨&ೖࡁΈදࣔʹΓସΘΔ
ϓϩϑΟʔϧަ ࠨ2ͭ(εϚϗ)͕ݸਓΞΧϯτ, PCผͷΞΧϯτ ඵޙʹө͞ΕΔ͜ͱ͕Θ͔Δɻ
None
FlutterKaigiऴྃޙ - SupabaseͷDBΛͣͬͱಈ͔ͬ͠ͺͳ ͠ʹ͢Δͷݱ࣮తͰͳ͍ - FlutterKaigi͕ऴΘͬͯམͪண͍ ͨΒDBΛࢭΊ͍ͨ -> GETܥAPIͷεφοϓγϣοτΛ ࡱͬͯɺBFFʹຒΊࠐΈͪ͠Ό͏
-> Cloudflare Workersܹ҆ͳͷ Ͱɺϥϯχϯάίετ΄΅0ͷ·· APIΛੜ͖ͤ͞ΒΕΔ (Read-only)
Terraform APIܥΛIaC - FlutterKaigi 2025ͰɺTerraformΛར༻ͯ͠ ΠϯϑϥϦιʔεΛίʔυͰཧ͠·ͨ͠(IaC) - IaC (Infrastructure as
a Code) - SupabaseͷΠϯελϯε, FirebaseͷϓϩδΣΫτ, ͘͞ΒΠϯλʔωοτͷApp RunͳͲΛ TerraformͰཧ - ͜ΕʹΑΓɺΠϯελϯεͷ্ཱͪ͛͠ͳͲΛ؆୯ʹߦ͑ΔΑ͏ʹͳͬͨ - ·ͨɺΠϯϑϥϦιʔεͷૢ࡞͕git্ʹΔͨΊɺཧ͍͢͠ - ഁյ͢Δͱ͖ terraform destroyίϚϯυͰҰൃരൃ!
CD Using GitHub Actions - FlutterKaigi 2025ͷެࣜΞϓϦ, WebαΠτͳͲ GitHub ActionsΛ௨ͯࣗ͡ಈσϓϩΠ
- [iOS, macOS] Xcode managed CertificatesΛར༻ͯ͠ɺূ໌ॻͷཧͳ͠ʹΞϓϦΛσϓϩΠ - [Android] [TODO] Google CloudͷWorkload Identity࿈ܞΛར༻ͯ͠ɺӅಗใ(αʔϏεΞΧ ϯτͷJSON, TokenͳͲ)Λઃఆ͢Δ͜ͱͳ͘ɺPlay StoreʹόΠφϦΛΞοϓϩʔυ - [Web] Cloudflare WorkersΛར༻ͯ͠ɺPR࡞࣌ʹϓϨϏϡʔΛσϓϩΠ ...