Remote - Containers上でgit commitするときはタイムゾーンに注意

VS CodeのRemote - Containers拡張機能を利用してコンテナ上でソースコードを書いていたところ、GitHubに草が生えないことがあったので対処法をまとめておく。

 

 

[GitHubに草が生えない]

ここ1ヶ月ほど、VS CodeのRemote - Containers拡張機能を利用してソースコードを書いているとブログで書いた。

『試して理解 Linuxのしくみ』の実験プログラムをVS CodeのRemote - Containersで動かす - kdnakt blog

VS CodeのRemote - Containers拡張とDiagramsを利用してクラウド構成図を書く - kdnakt blog

 

その途中で、手元のGitリポジトリでコミットした変更をGitHubにプッシュしたが、何度か草が生えないことがあった。

f:id:kidani_a:20200714021648p:plain

 

プッシュしたリポジトリのコミット履歴をGitHub上で確認すると、コミットした時刻が日本時間ではなく9時間の時差があった。このため、日付が変わった直後にGitHubを確認すると、前日にコミットしたものとみなされ、草が生えなかった。

 

時差が発生している原因は、VS Code上のターミナルでGit操作を実行した際に、ターミナルが動作しているコンテナのタイムゾーンの設定がUTCとなっていることだった。

 

VS Code上でターミナルを開き、dateコマンドを実行すると、次のようにタイムゾーンUTCになっていることが確認できた。

# date
Mon Jul 13 15:05:00 UTC 2020

 

[コンテナのタイムゾーンを設定する]

コンテナのタイムゾーンを変更するには、Dockerfileの適当な位置に以下の行を追加する。

ENV TZ Asia/Tokyo 

または、以下の行を追加する。どちらかで良い。

ENV TZ JST-9

 

そのままだと反映されないので、export TZ=Asia/Tokyoのようにexportコマンドを実行するか、Macの場合Command + Shift + PでRemote - Containers: Rebuild Containerコマンドを実行する必要がある。

f:id:kidani_a:20200714030141p:plain

 

あらためてdateコマンドを実行すると、タイムゾーンJSTに変更されていることが確認できた。

# date
Tue Jul 14 00:10:00 JST 2020

 

こちらの記事を参考に実装した。

qiita.com

 

同記事によると、いくつかこの方法では対応できないOSもあるようだ。

qiita.com

qiita.com

 

[まとめ] 

  • GitHubにプッシュして草が生えてないときはコミットしたOSのタイムゾーンが問題かも
  • Dockerコンテナでタイムゾーンを変更する場合TZ環境変数を利用すると楽
  • 夜中に開発してないで寝ましょう
  • サンプルコードはこちら

github.com