はじめに
こんにちは、京セラコミュニケーションシステム 福留(@kccs_kazuo_fukudome)です。
今回の記事のきっかけは、開発環境の Compute Engine や、Cloud SQL の起動・停止を休日にスキップしたかったためです。開発環境の起動・停止は、 Cloud Scheduler と Cloud Functions で構築しています。Cloud Scheduler は、 linux の cron と同じ設定方法のため、実行時間と曜日の指定はできますが、日本の祝日に、実行をスキップするといった設定はできません。
そこで、日本の祝日に起動をスキップするよう、Cloud Functions に node.js のライブラリ @holiday-jp/holiday_jp を組み込ました。@holiday-jp/holiday_jpで、祝日判定をするためには、タイムゾーンを合わせる必要があります。ですが、Cloud Functions のタイムゾーン設定がどうなっているか知らなかったので、改めて調べてみました。
本記事は 2023 年 6 月ごろに作成しております。
Google Cloud の機能を利用した場合は、利用料が発生します。
また、 今回利用したライブラリ @holiday-jp/holiday_jp の最新バージョン(V2.4.0)では、2050 年までの日本の祝日が登録されています。
2050 年以降の祝日や祝日法が改定され、祝日が変更になった場合は、新しいモジュールを組み込み直す必要があります。
デフォルトの Cloud Functions のタイムゾーンの確認
デフォルトの Cloud Functions のタイムゾーンを確認するため、
次のようなコードを、 Cloud Functions(第 1 世代) にデプロイし、実行結果を確認しました。
exports.testDate = (req, res) => {
const date = new Date();
console.log(date.toString());
res.status(200).send("");
}
デフォルトのタイムゾーンは、UTC という結果です。クラウドのサービスだから想像通りでした。
@holiday-jp/holiday_jp を利用する時の Input 引数は、Date 型となっています。そのため、タイムゾーンが UTC では、日本時間の午前 9 時より前に実行した場合、日時が前日となるので正しい祝日判定ができません。
Cloud Functions のタイムゾーンの設定方法
正しい祝日判定をするために、Cloud Cuntion のタイムゾーンを JST に設定できないのかな?と、色々
調べて、以下の箇所で設定できる事を見つけました。残念ながら、公式ドキュメントで、この設定方法を記載している箇所を見つけることはできなかったです。どこかに記載があってもいいなと思いましたが。。。
設定の箇所は、Cloud Functions -> ランタイム -> ランタイム環境変数 となります。
ランタイム環境変数に、次の内容で設定すれば完了です。
名前:TZ
値:Asia/Tokyo
タイムゾーン設定後の確認
ランタイム環境変数を設定し、先ほどのプログラムを再実行しました。
設定が反映されて、取得できた日付が JST になっています。
これで、@holiday-jp/holiday_jp を使って、正しい祝日判定ができそうです。
まとめ
Cloud Functions のタイムゾーン設定、お手軽にできて助かりました。ちょっとした事ですが、こういった環境変数もすぐに設定できて反映される。こういうのもクラウドサービスならではですよね。
日本は祝日が多いので、参考にしてもらえればと思います。