Slide 1

Slide 1 text

2025.11.12 FlutterKaigi 2025 γεςϜཪଆ  FlutterKaigi 2025 લ໷ࡇLT

Slide 2

Slide 2 text

0. ࣗݾ঺հ  • ඌ্ ྒྷଠ࿕ (͓ͷ͏͑ Γΐ͏ͨΖ͏) • X: @YumNumm (΋͙΋͙) • 2004.09.17ੜ·Ε (21ࡀ) • ਆಸ઒ݝࡏॅ --- Memo --- ɾۀ຿Ͱ͸Flutter, ϓϥΠϕʔτͰ͸TS, Πϯϑ ϥपΓͰ༡Ϳ ɾਂ໷×ૣேۦಈ։ൃ ɾࣗ୐ϥοΫαʔόຽ

Slide 3

Slide 3 text

0. ࣗݾ঺հ  • Ԭࢁ ୡ࠸ (͓͔΍· ͨͭ΍) • X: @blendthink • 1991.12.16ੜ·Ε (33ࡀ) • େࡕ෎ࡏॅ --- Memo --- ɾকعɾຑ੃ɾϓϩάϥϛϯά ɾ೥຤͸࠺ͱϚϦΦΧʔτότϧָ͠Έ ɾFlutter ͷσεΫτοϓͰϚϧν΢Οϯυ΢ରԠ ೖͬͨͷͰ͍ͬͺ͍σεΫτοϓΞϓϦ࡞Γ͍ͨ

Slide 4

Slide 4 text

γεςϜߏ੒ mise-en-place - ؀ڥߏங... ໘౗... - mise-en-place(MEEZͱൃԻ) Λར༻ͯ͠ɺ FlutterҎ֎ͷ։ൃऀπʔϧ, ݴޠΛ͢΂ͯ ؅ཧ - bun, flutter, node, swift, uv, terraformͳͲͳͲ  https://mise.jdx.dev/

Slide 5

Slide 5 text

γεςϜߏ੒ 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

Slide 6

Slide 6 text

- 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(ޙड़)ΛҰൃͰσϓϩΠ σΟϨΫτϦߏ੒ 

Slide 7

Slide 7 text

APIߏ੒ Cloudflare Workers + ͘͞ΒΠϯλʔωοτ App Run - ڈ೥౓͸ɺ͢΂ͯͷAPIΛTypeScriptͰॻ͍͍ͯͨ - ࠓ೥͸ 💙Dart💙 🎯 - DartΛར༻͢Δ͜ͱͰ͜Μͳخ͍͜͠ͱ͕͋Δ - ΞϓϦͳͲͱݴޠ͕ಉ͡ͳͷͰɺܕ΍ϥΠϒϥϦ, طଘࢿ࢈Λڞ௨ԽͰ͖Δ 

Slide 8

Slide 8 text

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)Ͱಈ͔͢ ͷΑ͏ʹɺ։ൃ్தʹߏ੒Λେ͖͘ม͑ͨΓ͍ͯ͠·͢

Slide 9

Slide 9 text

APIߏ੒ 

Slide 10

Slide 10 text

ৄ͍ٕ͠ज़తͳ࿩͸ɺ೥຤·Ͱʹٕज़هࣄॻ͖·͢! -> ϥΠϒσϞ 

Slide 11

Slide 11 text

:: ࢿࡐஔ͖৔ :: 

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

APIߏ੒  - Ұ෦ͷಛघͳϦΫΤετ͸ɺinternal-api-proxyΛ௨ͯ͡Cloudflare WorkersʹϦΫΤετΛసૹ - internal-api-proxy͸֎ͷΠϯλʔωοτʹ࿐ग़͍ͯ͠Δ - HTTP Header(X-API-KEY)Λར༻ͯ͠ɺBFF͔ΒͷϦΫΤετ͔ͦ͏Ͱͳ͍͔Λࣝผ -

Slide 16

Slide 16 text

APIߏ੒  - internal-api-proxy͸ɺ Cloudflare಺ʹଘࡏ͢Δ֤छ WorkerʹϦΫΤετΛసૹ r2-internal-api: ΦϒδΣΫτετ Ϩʔδ(R2)΁ͷૢ࡞Λߦ͏ stripe-internal-api: ܾࡁURLͷ ൃߦ, ܾࡁ׬ྃޙͷWebhookड͚औΓ& ॲཧ Websocket-api: ΞϓϦ͔ΒΞΫηε ՄೳͳWebSocketΤϯυϙΠϯτɻೖ ৔࣌,ϓϩϑΟʔϧަ׵࣌ͳͲʹϖΠ ϩʔυΛૹ৴͢Δ profile-share— internal-api: ϓϩϑΟʔ ϧަ׵ͷॲཧΛ୲͏

Slide 17

Slide 17 text

νέοτಡΈऔΓ ಡΈऔΒΕΔଆ(ࠨ)Ͱ͸ɺೖ৔ॲཧ׬ྃ௚ޙʹ௨஌&ೖ৔ࡁΈදࣔʹ੾ΓସΘΔ

Slide 18

Slide 18 text

ϓϩϑΟʔϧަ׵ ࠨ2ͭ(εϚϗ)͕ݸਓΞΧ΢ϯτ, PC͸ผͷΞΧ΢ϯτ ਺ඵޙʹ൓ө͞ΕΔ͜ͱ͕Θ͔Δɻ

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

FlutterKaigiऴྃޙ - SupabaseͷDBΛͣͬͱಈ͔ͬ͠ͺͳ ͠ʹ͢Δͷ͸ݱ࣮తͰ͸ͳ͍ - FlutterKaigi͕ऴΘͬͯམͪண͍ ͨΒDBΛࢭΊ͍ͨ -> GETܥAPIͷεφοϓγϣοτΛ ࡱͬͯɺBFFʹ௚ຒΊࠐΈͪ͠Ό͏ -> Cloudflare Workers͸ܹ҆ͳͷ Ͱɺϥϯχϯάίετ͸΄΅0ͷ·· APIΛ௕ੜ͖ͤ͞ΒΕΔ (Read-only) 

Slide 21

Slide 21 text

Terraform APIܥΛIaC - FlutterKaigi 2025Ͱ͸ɺTerraformΛར༻ͯ͠ ΠϯϑϥϦιʔεΛίʔυͰ؅ཧ͠·ͨ͠(IaC) - IaC (Infrastructure as a Code) - SupabaseͷΠϯελϯε, FirebaseͷϓϩδΣΫτ, ͘͞ΒΠϯλʔωοτͷApp RunͳͲΛ TerraformͰ؅ཧ - ͜ΕʹΑΓɺΠϯελϯεͷ্ཱͪ͛௚͠ͳͲΛ؆୯ʹߦ͑ΔΑ͏ʹͳͬͨ - ·ͨɺΠϯϑϥϦιʔεͷૢ࡞͕git্ʹ࢒ΔͨΊɺ؅ཧ͠΍͍͢ - ഁյ͢Δͱ͖΋ terraform destroyίϚϯυͰҰൃരൃ! 

Slide 22

Slide 22 text

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࡞੒࣌ʹϓϨϏϡʔΛσϓϩΠ ...