かずきち。の日記

サーバサイドエンジニアのつぶやき

GASで実行したら時間がずれたを解消!GASでmanufest.jsonを編集する重要性

プログラムを記述するメリットは何でしょうか?

プログラムを書くことはすなわちコンピュータに命令をすることです。

print "hogehoge";

と書けば、"hogehoge"とパソコンの画面上に表示することを意味します。
しかし、レベルが上がってくるとメールを送ったり、カレンダーを操作したりしたくなります。
そうするとタイムゾーンという概念が重要になってきます。

日本は協定世界時との時差は+9:00時間

オンラインの世界では基本的に時間だけを伝えるのは情報落ちです。
だって「そもそも相手が同じ日本にいる」という思い込みがあるからです。

UTC +0900 (+9時間00分)

なので、オンラインで海外の方と打ち合わせをするときは…
JSTなのか?UTCなのか?は極めて重要です。

なので、オンラインで打ち合わせをする際は必ずタイムゾーンが記載されます。

プログラムを実行する際はどこの国のサーバーでプログラムが実行されているのかは重要

GoogleCloudやAmazonEC2という言葉は聞いたことはありませんか?
クラウドコンピューティングを用いて、人が寝静まっている時間帯の国のコンピュータの計算能力を利用して、プログラムを実行できます。
一般に日本人が日本のサーバにプログラムを保存する場合は、プログラムのタイムゾーンとサーバのタイムゾーンは一致しているので人間にとってわかりやすいです。

しかしプログラムは「日本のタイムゾーン」で記述をして、「ブラジル」のインスタンスで実行すると12時間のずれ込みがある

よくプログラムを書いていると「ずれ」が生じます。
それは通信の差?ディスプレイの表示の差?などがありますが、数時間単位のずれ込みはタイムゾーンによる差であることが多いです。
ですので、ウェブ系の人とコミュニケーションをするときは「タイムゾーン」を明記することが大事です。

なので、Googleといった外資系企業の社員が会議をするときは必ずタイムゾーンが明記されます。
基本的に現地時間に合わせることが多いので、外資系企業の日本人などは早朝に会議をすることになります。
中国の外資系などの場合、日本と大きな時差はないので問題はありませんが…
日本とイギリスの会社などで会議を行った場合、日本人は早朝に会議に参加することになります。
なので、外資系金融の社員などは不規則な生活を余儀なくされてしまいます。
以前は日本人だけで完結した仕事もアメリカ、中国、シンガポールといった他国の人と働かなければいけません。
特にエンジニアはタイムゾーンには注意しながらプログラムを立てたほうが良いです。

GASでmanufest.jsonを編集する

歯車マークからmanufest.jsonを表示します。
チェックを入れましょう。

そうするとプログラムの詳細設定画面が表示されるようになります。

そうするとAsia/Tokyoで書かれたプログラムですと記述があります。
初期設定のままだとここは西アメリカのGoogle本社があるシリコンバレータイムゾーンになっているかと思います。
ですので、12:00にメールを送るプログラムを立てたのにプログラムの実行に16時間の差が出てしまいます。
これはGoogleサーバが設置されている国のタイムゾーンと日本のタイムゾーンの違いです。
私達はGoogleのサーバ上でプログラムを立てていますので、このコードは日本時間で実行されないと肝に銘じてください。
そのためにはプログラムに「ここは日本ですよ」と教え込む必要があるのです。

TimezoneがAsia/TokyoになっていればOKです。
私自身、はじめはなんかGoogleぶっ壊れてるんじゃない?と思ったのですが、
そもそもGoogleはサンフランシスコですからね。
当然プログラムの実行もUS時間で行われてしまいます。
なので、なんか挙動がおかしいなと思った人はぜひ自分のコンソールをチューニングしてみてください。