Wednesday, July 19, 2023

Firebase Functions 完全ガイド:初心者から上級者まで

第1章:Firebase Functionsの導入

概要

Firebase Functionsは、サーバーレス・コンピューティング・サービスであり、Firebaseの他のサービスがトリガーするイベントやHTTPSリクエストに反応して、カスタム・バックエンド・コードを簡単に展開および実行できます。この章では、Firebase Functionsの基本的な概要とプロジェクトの設定、デプロイ方法について説明します。

始め方

Firebase Functionsを使用するためには、以下のものをインストールする必要があります:

  • Node.js (バージョン14以上)
  • Firebaseのコマンドラインインターフェース(CLI)

必要な要件をインストールしたら、以下のコマンドを実行してFirebaseアカウントにログインします:


firebase login

新しいプロジェクトの作成

新しいFirebase Functionsのプロジェクトを作成するには、以下の手順に従ってください:

  1. firebase init functionsを実行して、新しいプロジェクトディレクトリを作成し、その中でfunctionsプロジェクトを開始します。
  2. Firebaseプロジェクトをfunctionsプロジェクトに関連付けます。
  3. Cloud Functionsで使用する言語を選択します(JavaScriptまたはTypeScript)。

これにより、プロジェクトに必要なファイルが含まれる新しいディレクトリfunctionsが作成されます。

シンプルなCloud Functionの記述

functions/index.js(TypeScriptの場合はfunctions/index.ts)ファイルに、基本的なCloud Functionを記述します。


const functions = require('firebase-functions');

exports.helloWorld = functions.https.onRequest((request, response) => {
    response.send('Hello, World!');
});

Cloud Functionのデプロイ

以下のコマンドを実行して、Cloud Functionをデプロイします:


firebase deploy --only functions

デプロイが完了すると、デプロイされたCloud FunctionのURLが発行されます。これにより、ウェブブラウザまたはアプリケーション内で呼び出すことができます。

第2章:スケジュールされた関数の作成と管理

概要

この章では、Firebase Functionsを使用して、スケジュールされた関数を作成および管理する方法を説明します。スケジュールされた関数を使用すると、サーバーレスコードを特定の間隔で実行できます。これは、定期的に実行が必要なタスクに適しています。

スケジュールされた関数の作成

スケジュールされた関数を作成するためには、`functions/index.js`(TypeScriptの場合は`functions/index.ts`)ファイルを以下のように更新します:


const functions = require('firebase-functions');

exports.scheduledFunction = functions.pubsub.schedule('every 5 minutes').onRun((context) => {
  console.log('This function will be run every 5 minutes!');
});

この例では、スケジュールされた関数は5分ごとに実行されます。`schedule`パラメータを変更することで、実行間隔を自分のニーズに合わせてカスタマイズできます。

タイムゾーンの管理

デフォルトでは、スケジュールされた関数はUTCタイムゾーンを使用します。特定のタイムゾーンを設定したい場合は、`functions/index.js`(TypeScriptの場合は`functions/index.ts`)ファイルを以下のように更新します:


const functions = require('firebase-functions');

exports.scheduledFunctionWithTimeZone = functions.pubsub.schedule('every day 12:00')
  .timeZone('America/New_York')
  .onRun((context) => {
    console.log('This function will be run every day at 12:00 PM in the America/New_York time zone!');
  });

この例では、スケジュールされた関数はAmerica/New_Yorkタイムゾーンで毎日12:00 PMに実行されます。

スケジュールされた関数のデプロイ

以下のコマンドを実行して、スケジュールされた関数をデプロイします:


firebase deploy --only functions

デプロイが完了すると、スケジュールされた関数は指定された間隔で自動的に実行されます。

第3章:Firebaseリアルタイムデータベースイベントトリガー

概要

この章では、Firebase Functionsを使って、Firebaseリアルタイムデータベースのイベントトリガーを作成する方法について説明します。イベントトリガーを使用すると、カスタムサーバーレスコードを実行してデータベースの変更に対応することができます。また、よく使われるイベントトリガー、例えばonCreate、onUpdate、onDeleteについても説明します。

onCreateイベントトリガーの作成

onCreateトリガーは、リアルタイムデータベースに新しいノードが追加されると発火します。onCreateイベントトリガーを作成するには、`functions/index.js`(TypeScriptの場合は`functions/index.ts`)ファイルを次のように更新してください:


const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();

exports.newNodeCreated = functions.database.ref('/path/to/nodes/{nodeId}')
  .onCreate((snapshot, context) => {
    const nodeId = context.params.nodeId;
    const nodeData = snapshot.val();
    console.log(`ID "${nodeId}" の新しいノードがデータと共に作成されました:`, nodeData);
  });

