今回は、Cloud Functions For Firebase(以後、長いのでFirebase Functionsと呼びます)を使って関数をスケジュール実行する方法をまとめていきます。
以前、HTTPリクエストによる関数実行については記事にまとめていますが、スケジュール実行もよくあるユースケースかと思います。少しでも参考になれば幸いです。
Firebaseについて
Firebaseとは
Firebaseは、Googleが提供するモバイルアプリおよびWebアプリケーションの開発プラットフォームです。いわゆるBaaS(Backend as a Service)の代表的な一つで、バックエンドの機能を提供してくれるサービスとも言えます。開発者はFirebaseを使用して、リアルタイムデータベース、認証、ストレージ、ホスティング、クラウド関数などの機能を簡単に統合することができます。Firebaseはクラウドベースのサービスであり、スケーラビリティに優れ、セキュリティと信頼性が高いのが特徴です。また、シンプルなAPIと直感的なダッシュボードを提供するため、開発者は迅速にアプリケーションを構築・展開・運用できます。
Firebase Functionsとは
Firebase Functions(正式には、Cloud Functions For Firebase)は、Firebaseプラットフォームの一部であり、サーバーレスのコンピューティング環境を提供します。これにより、開発者はクラウド上で実行される小さな単一機能の関数を作成し、実行することができます。Firebase FunctionsはNode.jsで書かれたJavaScriptやTypeScriptのコードを実行し、HTTPトリガーやデータベースのイベントに応答して処理を実行することができます。また、Cloud FirestoreやRealtime Databaseと連携してリアルタイムなデータ処理を実現することも可能です。Firebase Functionsはスケーラビリティが高く、自動的にスケールして負荷に応じてリソースを割り当てます。これにより、サーバーの管理やスケーリングに関する心配をせずに、アプリケーションのバックエンドのロジックを効率的に実行できます。
Cloud Schedulerとは
FirebaseのCloud Schedulerは、Firebaseプラットフォームの一部であり、定期的に実行されるタスクをスケジュールできるサービスです。Firebaseアプリケーションとシームレスに統合されており、例えば特定の時間に通知を送信したり、バッチ処理を実行したりする際に便利です。Cloud Schedulerは、Firebase Functionsやその他のFirebaseサービスと組み合わせて使用され、アプリケーションの自動化と効率化を支援します。
実装の流れ
開発環境
- Node.js:
v18.15.0
- npm:
v9.5.0
- TypeScript:
v5.1.6
- OS:
MacOS Monterey
構築手順
実行環境の構築
以前書いた以下の記事を参考に実行環境に構築をしていきます。
対象としては、STEP1〜3までになります。
- Firebaseプロジェクトのセットアップ
- ローカルに実行環境構築
- Firebaseプロジェクトの初期化
この時点でのディレクトリ構成は以下
.
├── README.md
├── .firebaserc
├── firebase.json
└── functions
├── lib
│ ├── index.js
│ └── index.js.map
├── package-lock.json
├── package.json
├── src
│ └── index.ts
├── tsconfig.dev.json
└── tsconfig.json
スケジュール実行の実装
コード実装
import * as functions from 'firebase-functions';
const runtimeOpts: functions.RuntimeOptions = {
timeoutSeconds: 300,
memory: '256MB',
};
export const scheduleHelloWorld = functions
.region('asia-northeast1')
.runWith(runtimeOpts)
.pubsub.schedule('0 9,14 * * *')
.timeZone('Asia/Tokyo')
.onRun((context) => {
console.log('Hello World!!!!', context.params);
return;
});
各コード解説
コード | 説明 |
region(‘asia-northeast1’) | 関数が実行されるリージョンを指定 |
runWith(runtimeOpts) | メモリは256MBに設定していますが、デフォルト値と一緒 なので特に明記する必要はない |
pubsub.schedule(‘0 9,14 * * *’) | Pub/Subトリガーにて実行時間をCronで設定 |
timeZone(‘Asia/Tokyo’) | タイムゾーンをAsia/Tokyoに設定 これにより、スケジュールされた時間は日本時間で解釈される |
onRun((context) => {…}) | 関数が実行される際の処理を定義 |
動作検証
デプロイ
Firebaseに作成した関数をデプロイしていきます。
$ firebase deploy --only functions
...
✔ Deploy complete!
正常にデプロイされれば、Cloud Functions
、Cloud Scheduler
のそれぞれに反映されます。
https://console.cloud.google.com/functions
https://console.cloud.google.com/cloudscheduler
動作検証
動作検証する場合は、cronで設定している実行時間を調整する方法もありますが、
Cloud Schedulerのコンソール画面にて、「操作」→「強制実行」を実施するのが早いです。
そのまま「ログを表示」とすれば実行ログも表示されます。
以下のように正常にログ出力されていれば動作自体も問題なしです。
まとめ
改めて今回はFirebase Functionsをスケジュール実行する手順についてまとめてみました。よくあるユースケースではあるため今後役に立つかと思います。他にも様々な使い方や設定がありますので、少しずつキャッチアップできればと思います。最後までご覧いただきありがとうございました。