1. masatomix

    Posted

    masatomix
Changes in title
+Cloud Functions for Firebase の関数をスケジューラから定期的に呼び出す簡単な方法
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,93 @@
+## イントロ
+
+Cloud Functions をスケジューラから呼び出す方法について。
+
+以前 [Cloud Functions for Firebase の関数をスケジューラから定期的に呼び出す](https://qiita.com/masatomix/items/b40a2c604319e52df4bf) という記事で、Cloud Functions for Firebaseを定期的に呼び出すのに、
+
+- ``functions.pubsub.topic('testTopic').onPublish(message => {..処理..})`` という関数をつくって
+- gcloud のコマンドで、testTopicにPublishする処理をスケジュール登録
+
+する方法を書きましたが、そのつづき。
+
+
+## もっと簡単に設定出来るようになってた(初めからあった??)
+
+最近みたら、[関数のスケジュール設定](https://firebase.google.com/docs/functions/schedule-functions?hl=ja) にもっとシンプルな方法が。
+
+まず以下は前回のやりかたです。
+
+```typescript:前回
+function want_to_execute() {
+ console.log('実行したいロジック!')
+}
+
+export const helloPubSub = functions.pubsub
+.topic('testTopic').onPublish(message => {
+ want_to_execute()
+})
+```
+
+として、具体的なスケジュールは別途で登録していました。
+
+
+コレを
+
+```typescript:今回
+function want_to_execute() {
+ console.log('実行したいロジック!')
+}
+
+export const helloPubSub = functions.pubsub
+ .schedule('0 */1 * * *')
+ .timeZone('Asia/Tokyo')
+ .onRun(async context => {
+ want_to_execute()
+ })
+```
+
+というように、スケジュール指定とタイムゾーンを直接記述できるようです。簡単ですね。。
+ちなみにココでOwn Codingしちゃっても、のちほど画面上で変更可能です。
+
+さてデプロイして確認してみましょう。
+
+```console
+$ npm run deploy
+```
+
+画面で確認してみると ``firebase-schedule-checkLicensePubSub-us-central1`` というTopic待ちの関数がたしかに登録されています。
+
+![00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/618c0b1e-bfab-94cc-47c2-d427f25fa51f.png)
+
+スケジューラは、そのTopicにPublishするようにスケジュール設定されていますね。
+![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/688e7d80-716b-bf56-fe4c-f4f6af00d019.png)
+
+
+一応Topicをみてみると
+![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/d565db39-aaae-0a7a-3ac4-3a57cb417c31.png)
+
+このようにウラではTopicが自動作成されていました。ようするに既存の方式と同じ方式です。
+つまりスケジュール情報をコード上に書く方法は、既存の書き方の syntactic sugar ってことがわかりました。。
+
+おつかれさまでしたー。
+
+### 参考 ちなみにコード上で関数のregionとかも指定出来た
+
+備忘です。
+
+```typescript
+export const helloPubSub = functions.pubsub.region('asia-northeast1') ←ココ
+ .schedule('0 */1 * * *')
+ .timeZone('Asia/Tokyo')
+ .onRun(async context => {
+ want_to_execute()
+ })
+```
+
+こんな感じに関数の稼働するregion指定なども可能でした。
+
+
+
+## 関連リンク
+
+- [Cloud Functions for Firebase の関数をスケジューラから定期的に呼び出す](https://qiita.com/masatomix/items/b40a2c604319e52df4bf)
+- [関数のスケジュール設定](https://firebase.google.com/docs/functions/schedule-functions?hl=ja)