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
Ryotaro Onoue
November 13, 2025
Programming
0
170
FlutterKaigi 2025 システム裏側
Ryotaro Onoue
November 13, 2025
Tweet
Share
More Decks by Ryotaro Onoue
See All by Ryotaro Onoue
Terraform+cloud-initで自宅サーバのLXDをIaCするお話
yumnumm
2
130
FlutterKaigi 2024における開発チームの取り組み と 2025への展望
yumnumm
0
57
Dart WebAssemblyを使ったWeb API on Cloudflare Workers
yumnumm
0
78
Apple Walletでパスを作るお話
yumnumm
0
190
私がやってきたアウトプット集
yumnumm
0
150
俺/私のこだわりデスク大大大自慢LT大会 (LTFes #12)
yumnumm
0
88
仕事以外で作成したプロダクトの自慢大会
yumnumm
0
120
Cloudflare Workers でプリントシール機の画像共有システムを制作したお話 @serverlessF
yumnumm
0
260
Flutter × Jetpack Composeの相互運用 @ GDG Tokyo 2023
yumnumm
0
1.2k
Other Decks in Programming
See All in Programming
SODA - FACT BOOK(JP)
sodainc
1
9.4k
Nitro v3
kazupon
2
220
r2-image-worker
yusukebe
1
160
SidekiqでAIに商品説明を生成させてみた
akinko_0915
0
120
Bakuraku E2E Scenario Test System Architecture #bakuraku_qa_study
teyamagu
PRO
0
600
自動テストのアーキテクチャとその理由ー大規模ゲーム開発の場合ー
segadevtech
2
860
AsyncSequenceとAsyncStreamのプロポーザルを全部読む!!
s_shimotori
1
260
Eloquentを使ってどこまでコードの治安を保てるのか?を新人が考察してみた
itokoh0405
0
3.1k
Kotlin + Power-Assert 言語組み込みならではのAssertion Library採用と運用ベストプラクティス by Kazuki Matsuda/Gen-AX
kazukima
0
100
CSC509 Lecture 10
javiergs
PRO
0
170
Verilator + Rust + gRPC と Efinix の RISC-V でAIアクセラレータをAIで作ってる話 RTLを語る会(18) 2025/11/08
ryuz88
0
320
Blazing Fast UI Development with Compose Hot Reload (Bangladesh KUG, October 2025)
zsmb
2
490
Featured
See All Featured
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
The Cost Of JavaScript in 2023
addyosmani
55
9.2k
The Cult of Friendly URLs
andyhume
79
6.7k
A designer walks into a library…
pauljervisheath
210
24k
Done Done
chrislema
186
16k
Building Adaptive Systems
keathley
44
2.8k
The Language of Interfaces
destraynor
162
25k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.5k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.2k
Making the Leap to Tech Lead
cromwellryan
135
9.6k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Into the Great Unknown - MozCon
thekraken
40
2.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࡞࣌ʹϓϨϏϡʔΛσϓϩΠ ...