Upgrade to Pro — share decks privately, control downloads, hide ads and more …

FlutterKaigi 2025 システム裏側

FlutterKaigi 2025 システム裏側

Avatar for Ryotaro Onoue

Ryotaro Onoue

November 13, 2025
Tweet

More Decks by Ryotaro Onoue

Other Decks in Programming

Transcript

  1. 0. ࣗݾ঺հ  • ඌ্ ྒྷଠ࿕ (͓ͷ͏͑ Γΐ͏ͨΖ͏) • X:

    @YumNumm (΋͙΋͙) • 2004.09.17ੜ·Ε (21ࡀ) • ਆಸ઒ݝࡏॅ --- Memo --- ɾۀ຿Ͱ͸Flutter, ϓϥΠϕʔτͰ͸TS, Πϯϑ ϥपΓͰ༡Ϳ ɾਂ໷×ૣேۦಈ։ൃ ɾࣗ୐ϥοΫαʔόຽ
  2. 0. ࣗݾ঺հ  • Ԭࢁ ୡ࠸ (͓͔΍· ͨͭ΍) • X:

    @blendthink • 1991.12.16ੜ·Ε (33ࡀ) • େࡕ෎ࡏॅ --- Memo --- ɾকعɾຑ੃ɾϓϩάϥϛϯά ɾ೥຤͸࠺ͱϚϦΦΧʔτότϧָ͠Έ ɾFlutter ͷσεΫτοϓͰϚϧν΢Οϯυ΢ରԠ ೖͬͨͷͰ͍ͬͺ͍σεΫτοϓΞϓϦ࡞Γ͍ͨ
  3. γεςϜߏ੒ 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
  4. - DartͱTypeScriptͷ߹ٕͤ - apps/app: ެࣜΞϓϦ (Android, iOS, macOS, Web) -

    apps/website: ެࣜ΢ΣϒαΠτ (Jaspr) - bff/*: TypeScriptͷAPIͱύοέʔδ܈(BFFͱݴ͍ͭͭAPIͳͷ͸ποί·ͳ͍Ͱ΄͍͠) - packages/*: DartͷPackage - ύοέʔδ؅ཧ - Dart͸ melos 3 + Pub Workspaces - TypeScript͸Bun Workspaces + Turborepo - 7ͭ΄Ͳ͋ΔAPI(ޙड़)ΛҰൃͰσϓϩΠ σΟϨΫτϦߏ੒ 
  5. APIߏ੒ Cloudflare Workers + ͘͞ΒΠϯλʔωοτ App Run - ڈ೥౓͸ɺ͢΂ͯͷAPIΛTypeScriptͰॻ͍͍ͯͨ -

    ࠓ೥͸ 💙Dart💙 🎯 - DartΛར༻͢Δ͜ͱͰ͜Μͳخ͍͜͠ͱ͕͋Δ - ΞϓϦͳͲͱݴޠ͕ಉ͡ͳͷͰɺܕ΍ϥΠϒϥϦ, طଘࢿ࢈Λڞ௨ԽͰ͖Δ 
  6. 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)Ͱಈ͔͢ ͷΑ͏ʹɺ։ൃ్தʹߏ੒Λେ͖͘ม͑ͨΓ͍ͯ͠·͢
  7. APIߏ੒  - جຊతʹ΄΅͢΂ͯͷϦΫΤετ͸ɺCloudflare Workers͕ड͚Δ - ͜Ε͕࣮࣭తͳBFF - ޙड़͢Δ͕ɺDBఀࢭޙͷରࡦ -

    ·ͨɺ͘͞ΒͷApp RunͰো֐͕ى͖ͨͱ͖ʹɺ͜͜ͰΞΫηεઌΛ੾Γସ͑ͯ͋͛Δ͜ͱ΋Մೳ - (Cloudflare Workers͕୯Ұো֐఺ʹͳͬͯ͸͍Δ) APIͷྲྀΕ
  8. APIߏ੒  - جຊతʹ΄΅͢΂ͯͷϦΫΤετ͸ɺCloudflare Workers͕ड͚Δ - ͜Ε͕࣮࣭తͳBFF - ޙड़͢Δ͕ɺDBఀࢭޙͷରࡦ -

    ·ͨɺ͘͞ΒͷApp RunͰো֐͕ى͖ͨͱ͖ʹɺ͜͜ͰΞΫηεઌΛ੾Γସ͑ͯ͋͛Δ͜ͱ΋Մೳ - (Cloudflare Workers͕୯Ұো֐఺ʹͳͬͯ͸͍Δ) - Dart੡ͷAPI͕ϦΫΤετΛॲཧ
  9. APIߏ੒  - جຊతʹ΄΅͢΂ͯͷϦΫΤετ͸ɺCloudflare Workers͕ड͚Δ - ͜Ε͕࣮࣭తͳBFF - ޙड़͢Δ͕ɺDBఀࢭޙͷରࡦ -

    ·ͨɺ͘͞ΒͷApp RunͰো֐͕ى͖ͨͱ͖ʹɺ͜͜ͰΞΫηεઌΛ੾Γସ͑ͯ͋͛Δ͜ͱ΋Մೳ - (Cloudflare Workers͕୯Ұো֐఺ʹͳͬͯ͸͍Δ) - Dart੡ͷAPI͕ϦΫΤετΛॲཧ - Supabase Cloud(Postgres)ͱ௨৴͠ɺσʔλϕʔε΁ͷॲཧΛߦ͏
  10. APIߏ੒  - internal-api-proxy͸ɺ Cloudflare಺ʹଘࡏ͢Δ֤छ WorkerʹϦΫΤετΛసૹ r2-internal-api: ΦϒδΣΫτετ Ϩʔδ(R2)΁ͷૢ࡞Λߦ͏ stripe-internal-api:

    ܾࡁURLͷ ൃߦ, ܾࡁ׬ྃޙͷWebhookड͚औΓ& ॲཧ Websocket-api: ΞϓϦ͔ΒΞΫηε ՄೳͳWebSocketΤϯυϙΠϯτɻೖ ৔࣌,ϓϩϑΟʔϧަ׵࣌ͳͲʹϖΠ ϩʔυΛૹ৴͢Δ profile-share— internal-api: ϓϩϑΟʔ ϧަ׵ͷॲཧΛ୲͏
  11. Terraform APIܥΛIaC - FlutterKaigi 2025Ͱ͸ɺTerraformΛར༻ͯ͠ ΠϯϑϥϦιʔεΛίʔυͰ؅ཧ͠·ͨ͠(IaC) - IaC (Infrastructure as

    a Code) - SupabaseͷΠϯελϯε, FirebaseͷϓϩδΣΫτ, ͘͞ΒΠϯλʔωοτͷApp RunͳͲΛ TerraformͰ؅ཧ - ͜ΕʹΑΓɺΠϯελϯεͷ্ཱͪ͛௚͠ͳͲΛ؆୯ʹߦ͑ΔΑ͏ʹͳͬͨ - ·ͨɺΠϯϑϥϦιʔεͷૢ࡞͕git্ʹ࢒ΔͨΊɺ؅ཧ͠΍͍͢ - ഁյ͢Δͱ͖΋ terraform destroyίϚϯυͰҰൃരൃ! 
  12. 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࡞੒࣌ʹϓϨϏϡʔΛσϓϩΠ ...