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

FlutterKaigi 2024における開発チームの取り組み と 2025への展望

FlutterKaigi 2024における開発チームの取り組み と 2025への展望

Ryotaro Onoue

April 26, 2025
Tweet

More Decks by Ryotaro Onoue

Other Decks in Programming

Transcript

  1. 0. whoami 2 ɾඌ্ ྒྷଠ࿕ (͓ͷ͏͑ Γΐ͏ͨΖ͏) ɾ2004.09.17 (20ࡀ) ɾFlutter,

    TS, Cloudflare͕޷͖ ɾגࣜձࣾΏΊΈ 2023.4 ৽ଔೖࣾ ɾFlutter Ϧʔυ
  2. 3 ɾඌ্ ྒྷଠ࿕ (͓ͷ͏͑ Γΐ͏ͨΖ͏) ɾ2004.09.17 (20ࡀ) ɾFlutter, TS, Cloudflare͕޷͖

    ɾגࣜձࣾΏΊΈ 2023.4 ৽ଔೖࣾ ɾFlutter Ϧʔυ ɾEQMonitorͱ͍͏஍਒ؔ࿈ͷΞϓϦέʔγϣϯ Λݸਓ։ൃ͍ͯ͠·͢ ɾFlutter੡ ɾ࠷ۙϦϦʔεΛαϘ͍ͬͯΔͷͰɺ5݄͸ؤு Γ·͢ 0. whoami
  3. 4 ɾඌ্ ྒྷଠ࿕ (͓ͷ͏͑ Γΐ͏ͨΖ͏) ɾ2004.09.17 (20ࡀ) ɾFlutter, TS, Cloudflare͕޷͖

    ɾגࣜձࣾΏΊΈ 2023.4 ৽ଔೖࣾ ɾFlutter Ϧʔυ ɾEQMonitorͱ͍͏஍਒ؔ࿈ͷΞϓϦέʔγϣϯΛݸ ਓ։ൃ͍ͯ͠·͢ ɾFlutter੡ ɾ࠷ۙϦϦʔεΛαϘ͍ͬͯΔͷͰɺ5݄͸ؤுΓ· ͢ ɾ࠷ۙϥοΫαʔόΛങͬͨ💸 ɾFUJITSU PRIMERGY RX2530 M4 ɾXeon Gold 6138 x2 (40Core 80Thread) 0. whoami
  4. ࠓ೔ͷ͓͠ͳ͕͖ 5 1. FlutterKaigi ӡӦͷมભ 2. FlutterKaigi 2023 ͷཪଆ 3.

    FlutterKaigi 2024 ͷཪଆ 4. FlutterKaigi 2025 ͷ໺๬ + ·ͱΊ
  5. FlutterKaigiͱ͸? FlutterKaigi ӡӦͷมભ • Flutterʹؔ͢Δ೔ຊ࠷େڃͷΧϯϑΝϨϯεΠϕϯτ • 4ճ։࠵ࡁΈ • ೥ʹ1ճ ྫ೥11݄ࠒʹ։࠵

    • ڈ೥ͷFlutterKaigi 2024Ͱ͸23ηογϣϯ࣮ࢪ • ΦϑϥΠϯࢀՃ 347໊, ΦϯϥΠϯ૯ࢹௌ਺3,082໊ • FlutterKaigi 2021, 2022͸ΦϯϥΠϯ։࠵ • FlutterKaigi 2023, 2024͸ΦϑϥΠϯ։࠵ 7
  6. FlutterKaigi ӡӦࢀՃ FlutterKaigi ӡӦͷมભ • ΏΊΈ FlutterϦʔυΤϯδχΞͷྛ͞Μ (@K9i_apps)͕ɺFlutterKaigiͷӡӦͩͬͨ • ελοϑืूͷҊ಺Λڞ༗ͯͩͬͨ͘͠͞

    • ΋ͱ΋ͱɺΏΊΈ FlutterςοΫϦʔυͷ͓͔΍·Μ͞Μ (@blendthink)͕ FlutterKaigi 2023Ͱొஃ͞Ε͍ͯΔͷΛݟ͍ͯͨ • ͍͔ͭొஃͯ͠Έ͔ͨͬͨ -> ʮͦΕͳΒ ·ͣ͸಺෦ͷ͓ख఻͍͔Β!ʯ -> 2023~2025·Ͱͬ͘͟Γ֓ཁΛݟͨޙʹɺͦΕͧΕͷ೥ʹ͍ͭͯৄ͘͠৮Ε͍͖ͯ·͢ 8
  7. FlutterKaigi 2023 FlutterKaigi ӡӦͷมભ • FlutterKaigi 2023: ॳͷΦϑϥΠϯ։࠵ • ίϩφ΢ΠϧεʹΑΔۓٸࣄଶએݴ౳ͷऩଋʹΑΓΦϑϥΠϯͰͷ։࠵͕ܾఆ

    • ࠓ·ͰΦϑϥΠϯͰͷ։࠵͕ͳ͍தख୳ΓͰ࣮ࢪ • ։ൃܥνʔϜߏ੒ • ΧϯϑΝϨϯεΞϓϦνʔϜ: ΞϓϦͷ։ൃ • ΧϯϑΝϨϯε΢ΣϒαΠτνʔϜ: ެࣜWebαΠτͷ։ൃ • ίΞελοϑʹࢀՃ͍͖ͤͯͨͩ͞ɺެࣜWebαΠτͷ੍࡞ʹܞΘΓ·ͨ͠! 9
  8. FlutterKaigi 2024 FlutterKaigi ӡӦͷมભ • FlutterKaigi 2024: ΦϑϥΠϯ։࠵2೥໨ • ։ൃνʔϜͰ͸ɺେ͖͘2఺มߋΛ͢Δ͜ͱʹͨ͠

    • ొஃ৘ใ౳ͷσʔλΛsupabaseͰ؅ཧ͢Δ͜ͱʹ • νέοτγεςϜ(ߪೖ, ೖ৔؅ཧ)Λࣗ࡞͢Δ͜ͱʹ • ։ൃܥνʔϜߏ੒ • ΞϓϦνʔϜ: ΞϓϦͷ։ൃ • ΢ΣϒαΠτνʔϜ: ެࣜWebαΠτͷ։ൃ • [NEW!] σʔλνʔϜ: ΞϓϦ, ΢ΣϒαΠτ, νέοτγεςϜ͕ѻ͏σʔλΛ֨ೲ • [NEW!] νέοτνʔϜ: νέοτγεςϜͷ։ൃ (͜ͷޙৄ͓͘͠఻͍͖͑ͯ͠·͢) 10
  9. FlutterKaigi 2025 FlutterKaigi ӡӦͷมભ • FlutterKaigi 2025: ࠓ೥! • ڈ೥ͷߏ੒ΛϕʔεʹνʔϜ࠷దԽ

    • ։ൃܥνʔϜߏ੒ • ΞϓϦνʔϜ: ΞϓϦͷ։ൃ • ΢ΣϒαΠτνʔϜ: ެࣜWebαΠτͷ։ൃ • [NEW!] ΠϯϑϥνʔϜ: (<- ॴଐ) • νέοτγεςϜͷ։ൃ (چνέοτνʔϜͷ໾ׂ) • σʔλϕʔεͱAPIͷઃܭ, ։ൃ (چσʔλνʔϜͷ໾ׂ) • [NEW] μογϡϘʔυΞϓϦͷ։ൃ 11
  10. FlutterKaigi 2023 (ͷཪଆ #1) FlutterKaigi ӡӦͷมભ ίϯςϯπ؅ཧͷ͓࿩ • εϙϯαʔҰཡ, ηογϣϯҰཡ,

    ελοϑ ҰཡͳͲΛWebαΠτ΍ΞϓϦέʔγϣϯʹ౉ ͢ඞཁ͕͋Δ • FlutterKaigi 2022·Ͱ͸ɺͦΕͧΕͷ ΞϓϦέʔγϣϯ಺ʹϋʔυίʔσΟϯάͯ͠ ͍ͨ • ͔͠͠ɺมߋͷ౓ʹίʔυΛॻ͖׵͑ PRΛ࡞੒͠ ࠶σϓϩΠ͢Δͷ͸໘౗ • -> NEWT CMS ͱ͍͏πʔϧΛಋೖ 14
  11. FlutterKaigi 2023 (ͷཪଆ #1) FlutterKaigi ӡӦͷมભ ίϯςϯπ؅ཧͷ͓࿩ NEWT CMSʹ͸͍͔ͭ͘՝୊͕͋ͬͨ 1.

    ը૾౳ͷCORSΤϥʔ • ύϑΥʔϚϯεͷ໰୊͔ΒɺϨϯμϦϯάΛHTML Renderer͔ΒCanvaskitʹ੾Γସ͑ͨ ͔ͬͨ • NEWT CMSͰ͸ɺը૾౳ͷAssetΛ(಺෦తʹ)Google Cloud Storageʹอଘ͍ͯͨ͠ • μογϡϘʔυ͔ΒCORS (ΦϦδϯؒϦιʔεڞ༗)ͷઃఆ͕ग़དྷͳ͔ͬͨ • -> Flutter WebͷCanvaskitΛར༻ͨ࣌͠ʹCORSΤϥʔͱͳΓ ը૾͕දࣔͰ͖ͳ͘ͳΔ • CanvaskitͰ͸ɺFetch API͔ΒFetch͔ͯ͠Βදࣔ͢ΔͨΊ • HTML RendererͰ͸ɺHTMLͷimgཁૉͱͯ͠ද͍ࣔͯͨͨ͠Ί CORSΛճආͰ͖ͨ • -> Flutter WebͷHTML RendererΛར༻͢Δඞཁ͕ग़͖ͯͨ 15 ※ 2023೥౰࣌ͷ࿩ͳͷͰ ࠓ͸վળ͞Ε͍ͯΔ͔΋͠Ε·ͤΜ
  12. FlutterKaigi 2023 (ͷཪଆ #1) FlutterKaigi ӡӦͷมભ • ίϯςϯπ؅ཧͷ͓࿩ • NEWT

    CMSʹ͸͍͔ͭ͘՝୊͕͋ͬͨ 1.ը૾౳ͷCORSΤϥʔ • NEWT CMSͰ͸ɺը૾౳ͷAssetΛGoogle Cloud Storageʹอଘ͍ͯͨ͠ • μογϡϘʔυ͔ΒCORS (ΦϦδϯؒϦιʔεڞ༗)ͷઃఆ͕ग़དྷͳ͔ͬͨ • -> Flutter WebͷCanvaskitΛར༻ͨ࣌͠ʹCORSΤϥʔͱͳΓ ը૾͕දࣔͰ͖ͳ ͘ͳΔ • CanvaskitͰ͸ɺJSͷFetch API͔ΒFetch͔ͯ͠Βදࣔ͢ΔͨΊ • HTML RendererͰ͸ɺHTMLͷimgཁૉͱͯ͠ද͍ࣔͯͨͨ͠Ί CORSΛճආͰ͖ͨ • -> Flutter WebͷHTML RendererΛར༻͢Δඞཁ͕͋Δ • ౰࣌ɺRendererʹHTML͔CanvaskitΛબ΂ͨ 16 ※ 2023೥౰࣌ͷ࿩ͳͷͰ ࠓ͸վળ͞Ε͍ͯΔ͔΋͠Ε·ͤΜ • ϒϥ΢β͸جຊతʹɺOriginϔομʔΛ෇༩͢Δ͕ ͍͔ͭ͘ྫ֎͕͋Δ • > There are some exceptions to the above rules; for example if a cross-origin GET or HEAD request is made in no-cors mode the Origin header will not be added. • Imgλά͕ΫϩεΦϦδϯͰϦΫΤετΛૹΔ৔߹͸͜ͷྫ֎ʹ౰ͯ͸·Δ • (ͨͩ͠ɺimg tagͷcrossoriginଐੑΛࢦఆͨ͠৔߹͸ผ) • ैͬͯ img tag͔ΒͷϦΫΤετ͸OriginϔομʔΛ࣋ͨͳ͍ͨΊɺAccess-Control-Allow- OriginΛຬ͍ͨͯ͠ͳ͍৔߹Ͱ΋CORSҧ൓ʹ͸ͳΒͳ͍ • ΑͬͯɺFlutter Web(HTML Renderer)Ͱ͸CORSΤϥʔʹͳΒͳ͔͕ͬͨ CanvaskitͰ͸CORSΤ ϥʔʹͳͬͨ • ͪͳΈʹɺFlutter 3.29͔Β Image.network widgetͷҾ਺ʹ WebHtmlElementStrategy͕௥Ճ͞ ΕͨͨΊɺ(CanvaskitΛ࢖͍ͬͯͯ΋)imgཁૉͱͯ͠ͷදࣔΛprefer/fallback(Fetchࣦഊͨ͠Βimgද ࣔ)Ͱ͖ΔΑ͏ʹͳͬͨ • ͨͩ͠ɺ͍͔ͭ͘ෆ۩߹͕͋Γͦ͏ (BoxFit #163288, ઃఆ஋͕Ωϟογϡ͞ΕΔ #164405) • [Web] Allow specifying the strategy on when to use <img> element to display images #159917 NOTE ※ ޙ΄ͲࢿྉΛΞοϓϩʔυ͠·͢
  13. FlutterKaigi 2023 (ͷཪଆ #1) FlutterKaigi ӡӦͷมભ • ίϯςϯπ؅ཧͷ͓࿩ • NEWT

    CMSʹ͸͍͔ͭ͘՝୊͕͋ͬͨ 1.ը૾౳ͷCORSΤϥʔ • NEWT CMSͰ͸ɺը૾౳ͷAssetΛGoogle Cloud Storageʹอଘ͍ͯͨ͠ • μογϡϘʔυ͔ΒCORS (ΦϦδϯؒϦιʔεڞ༗)ͷઃఆ͕ग़དྷͳ͔ͬͨ • -> Flutter WebͷCanvaskitΛར༻ͨ࣌͠ʹCORSΤϥʔͱͳΓ ը૾͕දࣔͰ͖ͳ ͘ͳΔ • CanvaskitͰ͸ɺJSͷFetch API͔ΒFetch͔ͯ͠Βදࣔ͢ΔͨΊ • HTML RendererͰ͸ɺHTMLͷimgཁૉͱͯ͠ද͍ࣔͯͨͨ͠Ί CORSΛճආͰ͖ͨ • -> Flutter WebͷHTML RendererΛར༻͢Δඞཁ͕͋Δ • ౰࣌ɺRendererʹHTML͔CanvaskitΛબ΂ͨ 17 ※ 2023೥౰࣌ͷ࿩ͳͷͰ ࠓ͸վળ͞Ε͍ͯΔ͔΋͠Ε·ͤΜ ※ ޙ΄ͲࢿྉΛΞοϓϩʔυ͠·͢ ͪͳΈʹɺcanvaskitʹ͢ΔͱSafariͰΫϥογϡ͠ ͯ͠·͏… ͳΜ͍ͯ͏࿩΋͋Γ·ͨ͠… ౰࣌ͷ࿩ͳͷͰɺࠓ͸վળ͞Ε͍ͯΔ͔΋͠Ε·ͤΜɻ NOTE
  14. FlutterKaigi 2023 (ͷཪଆ #1) FlutterKaigi ӡӦͷมભ ίϯςϯπ؅ཧͷ͓࿩ NEWT CMSʹ͸͍͔ͭ͘՝୊͕͋ͬͨ 2.

    σʔλ౤ೖΛμογϡϘʔυ͔Β͔͠ߦ͑ͳ͍େม͞ • σʔλΛ౤ೖ/ฤू͢ΔࡍʹNEWT CMS͕ఏڙ͢ΔμογϡϘʔυ͔Β͔͠ૢ࡞Ͱ͖ͳ͍ • ελοϑ৘ใ΍εϙϯαʔ৘ใ͸Կճ͔৘ใߋ৽ͷλΠϛϯά͕͋Δ • ͢΂ͯͷૢ࡞ΛμογϡϘʔυ͔ΒखಈͰ΍Βͳ͍ͱ͍͚ͳ͍ͨΊ େม໘౗ͩͬͨ • NEWT CMS API͸͋Δ͕ɺGET͔͠Ͱ͖ͳ͍ 18 ※ 2023೥౰࣌ͷ࿩ͳͷͰ ࠓ͸վળ͞Ε͍ͯΔ͔΋͠Ε·ͤΜ
  15. FlutterKaigi 2023 (ͷཪଆ #2) FlutterKaigi ӡӦͷมભ νέοτγεςϜͷ͓࿩ • PassMarketͱ͍͏αʔϏεΛར༻͍ͯͨ͠ •

    Yahoo! JAPANͷαʔϏεͷҰͭ • νέοτͷߪೖΛSaaSʹ೚ͤΒΕΔͷͰศ ར ͔͠͠ɺνέοτಡΈऔΓΞϓϦέʔγϣϯͷ ׬੒౓͕͋·Γߴ͘ͳ͘ɺೖ৔଴ͪߦྻ͕௕͘ ͳͬͯ͠·ͬͨ • ಛʹɺQRίʔυಡΈऔΓͷ଎౓, APIϨεϙ ϯε͕஗͍ 19 ※ 2023೥౰࣌ͷ࿩ͳͷͰ ࠓ͸վળ͞Ε͍ͯΔ͔΋͠Ε·ͤΜ
  16. FlutterKaigi 2023 ·ͱΊ FlutterKaigi ӡӦͷมભ • FlutterKaigi 2023: ॳͷΦϑϥΠϯ։࠵ •

    σʔλ؅ཧʹNEWT CMSΛར༻͍͕ͯͨ͠՝୊͕ଟ͔ͬͨ • CORSΤϥʔͷ໰୊, σʔλ౤ೖΛػցతʹߦ͑ͳ͍ • ΧϯϑΝϨϯεΞϓϦͱΧϯϑΝϨϯε΢ΣϒαΠτͷ྆ํͰɺNEWT CMS͔Βऔಘ͢Δ෦෼ ΍ܕఆٛΛॏෳ࣮ͯ͠૷͍ͯ͠Δ • ׬શʹผͷFlutterϓϩδΣΫτͱͯ͠։ൃ͍ͯͨ͠ • νέοτಡΈऔΓΞϓϦέʔγϣϯͷಈ࡞͕஗͔ͬͨ -> ͜ΕΒͷ໰୊ΛFlutterKaigi 2024Ͱ͸ղܾ͢Δ͜ͱʹͨ͠ 20 ※ 2023೥౰࣌ͷ࿩ͳͷͰ ࠓ͸վળ͞Ε͍ͯΔ͔΋͠Ε·ͤΜ
  17. FlutterKaigi 2024ͷ։ൃ֓ཁ FlutterKaigi 2024 • ͍͔ͭ͘ͷΞϓϦέʔγϣϯΛ੍࡞ • νέοτߪೖαΠτ • ެࣜΞϓϦέʔγϣϯ

    • νέοτಡΈऔΓΞϓϦέʔγϣϯ • ެࣜWebαΠτ • σʔλϕʔε, ֤छAPIͷ։ൃ • supabaseΛDBͱͯ͠ར༻ • Cloudflare WorkersΛར༻͠ APIଆͷಈతͳॲཧΛՄೳʹ • StripeͰͷܾࡁΛ࣮૷ • ެࣜWebαΠτͷಈతOGPΛ࣮ݱ͢ΔAPI 22
  18. • 2024/6͝ΖͷఆྫͰνέοτγεςϜ಺੡ΛఏҊ • ࡶஊνϟϯωϧͰ಺੡ͯ͠Έ͍ͨ࿩Λग़ͨ͠ͱ͜Ζɺଟ͘ͷํ͔Β൓Ԡ͕! • FlutterKaigi 2023ͰͷͭΒΈΛղফ͢Δͧ! • 2024/7/5~6: PoCͷ։ൃ

    • ಺੡ҊΛग़͕࣮ͨ͠ݱՄೳੑ͕͋Δͷ͔෼͔Βͳ͍ • ௐ΂ͯ΋લྫ͸͋·Γͳ͔ͬͨ • ͦ͜ͰɺPoCΛ։ൃ͢Δ͜ͱʹ • Google Sign-in -> Stripe΁ભҠ -> ߪೖ -> QRίʔυදࣔ • ೖ৔ཤྺΛొ࿥ 25 ։ൃ FlutterKaigi 2024 νέοτγεςϜ
  19. νέοτγεςϜ։ൃ·Ͱ FlutterKaigi 2024 • 2024/6͝ΖͷఆྫͰνέοτγεςϜ಺੡ΛఏҊ • ࡶஊνϟϯωϧͰ಺੡ͯ͠Έ͍ͨ࿩Λग़ͨ͠ͱ͜Ζɺଟ͘ͷํ͔Β൓Ԡ͕! • FlutterKaigi 2023ͰͷͭΒΈΛղফ͢Δͧ!

    • 2024/7/5~6: PoCͷ։ൃ • ಺੡ҊΛग़͕࣮ͨ͠ݱՄೳੑ͕͋Δͷ͔෼͔Βͳ͍ • ௐ΂ͯ΋લྫ͸͋·Γͳ͔ͬͨ • ͦ͜ͰɺPoCΛ։ൃ͢Δ͜ͱʹ 26 ɾGitHubͰϩάΠϯ -> Stripe΁ભҠ͠ߪೖ -> ϓϩϑΟʔϧΛฤू supabaseʹσʔλ͕֨ೲ͞ΕΔ
  20. νέοτγεςϜ։ൃ·Ͱ FlutterKaigi 2024 • 2024/6͝ΖͷఆྫͰνέοτγεςϜ಺੡ΛఏҊ • ࡶஊνϟϯωϧͰ಺੡ͯ͠Έ͍ͨ࿩Λग़ͨ͠ͱ͜Ζɺଟ͘ͷํ͔Β൓Ԡ͕! • FlutterKaigi 2023ͰͷͭΒΈΛղফ͢Δͧ!

    • 2024/7/5~6: PoCͷ։ൃ • ಺੡ҊΛग़͕࣮ͨ͠ݱՄೳੑ͕͋Δͷ͔෼͔Βͳ͍ • ௐ΂ͯ΋લྫ͸͋·Γͳ͔ͬͨ • ͦ͜ͰɺPoCΛ։ൃ͢Δ͜ͱʹ 27 • ߪೖࡁΈϢʔβͷQRίʔυΛര଎ͰಡΈऔΓ • QRίʔυΛಡΈऔΓ & Supabase΁ͷϢʔβऔಘ ΫΤϦΛ࣮ߦ
  21. ։ൃ FlutterKaigi 2024 νέοτγεςϜ 28 • 2024/6͝ΖͷఆྫͰνέοτγεςϜ಺੡ΛఏҊ • ࡶஊνϟϯωϧͰ಺੡ͯ͠Έ͍ͨ࿩Λग़ͨ͠ͱ͜Ζɺଟ͘ͷํ͔Β൓Ԡ͕! •

    FlutterKaigi 2023ͰͷͭΒΈΛղফ͢Δͧ! • 2024/7/5~6: PoCͷ։ൃ • ಺੡ҊΛग़͕࣮ͨ͠ݱՄೳੑ͕͋Δͷ͔෼͔Βͳ͍ • ௐ΂ͯ΋લྫ͸͋·Γͳ͔ͬͨ • ͦ͜ͰɺPoCΛ։ൃ͢Δ͜ͱʹ • Google Sign-in -> Stripe΁ભҠ -> ߪೖ -> QRίʔυදࣔ • ೖ৔ཤྺΛొ࿥ • 2024/9: ຊ൪ʹ޲͚ͨ։ൃ • 2024/10/7: νέοταΠτެ։ & νέοτߪೖ։࢝
  22. FlutterKaigi 2024ͷ։ൃ۷ΓԼ͛ FlutterKaigi 2024 • ಛʹ3఺͓࿩͍͖ͯ͠·͢ • #1 σʔλϕʔεͷઃܭ •

    #2 Stripeͱσʔλϕʔεͷඥ͚ͮ - Ticket API • #3 ΢ΥϨοτͷύεରԠ 29
  23. #1 σʔλϕʔεͷઃܭ FlutterKaigi 2024 νέοτγεςϜ 30 • SupabaseΛར༻ • supabaseͱ͸?

    • BaaS (Backend as a Service)ͷ1ͭ • ର߅: Firebase, Appwrite, AWS Amplify • PostgreSQLΛϕʔεʹ͢΂ͯOSSͷιϑτ΢ΣΞͰߏங͞Ε͍ͯΔ • Supabase CloudͰSaaSͱͱͯ͠΋ར༻Մೳ, ࣗલͷαʔόͰಈ͔͢͜ͱ΋Մೳ • RLS(Row Level Security)Λར༻ͯ͠ Ϣʔβ͕Ͳͷσʔλʹରͯ͠ॲཧΛߦ͑Δ ͔ఆٛͰ͖Δ • ͢΂ͯΦʔϓϯιʔεͳͷͰɺѻ͍΍ٕ͘͢ज़͕੒ख़͍ͯ͠Δ -> FlutterKaigi 2024Ͱ͸Supabase CloudΛར༻͢Δ͜ͱʹܾఆ
  24. #1 σʔλϕʔεͷઃܭ FlutterKaigi 2024 νέοτγεςϜ 32 • SupabaseΛར༻ • supabase

    AuthͰೝূ • ͦΕͧΕͷϢʔβʹroleΛ෇༩͠ RLSͰݖݶ؅ཧ • ͜ͷDBͰ͸ɺϢʔβͷσʔλ΍ߪೖ৘ ใΛѻ͏ͨΊ ηΩϡϦςΟʹ͸े෼഑ ྀ͢Δඞཁ͕͋Δ • RLS͸SQLͰPolicyΛ࡞੒͍ͯ͘͠ -> ϧʔϧ͕ਖ਼ৗʹಈ͍͍ͯΔͷ͔෼͔ Γʹ͍͘ -> Unit TestΛॻ͖͍ͨ!
  25. σʔλϕʔεͷUnit Test FlutterKaigi 2024 νέοτγεςϜ 34 • SupabaseެࣜHPͰ͸ɺpgTAPͱ͍͏֦ுΛ࢖ͬ ͨUnit TestΛ঺հ͍ͯ͠Δ

    BEGIN; SELECT plan (2); SELECT has_table ('public', 'profiles', 'profiles ςʔϒϧ ͕ଘࡏ͢Δ͜ͱ'); SELECT tests.rls_enabled ('public', 'profiles'); SELECT * FROM finish (); ROLLBACK; packages/common/data/supabase/tests/profiles/ profile_basic_test.sql pgTAPʹΑΔ୯ମςετ • ྫ͑͹ɺ͜ͷΑ͏ͳײ͡ • ςʔϒϧ͕ଘࡏ͢Δ͜ͱ • RLS(Row Level Security)͕༗ ޮͰ͋Δ͜ͱ౳ΛݕূͰ͖Δ pgTAPࣗମʹRLSͷத਎Λݕূ͢Δ࢓૊Έ ͸ͳ͍
  26. σʔλϕʔεͷUnit Test FlutterKaigi 2024 νέοτγεςϜ 35 • SupabaseެࣜHPͰ͸ɺpgTAPͱ͍͏֦ுΛ࢖ͬ ͨUnit TestΛ঺հ͍ͯ͠Δ

    pgTAPʹΑΔ୯ମςετ • ྫ͑͹ɺ͜ͷΑ͏ͳײ͡ • ςʔϒϧ͕ଘࡏ͢Δ͜ͱ • RLS(Row Level Security)͕༗ ޮͰ͋Δ͜ͱ౳ΛݕূͰ͖Δ pgTAPࣗମʹRLSͷத਎Λݕূ͢Δ࢓૊Έ ͸ͳ͍ -> usebasejump/supabase-test- helpersΛ࢖͏
  27. σʔλϕʔεͷUnit Test FlutterKaigi 2024 νέοτγεςϜ 36 • SupabaseެࣜHPͰ͸ɺpgTAPͱ͍͏֦ுΛ࢖ͬ ͨUnit TestΛ঺հ͍ͯ͠Δ

    -- ҰൠϢʔβ SELECT tests.create_supabase_user ('sample_user', '[email protected]', '555-555-5555'); -- ໊લͱϩʔϧΛมߋ͓ͯ͘͠ UPDATE profiles …; SELECT tests.authenticate_as ('sample_user'); SELECT plan (6); SELECT results_eq ('SELECT name::text FROM profiles', ARRAY['sample_user'], 'ࣗ෼ͷϓϩϑΟʔϧͷΈ͕ಡΈऔΕΔ͜ͱ'); -- roleΛมߋͰ͖ͳ͍͜ͱ PREPARE update_role_throw AS UPDATE profiles SET ROLE = 'admin' WHERE name = 'sample_user'; SELECT throws_ok ('update_role_throw', 'P0001', 'Updating "role" is not allowed', 'role ΛมߋͰ͖ͳ͍͜ͱ'); -- ໊લΛมߋͰ͖Δ͜ͱ UPDATE profiles SET name = 'updated_sample_user' WHERE name = 'sample_user'; SELECT results_eq ('SELECT name::text FROM profiles', ARRAY['updated_sample_user'], '໊લΛมߋͰ͖Δ͜ͱ'); packages/common/data/supabase/tests/profiles/ rls_test_as_user_role.sql αϯϓϧϢʔβͱͯ͠ೝূ Ϣʔβ͕ΞΫηεՄೳͳൣғΛݕূ αϯϓϧϢʔβΛ࡞੒
  28. #1 σʔλϕʔεͷઃܭ ·ͱΊ FlutterKaigi 2024 νέοτγεςϜ • FlutterKaigi 2024Ͱ͸SupabaseΛόοΫΤϯυͱͯ͠։ൃ •

    supabaseͷUnit Test • ެࣜͰRLS͕ਖ਼ৗʹ࣮૷͞Ε͍ͯΔ͔Ͳ͏͔Λݕূ͢Δ࢓૊Έ͸ͳ͍ • usebasejump/supabase-test-helpersΛ࢖͏͜ͱͰɺRLSͷ୯ମςετΛهड़͢Δ͜ ͱ͕Ͱ͖ͨ • ࣮૷όά౳ʹىҼ͢Δ૝ఆ֎ͷෆਖ਼ΞΫηεՄೳੑΛݮΒ͢͜ͱ͕Ͱ͖ͨ • ࣮ࡍɺUnit TestΛ࣮૷, ࣮ߦ͢Δ͜ͱͰψέϞϨʹؾͮ͘͜ͱ͕Ͱ͖ͨ 37
  29. #2 StripeͱSupabaseͷ࿈ܞ FlutterKaigi 2024 νέοτγεςϜ • StripeͷPayment LinksػೳΛ࢖͍ߪೖΛߦ͏ • ಛఆURLʹભҠͤ͞Δ͜ͱͰߪೖϖʔδΛදࣔͤ͞Β

    ΕΔ • ߪೖޙʹผͷϖʔδʹભҠͤ͞ΒΕΔ • ͜ͷ࣌ɺΫΤϦύϥϝʔλ͔Βܾࡁ࣌ͷηογϣϯ IDΛಈతʹ౉͢͜ͱ΋Մೳ 38
  30. • νέοτʹؔΘΔૢ࡞Ͱ͸ɺϢʔβ͕ࣗ༝ʹߦΘΕΔ΂͖Ͱ͸ͳ͍ૢ࡞͕͋Δ • ʮνέοτߪೖཤྺͷૢ࡞ʯ • Stripeͷνέοτߪೖ͕ਖ਼ৗʹߦΘΕ͍ͯΔ͜ͱΛݕূͨ͠ޙʹɺνέοτߪೖཤྺʹ௥Ճ ͞ΕΔ΂͖Ͱ͋Δ • ਖ਼ৗʹߦΘΕ͍ͯΔ(=χηͷηογϣϯIDΛ࢖͍ͬͯΔ, ࢖͍·Θ͍ͯ͠Δ౳Ͱ͸ͳ͍͜

    ͱ) • ͜ͷૢ࡞/ݕূΛΞϓϦέʔγϣϯϨΠϠʔͰߦ͏ͱɺѱҙͷ͋ΔϢʔβʹΑͬͯݕূॲཧΛ εΩοϓ͞ΕΔՄೳੑ͕͋Δ • Supabase΁ͷINSERTૢ࡞Λߦ͑͹ྑ͍͚ͩͰ͋Δ • ैͬͯɺαʔόଆͰݕূॲཧ&σʔλϕʔεૢ࡞Λߦ͏΂͖ -> ͜ΕΛ࣮ݱ͢ΔͨΊʹར༻ͨ͠ͷ͕Cloudflare Workers FlutterKaigi 2024 νέοτγεςϜ 41 #2 StripeͱSupabaseͷ࿈ܞ - Ticket API
  31. • νέοτʹؔΘΔૢ࡞Ͱ͸ɺϢʔβ͕ࣗ༝ʹߦΘΕΔ΂͖Ͱ͸ͳ͍ૢ࡞͕͋Δ • ʮνέοτߪೖཤྺͷૢ࡞ʯ • Stripeͷνέοτߪೖ͕ਖ਼ৗʹߦΘΕ͍ͯΔ͜ͱΛݕূͨ͠ޙʹɺνέοτߪೖཤྺʹ௥ Ճ͞ΕΔ΂͖Ͱ͋Δ • ͜ͷૢ࡞/ݕূΛΞϓϦέʔγϣϯϨΠϠʔͰߦ͏ͱɺѱҙͷ͋ΔϢʔβʹΑͬͯݕূॲཧ ΛεΩοϓ͞ΕΔՄೳੑ͕͋Δ

    • Supabase΁ͷINSERTૢ࡞Λߦ͑͹ྑ͍͚ͩͰ͋Δ • ैͬͯɺαʔόଆͰݕূॲཧ&σʔλϕʔεૢ࡞Λߦ͏΂͖ -> ͜ΕΛ࣮ݱ͢ΔͨΊʹར༻ͨ͠ͷ͕Cloudflare Workers FlutterKaigi 2024 νέοτγεςϜ 42 #2 StripeͱSupabaseͷ࿈ܞ - Ticket API ※ ؀ڥอޢͷͨΊʹɺաڈͷLTͷεϥΠυΛ࠶ར༻͍ͯ͠·͢ Dart WebAssemblyΛ࢖ͬͨWeb API on Cloudflare Workers @Flutter Tokyo #6
  32. ※ ؀ڥอޢͷͨΊʹɺաڈͷLTͷεϥΠυΛ࠶ར༻͍ͯ͠·͢ FlutterKaigi 2024 νέοτγεςϜ #2 StripeͱSupabaseͷ࿈ܞ - Ticket API

    • Cloudflare WorkersΛར༻ͯ͠ɺAPIΛ࣮૷͖ͯ͠·͢ • ۩ମతʹ͸TypeScriptͰAPIͷ࣮૷Λॻ͍͍͖ͯ·͢ • Honoͱ͍͏ϥΠϒϥϦΛར༻͠·ͨ͠ • DartͰ͍͏ shelf, dart_frogΛߴ଎+ڧྗʹͨ͠Πϝʔδ 43
  33. ※ ؀ڥอޢͷͨΊʹɺաڈͷLTͷεϥΠυΛ࠶ར༻͍ͯ͠·͢ FlutterKaigi 2024 νέοτγεςϜ #2 StripeͱSupabaseͷ࿈ܞ - Ticket API

    • Cloudflare WorkersΛར༻ͯ͠ɺAPIΛ࣮૷͖ͯ͠·͢ • ۩ମతʹ͸TypeScriptͰAPIͷ࣮૷Λॻ͍͍͖ͯ·͢ 44 apis/ticket-api/src/routes/v1/v1.ts ҎԼͷ߲໨ΛνΣοΫ͍ͯ͠·͢ 1. APIʹૹ͖ͬͯͨϢʔβ͕ଘࡏ͢Δ͔֬ೝ 2. νέοτΛະॴ༗Ͱ͋Δ͜ͱΛ֬ೝ 3. ηογϣϯIDʹ֘౰͢Δܾࡁ͕͋Δ͔֬ೝ 4. εϙϯαʔট଴༻ͷΫʔϙϯίʔυΛҰൠνέοτ Ͱར༻͍ͯ͠ͳ͍͜ͱ 5. ηογϣϯID͕ॏෳ͍ͯ͠ͳ͍͜ͱ ← 1 ← 2 ← 3 ← 4 ← 5
  34. • ͜ͷTicket APIΛ௨ͯ͡ɺฦۚΛ࣮ݱ • ֶੜ(தߴੜ, େֶ, େֶӃੜ.etc)ͷํ͕νέοτΛߪೖ͍͖ͯͨͩ͠ɺདྷ৔ͨ࣌͠ʹ͸ ֶੜূͷ֬ೝΛܦͯฦۚ • StaffݖݶΛ࣋ͭϢʔβ͕

    ಛఆͷΤϯυϙΠϯτʹฦۚର৅ͷUser IDΛૹ৴͢Δ͚ͩ • ฦ࣮ۚߦޙʹɺTicket API͔Β Slack Webhookʹ৘ใΛྲྀ͢͜ͱͰɺ(ສ͕Ұ)ෆਖ਼ͳ ฦ͕ۚߦΘΕ͍ͯͳ͍͔֬ೝ FlutterKaigi 2024 νέοτγεςϜ 45 #2 StripeͱSupabaseͷ࿈ܞ - Ticket API
  35. • νέοτʹؔΘΔૢ࡞Ͱ͸ɺϢʔβ͕ࣗ༝ʹߦΘΕΔ΂͖Ͱ͸ͳ͍ૢ࡞͕͋Δ • ʮνέοτߪೖཤྺͷૢ࡞ʯ • Stripeͷνέοτߪೖ͕ਖ਼ৗʹߦΘΕ͍ͯΔ͜ͱΛݕূͨ͠ޙʹɺνέοτߪೖཤྺʹ௥ Ճ͞ΕΔ΂͖Ͱ͋Δ • ͜ͷૢ࡞/ݕূΛΞϓϦέʔγϣϯϨΠϠʔͰߦ͏ͱɺѱҙͷ͋ΔϢʔβʹΑͬͯݕূॲཧ ΛεΩοϓ͞ΕΔՄೳੑ͕͋Δ

    • Supabase΁ͷINSERTૢ࡞Λߦ͑͹ྑ͍͚ͩͰ͋Δ • ैͬͯɺαʔόଆͰݕূॲཧ&σʔλϕʔεૢ࡞Λߦ͏΂͖ -> ͜ΕΛ࣮ݱ͢ΔͨΊʹར༻ͨ͠ͷ͕Cloudflare Workers #2 StripeͱSupabaseͷ࿈ܞ - Ticket API FlutterKaigi 2024 νέοτγεςϜ 47 Apple WalletͷύεΛ࡞Δ͓࿩ - MoneyForward x YUMEMI ࣗশएखษڧձ ※ ؀ڥอޢͷͨΊʹɺաڈͷLTͷεϥΠυΛ࠶ར༻͍ͯ͠·͢
  36. • νέοτʹؔΘΔૢ࡞Ͱ͸ɺϢʔβ͕ࣗ༝ʹߦΘΕΔ΂͖Ͱ͸ͳ͍ૢ࡞͕͋Δ • ʮνέοτߪೖཤྺͷૢ࡞ʯ • Stripeͷνέοτߪೖ͕ਖ਼ৗʹߦΘΕ͍ͯΔ͜ͱΛݕূͨ͠ޙʹɺνέοτߪೖཤྺʹ௥ Ճ͞ΕΔ΂͖Ͱ͋Δ • ͜ͷૢ࡞/ݕূΛΞϓϦέʔγϣϯϨΠϠʔͰߦ͏ͱɺѱҙͷ͋ΔϢʔβʹΑͬͯݕূॲཧ ΛεΩοϓ͞ΕΔՄೳੑ͕͋Δ

    • Supabase΁ͷINSERTૢ࡞Λߦ͑͹ྑ͍͚ͩͰ͋Δ • ैͬͯɺαʔόଆͰݕূॲཧ&σʔλϕʔεૢ࡞Λߦ͏΂͖ -> ͜ΕΛ࣮ݱ͢ΔͨΊʹར༻ͨ͠ͷ͕Cloudflare Workers #2 StripeͱSupabaseͷ࿈ܞ - Ticket API FlutterKaigi 2024 νέοτγεςϜ 48 Apple WalletͷύεΛ࡞Δ͓࿩ - MoneyForward x YUMEMI ࣗশएखษڧձ ※ ؀ڥอޢͷͨΊʹɺաڈͷLTͷεϥΠυΛ࠶ར༻͍ͯ͠·͢ JSONϑΝΠϧΛ༻ҙͯ͠ɺ
  37. • νέοτʹؔΘΔૢ࡞Ͱ͸ɺϢʔβ͕ࣗ༝ʹߦΘΕΔ΂͖Ͱ͸ͳ͍ૢ࡞͕͋Δ • ʮνέοτߪೖཤྺͷૢ࡞ʯ • Stripeͷνέοτߪೖ͕ਖ਼ৗʹߦΘΕ͍ͯΔ͜ͱΛݕূͨ͠ޙʹɺνέοτߪೖཤྺʹ௥ Ճ͞ΕΔ΂͖Ͱ͋Δ • ͜ͷૢ࡞/ݕূΛΞϓϦέʔγϣϯϨΠϠʔͰߦ͏ͱɺѱҙͷ͋ΔϢʔβʹΑͬͯݕূॲཧ ΛεΩοϓ͞ΕΔՄೳੑ͕͋Δ

    • Supabase΁ͷINSERTૢ࡞Λߦ͑͹ྑ͍͚ͩͰ͋Δ • ैͬͯɺαʔόଆͰݕূॲཧ&σʔλϕʔεૢ࡞Λߦ͏΂͖ -> ͜ΕΛ࣮ݱ͢ΔͨΊʹར༻ͨ͠ͷ͕Cloudflare Workers #2 StripeͱSupabaseͷ࿈ܞ - Ticket API FlutterKaigi 2024 νέοτγεςϜ 49 Apple WalletͷύεΛ࡞Δ͓࿩ - MoneyForward x YUMEMI ࣗশएखษڧձ ※ ؀ڥอޢͷͨΊʹɺաڈͷLTͷεϥΠυΛ࠶ར༻͍ͯ͠·͢ JSONϑΝΠϧΛ༻ҙͯ͠ॺ໊ͯ͋͛͠Δ
  38. • Apple Wallet, Googleͷ΢ΥϨοτʹରԠ • Ticket APIͰಈతͳॲཧΛߦ͑ΔΑ͏ʹ ͳͬͨ͜ͱͰɺͦΕͧΕͷϢʔβʹԠͨ͡ύε σʔλΛ࡞੒Ͱ͖ΔΑ͏ʹͳͬͨ •

    ۩ମతͳϝτϦΫε͸औ͍ͬͯͳ͍͕ɺମײ6 ׂఔ౓ͷϢʔβ͕ར༻ͯ͘͠Εͨ FlutterKaigi 2024 νέοτγεςϜ 50 #2 StripeͱSupabaseͷ࿈ܞ - Ticket API https://speakerdeck.com/yumnumm/apple-walletdepasuwozuo-ruohua ৄ͍࣮͠ݱํ๏͸ɺҎલLTձͰ͓࿩͍ͯ͠ΔͷͰݟͯΈ͍ͯͩ͘͞
  39. #3 ΢ΥϨοτͷύεରԠ FlutterKaigi 2024 νέοτγεςϜ • Apple Wallet, Googleͷ΢ΥϨοτʹରԠ •

    Ticket APIͰಈతͳॲཧΛߦ͑ΔΑ͏ʹ ͳͬͨ͜ͱͰɺͦΕͧΕͷϢʔβʹԠͨ͡ύε σʔλΛ࡞੒Ͱ͖ΔΑ͏ʹͳͬͨ • ۩ମతͳϝτϦΫε͸औ͍ͬͯͳ͍͕ɺମײ6 ׂఔ౓ͷϢʔβ͕ར༻ͯ͘͠Εͨ 51
  40. • #1ͷσʔλϕʔεͱ#2ͷStripe+Ticket API͕࿈ܞ͢Δ͜ͱͰνέοτͷߪೖΛ࣮ݱ • αΠτެ։͔ΒΠϕϯτ౰೔·ͰɺαʔϏεఀࢭʹ௥͍ࠐ·ΕΔΑ͏ͳେ͖ͳόά΍ো֐͸ ͳ͘ಈ࡞🎉 • ελοϑ޲͚ͷνέοτಡΈऔΓΞϓϦέʔγϣϯ΋ߴ଎ʹಈ࡞ • ೖ৔଴ػߦྻ͸ଟ͍࣌Ͱ਺໊ఔ౓ʹऩ·ͬͨ

    • Ticket APIͰಈతͳॲཧΛߦ͑Δ͜ͱʹΑΓɺߴ౓ͳॲཧΛ࣮ݱ • νέοτಡΈऔΓΞϓϦέʔγϣϯ͔ΒɺಛఆϢʔβͷ෷͍໭͠ • ΢ΥϨοτ΁ͷύε௥Ճ FlutterKaigi 2024 νέοτγεςϜ 52 νέοτγεςϜ·ͱΊ
  41. • FlutterKaigi 2025 ಈ͖ग़͍ͯ͠·͢💪 • νέοτγεςϜ: TypeScript੡ -> Dart੡ •

    2024ͷ΋ͷΛϕʔεʹ҆ఆੑ޲্ • Ticket APIΛTypeScriptͰ͸ͳ͘Dartʹஔ׵! • νέοτಡΈऔΓΞϓϦέʔγϣϯ -> μογϡϘʔυΞϓϦέʔγϣϯ • μογϡϘʔυΞϓϦέʔγϣϯͱͯ͠৽ن࡞੒ • σεΫτοϓ, ϞόΠϧ, Web޲͚ʹ࡞੒ • ελοϑ͚ͩͰ͸ͳ͘ɺεϙϯαʔ༷, ొஃऀ༷ͷ৘ใೖྗʹ΋ར༻Ͱ͖ΔΑ͏ʹ • νέοτߪೖαΠτ: WebͷΈ -> Web + ެࣜΞϓϦʹ౷߹ • 2024: νέοτߪೖWebαΠτ(Flutter Web)͔ΒͷΈߪೖՄೳ • 2025: ެࣜΞϓϦ͔Β΋ߪೖͰ͖ΔΑ͏ʹ FlutterKaigi 2025 ͷల๬ 54 ࠓ೥ͷ໺๬ ※ ͜͜ʹॻ͍͍ͯΔ৘ใ͸͢΂ͯԾͰ͢ɻࠓޙมߋ͢ΔՄೳੑ͋Γ
  42. • FlutterKaigi 2025 ಈ͖ग़͍ͯ͠·͢💪 • Πϯϑϥͷఆٛ: TerraformΛ༻͍ͨIaC(Infrastructure as Code) •

    ͜Ε·ͰɺFirebase, Supabase, Cloudflare౳ͷαʔϏεͷઃఆΛͦΕͧΕͷμογϡϘʔ υ͔Β΍͍ͬͯͨ • ͔͠͠ɺ୭͕͍ͭͲͷΑ͏ͳཧ༝ͰมߋΛՃ͑ͨͷ͔࢒Βͳ͍ • -> TerraformΛ༻͍ͯΠϯϑϥΛ؅ཧͤ͞Δ͜ͱͰղܾͤ͞Δ • ೖ৔؅ཧʹ͍ͭͯ • 2024: ट͔ΒωʔϜϓϨʔτΛ͔͚ͯ΋Β͍࠶ೖ৔࣌ʹ͸ਓखͰ֬ೝ • 2025: ࣗಈվࡳػΛ੍࡞͢Δ͔΋ • ػցʹQRίʔυΛಡΈऔΒͤɺೖ৔Մೳ͔Ͳ͏͔Λ൑அͤ͞Δ(Πϝʔδ͸ίϩφՒʹྲྀߦͬͨ ඇ઀৮ͷମԹܭ) -> ࠓ೥΋͢΂ͯͷίʔυΛΦʔϓϯʹͯ͠։ൃ͍͖ͯ͠·͢! FlutterKaigi 2025 ͷల๬ 55 ࠓ೥ͷ໺๬ ※ ͜͜ʹॻ͍͍ͯΔ৘ใ͸͢΂ͯԾͰ͢ɻࠓޙมߋ͢ΔՄೳੑ͋Γ
  43. • FlutterKaigi͸ਐԽ͠ଓ͚͍ͯ·͢! • ΑΓշదͳΧϯϑΝϨϯεମݧΛ࣮ݱ͢ΔͨΊʹ ελοϑҰؙͱͳͬͯ४උΛਐΊ͍ͯ·͢ • ͦͷதͰ΋ɺ։ൃνʔϜͰ͸ٕज़తͳखஈΛ௨ͯ͡ ମݧΛ޲্ͤ͞ΔͨΊͷ׆ಈΛߦ͍ͬͯ ·͢ •

    FlutterKaigi 2024ʹ͍ͭͯ • ڈ೥ͷFlutterKaigiͰ͸νέοτγεςϜΛ಺੡͠·ͨ͠ • ͜ΕʹΑΓɺૉૣ͘ೖ৔Ͱ͖ΔΑ͏ʹͳΓ·ͨ͠ • supabaseͷRLSʹ͍ͭͯͷUnit TestΛॻ͘ͱ҆৺ • FlutterKaigi 2025΁ͷల๬ • ࠓ೥΋৭ʑͳTRYΛ͢Δ༧ఆͰ͢ • ίʔυ͸Φʔϓϯʹ͢ΔͷͰɺͥͻ೷͖ʹ or/and ίϯτϦϏϡʔτ͓଴͓ͪͯ͠Γ·͢! FlutterKaigi 2023~2025 56 ·ͱΊ
  44. ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠! 57 • ࢀߟࢿྉ • FlutterKaigi 2024 ׆ಈใࠂ: https://medium.com/flutterkaigi/ flutterkaigi-2024-%E6%B4%BB%E5%8B%95%E5%A0%B1%E5%91%8A-d44c4ece2d1d

    • FlutterKaigi 2025 εϙϯαʔڠࢍͷ͝Ҋ಺: https://docs.google.com/ presentation/d/1SnwWgKThaJ9QnTUknmDtFq3eXB-Ra5r9O_a5adTHhjY • FlutterKaigi 2025ؔ࿈ίʔυͷϦϙδτϦ: https://github.com/FlutterKaigi/2025 • FlutterKaigi 2024ؔ࿈ίʔυͷϦϙδτϦhttps://github.com/FlutterKaigi/2024 • ϥϜμٕज़෦