Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

関数のスケジュール設定

指定した時刻に実行されるように関数をスケジュール設定する場合は、functions.pubsub.schedule().onRun() を使用します。この便利な方法により、Pub/Sub トピックが作成され、Cloud Scheduler を使用してこのトピックに関するイベントがトリガーされるため、希望するスケジュールどおりに確実に関数が実行されます。

始める前に

Firebase プロジェクトでこのソリューションを使用するには、プロジェクトで Blaze 料金プランを利用している必要があります。Blaze プランをまだ利用していない場合は、料金プランをアップグレードしてください。

課金は必須ですが、Cloud Scheduler の各ジョブのコストは月額 $0.10(USD)であり、Google アカウントごとに 3 つのジョブを無料で使用できるため、全体的なコストは管理可能であることが期待できます。Blaze の料金計算ツールを使用すると、予想使用量に基づく料金見積もりを作成できます。

プロジェクトで Pub/Sub API と Cloud Scheduler API を有効にする必要があります。これらはほとんどの Firebase プロジェクトですでに有効になっています。Google Cloud Platform Console でご確認ください。

スケジュール設定された関数を記述する

Cloud Functions for Firebase では、スケジューリング ロジックは関数コード内に記述します。デプロイ時の特別な要件はありません。スケジュール設定された関数を作成するには、functions.pubsub.schedule('your schedule').onRun((context)) を使用します。たとえば、App Engine cron.yaml 構文を使用して 5 分ごとに関数を実行するには、次のように記述します。

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

Cloud Scheduler では、Unix の Crontab と App Engine 構文の両方をサポートしています。たとえば、Crontab を使用して、スケジュール設定された関数を実行する特定のタイムゾーンを選択するには、次のように記述します。

exports.scheduledFunctionCrontab = functions.pubsub.schedule('5 11 * * *')
  .timeZone('America/New_York') // Users can choose timezone - default is America/Los_Angeles
  .onRun((context) => {
  console.log('This will be run every day at 11:05 AM Eastern!');
  return null;
});

timeZone の値は、tz database から取得したタイムゾーン名にする必要があります。サポートされているプロパティの詳細については、Cloud Scheduler リファレンス をご覧ください。

スケジュール設定された関数をデプロイする

スケジュール設定された関数をデプロイすると、関連するスケジューラ ジョブと Pub/Sub トピックが自動的に作成されます。Firebase CLI にトピック名がエコーされます。GCP Console でもジョブとトピックを確認できます。トピックには、次の規則に従って名前が付けられます。

firebase-scheduled-function_name-region

例:

firebase-scheduled-scheduledFunctionCrontab-us-east1