この関数は、指定されたパスに新しいノードが作成されるたびに実行されます。

onUpdateイベントトリガーの作成

onUpdateトリガーはリアルタイムデータベースのデータが更新されると発火します。onUpdateイベントトリガーを作成するには、`functions/index.js`(TypeScriptの場合は`functions/index.ts`)ファイルを次のように更新してください:


const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();

exports.nodeUpdated = functions.database.ref('/path/to/nodes/{nodeId}')
  .onUpdate((change, context) => {
    const nodeId = context.params.nodeId;
    const beforeData = change.before.val();
    const afterData = change.after.val();
    console.log(`ID "${nodeId}" のノードが`, beforeData, 'から', afterData, 'に更新されました');
  });

この関数は、指定されたパスのデータが更新されるたびに実行されます。

onDeleteイベントトリガーの作成

onDeleteトリガーは、リアルタイムデータベースのデータが削除されると発火します。onDeleteイベントトリガーを作成するには、`functions/index.js`(TypeScriptの場合は`functions/index.ts`)ファイルを次のように更新してください:


const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();

exports.nodeDeleted = functions.database.ref('/path/to/nodes/{nodeId}')
  .onDelete((snapshot, context) => {
    const nodeId = context.params.nodeId;
    const deletedData = snapshot.val();
    console.log(`ID "${nodeId}" のノードがデータと共に削除されました:`, deletedData);
  });

この関数は、指定されたパスのノードが削除されるたびに実行されます。

イベントトリガーのデプロイ

次のコマンドを実行して、イベントトリガーをデプロイします:


firebase deploy --only functions

デプロイが完了すると、関数は指定されたリアルタイムデータベースのイベントに応答して実行されます。

第4章: Firebase Firestoreイベントトリガー

概要

この章では、Firebase Functionsを使用してFirestoreのイベントトリガーを作成する方法について説明します。Firestoreは、Firebaseが提供するスケーラブルなクラウドホスト型のNoSQLデータベースです。リアルタイムデータベースのイベントトリガーと同様に、Firestoreのイベントトリガー(onCreate、onUpdate、onDeleteなど)を使用すると、データベースの変更に対応してカスタムサーバーレスコードを実行できます。

onCreateイベントトリガーの作成

onCreateトリガーは、Firestoreに新しいドキュメントが追加されたときに発火します。onCreateイベントトリガーを作成するには、`functions/index.js`(TypeScriptの場合は `functions/index.ts`)ファイルを以下のように更新してください:


const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();

exports.newDocumentCreated = functions.firestore.document('/path/to/documents/{docId}')
  .onCreate((snapshot, context) => {
    const docId = context.params.docId;
    const docData = snapshot.data();
    console.log(`ID "${docId}" の新しいドキュメントがデータと共に作成されました:`, docData);
  });

この関数は、指定されたパスに新しいドキュメントが作成されるたびに実行されます。

onUpdateイベントトリガーの作成

onUpdateトリガーは、Firestoreのドキュメントのデータが更新されたときに発火します。onUpdateイベントトリガーを作成するには、`functions/index.js`(TypeScriptの場合は `functions/index.ts`)ファイルを以下のように更新してください:


const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();

exports.documentUpdated = functions.firestore.document('/path/to/documents/{docId}')
  .onUpdate((change, context) => {
    const docId = context.params.docId;
    const beforeData = change.before.data();
    const afterData = change.after.data();
    console.log(`ID "${docId}" のドキュメントが`, beforeData, 'から', afterData, 'に更新されました');
  });

この関数は、指定されたドキュメントのパスのデータが更新されるたびに実行されます。

onDeleteイベントトリガーの作成

onDeleteトリガーは、Firestoreのドキュメントが削除されたときに発火します。onDeleteイベントトリガーを作成するには、`functions/index.js`(TypeScriptの場合は `functions/index.ts`)ファイルを以下のように更新してください:


const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();

exports.documentDeleted = functions.firestore.document('/path/to/documents/{docId}')
  .onDelete((snapshot, context) => {
    const docId = context.params.docId;
    const deletedData = snapshot.data();
    console.log(`ID "${docId}" のドキュメントがデータと共に削除されました:`, deletedData);
  });

この関数は、指定されたパスのドキュメントが削除されるたびに実行されます。

イベントトリガーのデプロイ

次のコマンドを実行して、イベントトリガーをデプロイします:


firebase deploy --only functions

デプロイが完了すると、関数は指定されたFirestoreのイベントに応答して実行されます。

