Dev Box のタイムゾーンの動作と注意点

Last Update:
このエントリーをはてなブックマークに追加

こんにちは、Japan Developer Support Core チームの松井です。 今回は、Microsoft Dev Box を利用する際に注意が必要なタイムゾーンの動作と設定について解説します。

問題の概要

Dev Box で利用できる標準のイメージは 協定世界時 (Coordinated Universal Time, UTC) が初期設定となっています。 しかし、クライアントのタイムゾーン リダイレクトが有効になっているため、リモート デスクトップ接続したユーザーには日本のタイムゾーンで動作しているように見える場合があります。一方で、ログオンしているユーザー以外のアカウント、例えば IIS のアカウントをはじめとするサービス アカウントやシステム アカウントではタイムゾーン リダイレクトは適用されません。

この動作により、アプリケーションやサービスの実行アカウントとそのタイムゾーンを考慮しない場合、以下のような問題が発生する可能性があります。

  • スケジュール タスクが想定した時刻に実行されない
  • ログのタイムスタンプが意図しない時刻で記録される (例: JST で午前 9:00 に操作しても、ログには UTC の午前 0:00 と記録される)
  • アプリケーションの時刻に関する処理が正しく動作しない

タイムゾーン リダイレクトの仕組みと動作の確認

リモート デスクトップ接続では、クライアント側のタイムゾーン情報をリモート セッションに転送する機能があります。これにより、ユーザーがリモート デスクトップ接続している間は、Dev Box のタイムゾーンがクライアントのタイムゾーン (例: 日本標準時 JST) として表示されます。

ユーザー セッション中のタイムゾーン確認

PowerShell で Get-TimeZone コマンドレットを使用して、リモート デスクトップ接続中のユーザー セッションでのタイムゾーンを確認することができます。今回は日本標準時となっていることが確認できます。

1
2
3
4
5
6
7
8
9
10
11
# PowerShell でタイムゾーンを確認
Get-TimeZone

# 結果例 (RDP 接続中)
Id : Tokyo Standard Time
HasIanaId : False
DisplayName : (UTC+09:00) Osaka, Sapporo, Tokyo
StandardName : Tokyo Standard Time
DaylightName : Tokyo Daylight Time
BaseUtcOffset : 09:00:00
SupportsDaylightSavingTime : False

システムのタイムゾーン確認

レジストリから実際のシステム タイムゾーンを確認したり、システム アカウントでタイムゾーンを確認することで、システムのタイムゾーン設定が UTC であることがわかります。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# レジストリから実際のシステム タイムゾーンを確認
Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\TimeZoneInformation"

# 結果例
Bias : 0
DaylightBias : 0
DaylightName : @tzres.dll,-931
DaylightStart : {0, 0, 0, 0…}
StandardBias : 0
StandardName : @tzres.dll,-932
StandardStart : {0, 0, 0, 0…}
TimeZoneKeyName : UTC
DynamicDaylightTimeDisabled : 0
RealTimeIsUniversal : 1

1
2
3
4
5
6
7
8
9
10
11
# システム アカウントでタイムゾーンを確認
# https://learn.microsoft.com/en-us/sysinternals/downloads/psexec
C:\pstools\psexec.exe -s powershell.exe -Command "Get-TimeZone"

# 結果例 (システム アカウント)
Id : UTC
DisplayName : (UTC) Coordinated Universal Time
StandardName : Coordinated Universal Time
DaylightName : Coordinated Universal Time
BaseUtcOffset : 00:00:00
SupportsDaylightSavingTime : False

解決策

アプリケーションやサービスの実装でタイムゾーンを考慮することが難しい場合、Dev Box のシステムのタイムゾーンを変更することで問題を解決できる可能性があります。 Dev Box のシステムのタイムゾーンを変更する方法は以下の 2 通りが挙げられます。

方法 1: プロビジョニング後にタイムゾーンを変更する

Dev Box のタイムゾーンを変更する場合、Dev Box 上でクライアントのタイムゾーン リダイレクト設定を一時的に無効化してからタイムゾーンを変更し、再度有効化する手順が必要になります。

  1. Dev Box に接続してログオンします。

  2. [ファイル名を指定して実行] から “gpedit.msc” を入力してローカル グループ ポリシー エディターを起動します。

  3. グループ ポリシーの構成で以下の設定を [無効] に変更します。

    [コンピューターの構成] - [管理用テンプレート] - [Windows コンポーネント] - [リモート デスクトップ] - [リモート デスクトップ セッションホスト] - [デバイスとリソースのリダイレクト] - “タイムゾーン リダイレクトを許可する”

  4. タイムゾーン リダイレクトの変更を反映するため、コンピューター (Dev Box) を再起動します。

  5. 下記ブログ記事のいずれかの手順でタイムゾーンを JST ((UTC+09:00)大阪、札幌、東京) に変更します。

    AVD 環境でシステムのタイム ゾーンを設定する - 設定手順

  6. 手順 3. で行った変更を元に戻します。

  7. タイムゾーン リダイレクトの変更を反映するため、もう一度コンピューター (Dev Box) を再起動します。

  8. 実施したタイムゾーンの変更が反映されているかご確認ください。

方法 2: カスタマイズを使用してプロビジョニング時にタイムゾーンを変更する

Dev Box のカスタマイズ機能を利用して、プロビジョニング時にタイムゾーンを設定することも可能です。以下は、タイムゾーンを "Tokyo Standard Time" に設定するカスタマイズ ファイルの例です。

1
2
3
4
5
6
7
8
# customization-task.yaml
$schema: 1.0
tasks:
- name: ~/powershell
parameters:
command: |
$id = 'Tokyo Standard Time'
Set-TimeZone -Id $id


本ブログの内容は弊社の公式見解として保証されるものではなく、開発・運用時の参考情報としてご活用いただくことを目的としています。もし公式な見解が必要な場合は、弊社ドキュメント (https://learn.microsoft.comhttps://support.microsoft.com) をご参照いただくか、もしくは私共サポートまでお問い合わせください。