Google の Cloud Functions で、定期実行する方法を検討・採用する。

今回の記事は、こんな人が書いてるもぐー!
タネマキ運営者
横浜駅のコワーキングスペース タネマキをやってます。コーヒー部。コーヒー飲む人が増えると喜びます!2児の父で毎日てんやわんや。バスケを再開できるように運動量増やしてます。

ほんのちょっと開発っぽい話。サーバーレス〜

先日、ちょっとした処理をしたくて、Google の Cloud Functions を使ったのですが、定期実行の仕組みが Cloud Functions にはまだないようなので、ちょろりと調査しました。

やりたいことは、毎日帰る時刻に、Cloud Functions の関数を実行するだけ。( Cloud Functions で、簡単にトリガーとして設定できれば良いのだけど…。)

自分でパッと思いつく方法

  • crontab, systemd の timer
  • cron のサービス
  • Google Apps Script (GAS)

公式っぽい方法

  • App Engine Cron

結論としては、3番目の GAS を使った方法を採用。オススメかと言われると、よく分からん。けど、最近よく GAS の記事とか見る気がするので、良い機会になりました。もぐ。

それでですね、公式の方法は、App Engine だけでなく、Cloud Pub/Sub を使ったりと、その辺知見もなく、自分にはちょっと時間かかるし手を抜きたい一心で、今回はスキップ。もうちょっと大規模で分散処理が必要な場合に、有効そうな雰囲気!

今回は、メンテナンスもしなそうで、動かしていることすら忘れそうなので、自分のサーバーではなく、クラウド、もしくは定期実行してくれるサービスを使いたい気分。ということで、1番目は、却下。

2番目の cron のサービスを利用する案は、任意の URL を指定したら、その URL に定期的にアクセスしてくれるようなサービスを使えばそれでOKかと思って探したら、ありました。あるよね。と思ったけど、URL にちょっと漏らしたくない文字列を含んでいたので、信用ならないサイトだったらどうしようやだなーと思い、却下。

ただ、あとで気が付きましたけど、先ほどの Google Developers ブログからリンク貼られていて、別の方法の項目でそのサイトなども紹介されていました。怪しいサイトではないので、まぁこの方法が手っ取り早いかもですね。

そんなこんなで、Google Apps Script (GAS) を使う選択をしたのですが、タイマーのセットでちょっとハマりました。

GAS は1分単位でタイマーをセットできない?

GASにはトリガーという、時間で関数を発火させる仕組みがありました。が、残念なことに、正確な時間での実行ができないようです。例えば、15:00-16:00 の間で実行する場合、その一時間の間のどこかでトリガーが発動する仕組み。

GAS で、1分単位の時間を設定する

調べると、余計なコードを書く羽目にはなりますが、1分単位で、好きなタイミングでプログラムを実行することが可能になりました。下記の記事をそのまま丁寧になぞれば、実現できます。

ということで、GAS のトリガーを用いて、Google Functions の http トリガーで作成した URL を叩くことが可能になりました。わーい。

GAS をローカルで開発する(まだやってない)

初めての GAS でしたが、すんなり使えました。数行のコードでしたし。

調べると、clasp などのライブラリを用いることで、ローカル環境を作る方法も整ってきているようです。詳しくは、下記記事などが参考になります。

GAS のコードを管理する(まだやってない)

ローカル環境ができれば、そのまま git 使えば良いと思いますが、下記の方法なんかもあるみたい。他の項目も勉強になります。

GAS の使いどころ

そこまで本気で GAS を使う気にもなっていないのですが、今後、Google の各種サービスなどと連携する場合、便利っぽい。個人的には、スプレッドシートをよく使っているので、何か自動化できることを探してみようかな、という感じです。

連携できそうなやつ

  • Gmail と連携。手軽にメール送ったり
  • スプレッドシート
  • ちょっとしたクローラー
  • ちょっとしたボット

ひと通り Qiita / GoogleAppsScript を見ましたが、まだ腑に落ちないなぁ。なんだか Cloud Functions で済んでしまいそうな気もしますが、調査不足なので、ちょいちょい調べてみます。おしまい。

タネマキのSNS

タネマキの LINE モグ雄の X(Twitter) タネマキの instagram タネマキの Facebook ページ