Share
Embed
Firebase Extensionsを自作して迅速にアプリケーションを開発する
2023.07.07に開催された PORT Firebase Meetup にて登壇
https://connpass.com/event/285741/
ツルオカ - Hideki Tsuruoka
July 07, 2023
Transcript
32 slides
-
2 πϧΦΧ • גࣜձࣾNTTυίϞͷ৽نࣄۀ෦ʹॴଐ • Flutter / Dart / Firebaseத৺ͷιϑτΣΞΤϯδχΞ
• ΤϯδχΞϦϯά×σβΠϯͷڥքྖҬʹؔ৺ • Perfume͕͖ Self-Introduction @h_tsuruo -
5 01 Firebase Extensionsͷհͱಈ ֦ுΛࣗ࡞͢ΔϝϦοτͱࣄྫ Build & Publish your extensions
Agenda 02 03 ·ͱΊ 04 -
7 ։ൃऀ͕ίʔυΛॻ͘͜ͱͳ͘ɺ ҰൠతͳλεΫػೳΛ؆୯ʹ࣮ݱ͢ΔϓϦύοέʔδιϦϡʔγϣϯ Firebase Extensionsͱ • ൃද͞Εͨͷ2018ʢβ൛ެ։ʣ • BlazeϓϥϯͷFirebaseϓϩδΣΫτͰར༻Մೳ •
Extensions Hub Ͱ୳ͯ͠ϫϯΫϦοΫͰಋೖͰ͖Δ • Firebase Functions Ͱ࣮͞Ε͍ͯΔ -
8 Resize Images(Made by Firebase): Cloud StorageʹΞοϓϩʔυ͞Ε ͨϑΝΠϧΛࢦఆͨ͠αΠζʹϦαΠζ͢Δ֦ு Firebase Extensionsͷྫ
• εϚʔτϑΥϯαΠζͰͷදࣔ࠷దԽɺαϜωΠϧը૾ͷੜͳͲʹར༻Ͱ͖Δ • ֦ுΛΠϯετʔϧ͢ΔͱɺΞοϓϩʔυΛτϦΨʔʹCloud Functions্ཱ͕͕ͪΓॲཧ • ϦαΠζ͞Εͨը૾͕ಉ͡όέοτʹ֨ೲ͞ΕΔ࡞Γ Original Image Resized Images Ωϟϓνϟࢀর: [Firebase Resize ImagesΛͬͯΈͨ - Qiita](https://qiita.com/butterv/items/2194a776f55023ccd485) -
9 Google I/O 2022ͰϚʔέςΟϯάɺݕࡧɺܾࡁܥͷ֦ு͕ެ։͞ΕڧԽ Firebase Extensionsͱ - Google I/O 2022
• ܾࡁɿStripeʹՃ͑ɺRevenueCat͕Ճ͞Εબࢶ͕͕Δ • ݕࡧɿAlgoliaɺElasticʹՃ͑Typesense͕Ճ͞ΕɺFirebase Summit 2022ͰMeilisearchՃ MeilisearchΛͬͨશจݕࡧʹ͍ͭͯهࣄΛެ։͍ͯ͠·͢ -
10 Google I/O 2023ͰGenerative AIීٴͷӨڹड͚ɺ ͷPaLMΛͬͨAPIͳͲAIΧςΰϦͷ֦ுॆ࣮ Firebase Extensionsͱ - Google
I/O 2023 • GoogleΛ͡Ίɺ3rdύʔςΟձࣾίϛϡχςΟͳͲ͕։ൃ͠৽͘͠20ͷ֦ு͕Ճ • ͦͯ͠ɺݸਓͰͷ։ൃɾެ։͜ͷλΠϛϯάͰՄೳʹʢޙड़ʣ -
12 ֎͔ΒݟͨFirebase Extensionsͷઓུ FirebaseϓϩμΫτͰΧόʔ͖͠Εͳ͍ྖҬΛɺ σϕϩούίϛϡχςΟͷྗΛआΓͳ͕ΒΤίγεςϜΛେ͖͘͢Δ • SupabaseΛ͡Ίͱ͢ΔmBaaSͷ಄ʹΑΓɺਖ਼एׯͷΓͳ͞Λײ࢝͡Ί͍ͯͨ • SupabaseͷTypeScriptؔDenoϏϧτΠϯͳҰํɺFirebaseNode.jsͳͲ •
ྑ͘ѱ͘Google Cloudେ͖ͳϓϥοτϑΥʔϜͰྺ࢙͕͋Γɺେ͖ͳվม͕Ͱ͖ͳ͍ͷͰ • ύʔτφʔίϛϡχςΟͷྗΛआΓͯɺαʔϏεΛ֦ுͯ͠ΤίγεςϜΛେ͖͘͢Δํʁ ͜ͷπΠʔτͷޙɺ࣮ࡍʹݸਓ͕Ͱ͖ΔΑ͏ʹͳΓ·ͨ͠ -
13 ୈ2ੈͷCloud RunԽʹ͏࣮ߦ࣌ؒͷԆɺ Eventarc ରԠͳͲτϦΨʔൣғ͕֦ॆ͞Ε͞ΒʹύϫʔΞοϓ ୈ2ੈ Cloud Functions ͷԸܙ •
Cloud Functions ͷਐԽ Firebase Extensions ͷਐԽʹ݁͢Δ • HTTPɾCallableؔΛච಄ʹFirebaseɾGoogle CloudαʔϏεͷτϦΨʔର [Cloud Functionsʢ2nd genʣͱ Cloud Run ͷؔੑΛΔ](https://zenn.dev/cloud_ace/articles/b30971199b392c) -
15 αʔϏεΞΧϯτͷ࡞ͳͲͷηοτΞοϓΛͯ͢εΩοϓ͠ɺ ίϯιʔϧͷίϚϯυϙνϙνͰ࠶ར༻Ͱ͖Δ͜ͱ ֦ுΛࣗ࡞ʢ։ൃɾެ։ʣ͢ΔϝϦοτ • Firebase / Google CloudͷެࣜυΩϡϝϯτʹ༷ʑͳCookbookհ͞Ε͍ͯΔ͕ࣄલ४උ͕ඞཁ •
ྫ͑ʮ͜ͷϦιʔεΛ͏ʹ͜ͷIAM͕ඞཁͰɺαʔϏεΞΧϯτͷ໊લʓʓʹͯ͠…ʯ • ֦ுΛΠϯετʔϧ͢ΕɺཪଆͰࣗಈͰαʔϏεΞΧϯτͷ࡞·Ͱࡁ·ͤͯ͘ΕΔ • વɺϩδοΫؚ͕·ΕΔCloud FunctionsࣗಈͰ্ཱ͕ͪΔͷͰ࠶ར༻ੑ͕ߴ͍ • ֦ுΛΞϯΠϯετʔϧ͢Εɺؔ࿈͢ΔϦιʔεͯ͢আ͞ΕΔಉظੑ͋Δ -
16 Cloud SchedulerΛͬͯFirestoreͷυΩϡϝϯτΛ ఆظతʹόοΫΞοϓ͢Δ֦ுɺBack up Firestore to StorageΛެ։ Back up
Firestore to Storage • ެࣜͷCookbookઌਓͨͪͷهࣄ͕ͨ͘͞Μ͋Γχʔζ͋Δͷͷެࣜఏڙ͕ͳ͔ͥͳ͍ػೳ • ॻ͘ίʔυྔগͳ͘қ͍͕ɺαʔϏεΞΧϯτͷ࡞gcloudίϚϯυΕ͕ͪͳखؒ • ֦ுͱͯ͠ެ։͢ΕΫϦοΫͻͱͭͰಋೖͰָ͖ͯ ຊ֨ாͷ͍ํʹ͍ͭͯهࣄΛެ։͍ͯ͠·͢ ެࣜυΩϡϝϯτͰհ͞Ε͍ͯΔCookbook -
17 ֤ϦιʔεͷηοτΞοϓ͕ෆཁʹͳΓɺߏύϥϝʔλΛࢦఆ͢ΔͷΈ ֦ுΛ͏͜ͱͰखؒΛେ෯ʹݮ Cloud Functions Cloud Logging IAM Cloud Scheduler
Before After ։ൃऀ͕ඞཁͳϦιʔεΛબఆͯ͠४උ͕ඞཁ -
20 Firebase CLIΛͬͯinitίϚϯυΛୟ͘ͱɺ ։ൃʹඞཁͳςϯϓϨʔτσΟϨΫτϦ͕ੜ͞ΕΔ ExtensionͷσΟϨΫτϦߏ • TypeScript or JavaScriptΛબͰ͖Δ •
extensions.yamlPermissionsύϥϝʔλͳͲΛࢦఆ͢Δɺ࠷ར༻͢ΔϝλσʔλϑΝΠϧ • ݟͯͷ௨ΓυΩϡϝϯτϑΝΠϧ͕ଟੜ͞ΕΔ Source: https://github.com/firebase/firebase-tools/blob/ 34f4d953f111db4f8a8479746bee0b44b46d3a35/src/commands/ ext-dev-init.ts#L40 -
21 ։ൃجຊతʹϩʔΧϧͷEmulator Suiteʹͯߦ͏ ։ൃαΠΫϧ① - Firebase Emulator Suite • Cloud
FunctionsڥͳͷͰɺैདྷ௨ΓEmulator SuiteΛ্ཱͪ͛ͯ։ൃΛ͢Δ • ͨͩ͠ɺGoogle APIαʔυύʔςΟAPIͳͲEmulator SuiteͰ࠶ݱͰ͖ͳ͍߹ɺ࣮ϓϩδΣΫτͰ֬ೝ • TypeScriptͷ߹`.ts`ϑΝΠϧͱ`extensions.yaml`ͷϑΝΠϧΛओʹ࿔Δ͜ͱʹͳΔ ௨ৗ௨ΓؔΛ༻ҙͯ͠ϩδοΫΛॻ͘ ࣮ߦ໊͍ͨؔ͠Λࢦఆͯ͠ɺ ϓϩύςΟύϥϝʔλΛࢦఆ͢Δ -
22 Emulator SuiteͰ࠶ݱͰ͖ͳ͍߹ɺ ΞυϗοΫͳςετΛߦ͍͍ͨ߹֦ுΛΞοϓϩʔυ͢Δ ։ൃαΠΫϧ② - ext:dev:upload • Ξοϓϩʔυํ๏ɺGitHubͷύϒϦοΫϨϙδτϦ͔ϩʔΧϧ͔બͿ͜ͱ͕Ͱ͖Δ •
ݸਓతʹΞοϓϩʔυ͕ૣ͍ʢͱײ͡ΔʣͷͰɺϩʔΧϧࢦఆ͕͓͢͢Ί • ϦϦʔεεςʔδɺalphaɾbetaɾrcͷ3εςʔδ͕ϓϨϦϦʔε൛ͱͯ͠ଘࡏ͢Δ • ेͳςετ͕ྃͯ͠৹ࠪʹग़͢߹stableεςʔδʹΞοϓϩʔυ͢Δ ext:dev:upload ίϚϯυΛୟ͘ͱϦϦʔεεςʔδ͕ΘΕ ΞοϓϩʔυͰ͖Δʢ`--stage`ͰলུͰ͖Δʣ ϓϨϦϦʔε൛ʢstableҎ֎ʣɺ৽͘͠Ξοϓϩʔυ͢ΔࡍʹΘ͟Θ͟όʔδϣϯΛ্͛Δඞཁͳ͘ɺ εςʔδ໊ͱΞοϓϩʔυ൪߸͕ࣗಈతʹ༩͞ΕΔʢΠϯΫϦϝϯτॲཧΛؾʹ͠ͳͯ͘ྑ͍ʣ -
24 ެ։ʹExtension Publisherͱͯ͠ͷొ͕ࣄલʹඞཁ Extensions Hubʹެ։͢Δ४උ • Publisher IDΛܾΊͯࣄલొΛࡁ·ͤΔඞཁ͕͋Δʢར༻نͷಉҙͳͲʣ • BlazeϓϥϯͷFirebaseϓϩδΣΫτͰར༻Մ
ొ͕ྃ͢ΔͱPublisher ProfileʹΞΫηεͰ͖ΔΑ͏ʹͳΓ·͢ Publisher ProfileFirebaseϓϩδΣΫτͱผཧͱͳ͍ͬͯ·͢ -
25 ֦ுΛΠϯετʔϧ͢ΔલͱޙͰɺͦΕͧΕυΩϡϝϯτ͕ඞཁ υΩϡϝϯτ `ext:info` ίϚϯυΛ͏ͱPREINSTALL.mdextensions.yamlͷதΛ݁߹ͯ͠ॻ͖ग़͢͜ͱ͕Ͱ͖Δɻ ϑΝΠϧ໊ ༰ ܝࡌՕॴ PREINSTALL ར༻ऀ͕Extensions
HubͰ֦ுΛݟ͚ͭͯɺৄࡉϖʔδʹભҠ ͨ͠ࡍʹදࣔ͞ΕΔɺΠϯετʔϧલʹ͑Δ༰ɻ ྫʣ֦ுͷ֓ཁɺඞཁͳύϥϝʔλɺύʔϛγϣϯɺྉۚͳͲ POSTINSTALL ར༻ऀ͕֦ுΛΠϯετʔϧͨ͠ޙʹɺ࣮ߦ͢Δ·Ͱͷεςο ϓͳͲΛ͑Δ༰ɻMarkdownͰ͋Δ͕ɺextensions.yaml Ͱࢦఆͨ͠ϝλσʔλΛมͱͯ͠ར༻Ͱ͖Δͷ͕ಛɻ ྫʣνϡʔτϦΞϧɺϩάͷ֬ೝํ๏ͳͲ • PREINSTALLɾPOSTINSTALLɾCHANGELOG͕࠷ݶඞཁͳυΩϡϝϯτϑΝΠϧ • READMEੜ͞Εͳ͍ͷͰɺඞཁͰ͋ΕӈԼͷίϚϯυͰੜ͢Δͱྑ͍ -
26 Extensions Hubͷެ։ʹ৹͕ࠪඞཁͰɺ ݸਓͷ࣮ϕʔεͰฏۉͯ͠2~3͔͔ΔΠϝʔδ ެ։ͷ৹ࠪ • աෆͳ͘దͳPermissions͕ઃఆ͞Ε͍ͯΔ͔ • PREINSTALL /
POSTINSTALL / READMEͳͲυΩϡϝϯτ͕దʹهࡌ͞Ε͍ͯΔ͔ • ෆదࣄ߲͕͋Δͱཧ༝ͱͱʹ൱ೝ͞Εͯࠩ͠͞ΕΔʢApp Store৹ࠪͱಉ༷ʣ -
29 Conclusion • Firebase Extensionsʑछྨ͕૿͓͑ͯΓɺGoogle I/O 2023ͰݸਓͰ֦ுػೳͷ։ൃɾެ։͕Մೳʹͳͬͨɻ • TypeScript(JavaScript)͕ॻ͚Εɺීஈͷ։ൃͷԆ ͰൺֱతΧϯλϯʹ֦ுԽ͢Δ͜ͱ͕Ͱ͖Δɻ
• ֦ுGUIͰ؆୯ʹಋೖͰ͖ΔͨΊ͕࣌ؒઅͰ͖ɺΞ ϓϦέʔγϣϯ։ൃΛޮԽ͢Δ͜ͱ͕Ͱ͖Δɻ -
30 ެࣜυΩϡϝϯτҎ֎ͰɺInvertaseࣾͷهࣄ͕͓͢͢Ί ਪهࣄ • Export User DataImage Processing APIͳͲ֦ுΛෳެ։ •
Invertase։ൃऀͷͨΊͷπʔϧΦʔϓϯιʔεͷ։ൃΛಘҙͱ͢Δاۀ • React NativeFlutterͷFirebase SDKͷ։ൃɾϝϯςφϯε͕༗໊ͳྫ ৹ࠪϨϏϡʔInveratseͷMaisࢯ͕ஸೡʹϑΟʔυόοΫ͘Ε·ͨ͠ https://invertase.io/category/firebase-extensions -
32 Appendix • [Extension publisher overview | Firebase Extensions](https://firebase.google.com/docs/extensions/publishers) •
[What's new at Google I/O 2023](https://firebase.blog/posts/2023/05/whats-new-at-google-io/) • [Google Developers Japan: Google I/O 2022 Ͱൃද͞Εͨ Firebase ͷ৽ػೳ](https://developers- jp.googleblog.com/2022/06/io22-firebase.html) • [Firebase Extensions - Invertase blog](https://invertase.io/category/firebase-extensions) • [Firebase Extensions ͡ΊͷҰา](https://www.slideshare.net/kenichitatsuhama/firebase-extensions) • [Firebase Resize ImagesΛͬͯΈͨ - Qiita](https://qiita.com/butterv/items/2194a776f55023ccd485) • [firebase/extensions: Source code for official Firebase extensions](https://github.com/firebase/extensions) • [invertase/firebase-extensions: A collection of Firebase Extensions built by Invertase.](https://github.com/ invertase/firebase-extensions) • [rowyio/firebase-extensions: A collection of Firebase Extensions built by the Rowy team, designed to help you build your app faster.](https://github.com/rowyio/firebase-extensions) • [yamankatby/firebase-extensions: A collection of Firebase Extensions designed to help you build better apps faster.](https://github.com/yamankatby/firebase-extensions)