第5章 : Firebase Storageイベントトリガー

概要

この章では、Firebase Functionsを使ってFirebase Storageのイベントトリガーを作成する方法を説明します。Firebase StorageはFirebaseが提供するクラウド型ファイルストレージソリューションです。イベントトリガーにより、ストレージバケット内でのファイルのアップロードや削除、メタデータの更新などの変更に応じてカスタムサーバーレスコードを実行することができます。ここでは、最も一般的なイベントトリガーであるonFinalize、onDelete、およびonMetadataUpdateトリガーについて説明します。

onFinalizeイベントトリガーの作成

onFinalizeトリガーは、ファイルのアップロードが完了したときに発火します。onFinalizeイベントトリガーを作成するには、`functions/index.js`(TypeScriptの場合は`functions/index.ts`)ファイルを以下のように更新してください。


const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();

exports.fileUploaded = functions.storage.object().onFinalize((object) => {
  const filePath = object.name;
  const contentType = object.contentType;
  console.log(`ファイル "${filePath}" がコンテンツタイプと共にアップロードされました:`, contentType);
});

この関数は、Firebase Storageにファイルが正常にアップロードされるたびに実行されます。

onDeleteイベントトリガーの作成

onDeleteトリガーは、Firebase Storageからファイルが削除されたときに発火します。onDeleteイベントトリガの作成には、次のコードで `functions/index.js`(TypeScriptの場合は `functions/index.ts`)ファイルを更新します:


const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();

exports.fileDeleted = functions.storage.object().onDelete((object) => {
  const filePath = object.name;
  console.log(`ファイル "${filePath}" がストレージから削除されました。`);
});

この関数は、Firebase Storageからファイルが削除されるたびに実行されます。

onMetadataUpdateイベントトリガーの作成

onMetadataUpdateトリガーは、格納されたファイルのメタデータが更新された時に発火します。onMetadataUpdateイベントトリガーを作成するには、`functions/index.js`(TypeScriptの場合は`functions/index.ts`)ファイルを以下のように更新してください。


const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();

exports.metadataUpdated = functions.storage.object().onMetadataUpdate((object) => {
  const filePath = object.name;
  const metadata = object.metadata;
  console.log(`ファイル "${filePath}" のメタデータが更新されました:`, metadata);
});

この関数は、Firebase Storageで格納されたファイルのメタデータが更新されるたびに実行されます。

イベントトリガーのデプロイ

次のコマンドを実行してイベントトリガーをデプロイします:


firebase deploy --only functions

デプロイが完了すると、関数は指定されたFirebase Storageイベントに応答して実行されます。

第6章 : Firebase認証トリガー

概要

この章では、Firebase認証とFirebase Functionsを使ったイベントトリガの作成方法に焦点を当てます。Firebase認証は、メールアドレスとパスワード、ソーシャルメディアプロバイダー(例:Google、Facebook)など、さまざまなプロバイダーをサポートする広く使われている認証ソリューションです。ここでは、Firebase認証の最も一般的なイベントトリガーであるonCreateおよびonDeleteトリガーについて説明します。

onCreateイベントトリガーの作成

onCreateトリガーは、ユーザーが正常に作成されたときに発火します。Firebase認証のonCreateイベントトリガーを作成するには、`functions/index.js`(TypeScriptの場合は`functions/index.ts`)ファイルを以下のように更新します。


const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();

exports.userCreated = functions.auth.user().onCreate((userRecord) => {
  const userId = userRecord.uid;
  const userEmail = userRecord.email;
  console.log(`ユーザー "${userId}" がメールアドレスと共に作成されました:`, userEmail);
});

この関数は、新しいユーザーがFirebase認証を通じて作成されるたびに実行されます。

onDeleteイベントトリガーの作成

onDeleteトリガーは、ユーザーが削除されたときに発火します。Firebase認証のonDeleteイベントトリガーを作成するには、`functions/index.js`(TypeScriptの場合は`functions/index.ts`)ファイルを以下のように更新します。


const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();

exports.userDeleted = functions.auth.user().onDelete((userRecord) => {
  const userId = userRecord.uid;
  const userEmail = userRecord.email;
  console.log(`ユーザー "${userId}" がメールアドレス "${userEmail}" と共に削除されました。`);
});

この関数は、ユーザーがFirebase認証から削除されるたびに実行されます。

イベントトリガのデプロイ

イベントトリガーをデプロイするには、次のコマンドを実行します。


firebase deploy --only functions

デプロイが完了すると、関数は指定されたFirebase認証イベントに応答して実行されます。


0 개의 댓글:

Post a Comment