Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

[インデックス 17768] ファイルの概要

このコミットは、Go言語の標準ライブラリ lib/time におけるタイムゾーンデータファイルを、2013gバージョンに更新することを目的としています。これは、タイムゾーン情報の正確性を保つために定期的に行われるメンテナンス作業の一環であり、特に夏時間(Daylight Saving Time, DST)の変更や政治的なタイムゾーン境界の調整に対応するために重要です。

コミット

commit 158c56ef8a7149d863fda4726094978d0562eea2
Author: Rob Pike <r@golang.org>
Date:   Tue Oct 8 16:16:24 2013 -0700

    lib/time: update time zone files to version 2013g
    This dataset is current as of Sep 30, 2013.
    
    Fixes #6524
    
    R=golang-dev, minux.ma
    CC=golang-dev
    https://golang.org/cl/14570044

GitHub上でのコミットページへのリンク

https://github.com/golang/go/commit/158c56ef8a7149d863fda4726094978d0562eea2

元コミット内容

lib/time: update time zone files to version 2013g
This dataset is current as of Sep 30, 2013.

Fixes #6524

R=golang-dev, minux.ma
CC=golang-dev
https://golang.org/cl/14570044

変更の背景

タイムゾーン情報は、世界中の政府や地域によって頻繁に変更されます。これには、夏時間の開始・終了日の変更、標準時のオフセットの変更、あるいは全く新しいタイムゾーンの導入などが含まれます。これらの変更は、正確な時刻計算や日付変換を行うソフトウェアにとって非常に重要です。Go言語の time パッケージは、これらのタイムゾーン情報に依存しており、古いデータを使用していると、誤った時刻表示や計算結果を招く可能性があります。

このコミットは、具体的にはGoのIssue #6524を修正するために行われました。Issue #6524は、Goが使用しているタイムゾーンデータが古く、特定のタイムゾーン(例: ブラジルの夏時間変更)に対応できていないという報告でした。このため、Goのタイムゾーンデータを最新のIANA Time Zone Database (tzdata) バージョン2013gに更新する必要がありました。

前提知識の解説

IANA Time Zone Database (tzdata)

IANA Time Zone Database(以前はOlson databaseとして知られていました)は、世界のタイムゾーンと夏時間(DST)の歴史的な変化を記録した、協調的な公開データベースです。このデータベースは、オペレーティングシステムやプログラミング言語(Goを含む)が正確な時刻情報を扱うための標準的な情報源として広く利用されています。tzdataは、政治的な決定や地理的な変更に応じて定期的に更新されます。

Go言語におけるタイムゾーンの扱い

Go言語の time パッケージは、システムにインストールされているタイムゾーン情報、またはGo自身の zoneinfo.zip ファイルに含まれるタイムゾーン情報を使用して時刻を扱います。zoneinfo.zip は、IANA Time Zone Databaseから生成されたバイナリデータを含んでおり、Goアプリケーションがシステムに依存せずに正確なタイムゾーン情報にアクセスできるようにします。

lib/time/update.bash スクリプト

lib/time/update.bash は、Goのタイムゾーンデータを更新するためのシェルスクリプトです。このスクリプトは、IANA Time Zone Databaseのソースコードとデータをダウンロードし、それらをGoが利用できる形式(zoneinfo.zip)に変換する役割を担っています。スクリプト内には、使用するtzdataの「CODE」バージョン(ソースコードのバージョン)と「DATA」バージョン(データセットのバージョン)が定義されており、これらを変更することで新しいtzdataバージョンを取り込むことができます。

技術的詳細

このコミットの主要な技術的変更は、Goのタイムゾーンデータ更新スクリプト lib/time/update.bash 内で、IANA Time Zone Databaseのバージョン指定を 2013c から 2013g へと変更した点です。

update.bash スクリプトは、以下の手順でタイムゾーンデータを更新します。

  1. バージョン指定: スクリプト内の CODEDATA 変数で、ダウンロードするtzdataのバージョンを指定します。このコミットでは、これらが 2013g に更新されました。
  2. ダウンロード: 指定されたバージョンのtzdataソースコードとデータファイルをIANAのFTPサーバーなどからダウンロードします。
  3. コンパイル/変換: ダウンロードしたデータは、Goが内部的に使用するバイナリ形式に変換されます。このプロセスには、C言語のコードをコンパイルするステップが含まれる場合があります。コミットメッセージの差分には「NOTE: As of Oct, 2013, the C files will not build on Macs but will build on Linux.」というコメントが追加されており、当時のmacOS環境でのビルドに関する既知の問題が示唆されています。これは、tzdataのビルドプロセスがプラットフォームに依存する可能性を示しています。
  4. zoneinfo.zip の生成: 最終的に、変換されたタイムゾーンデータは lib/time/zoneinfo.zip というZIPアーカイブにまとめられます。このファイルはGoのバイナリに組み込まれるか、実行時に参照されます。

zoneinfo.zip ファイルはバイナリファイルであり、その内容は直接テキストとして読むことはできません。このコミットでは、zoneinfo.zip のサイズが 374530 バイトから 374754 バイトに増加しており、新しいタイムゾーンデータが追加または更新されたことを示しています。

この更新は、Goアプリケーションが世界中の最新のタイムゾーン規則(特に夏時間の変更)に正確に対応できるようになることを意味します。

コアとなるコードの変更箇所

このコミットで変更されたファイルは以下の2つです。

  1. lib/time/update.bash
  2. lib/time/zoneinfo.zip

lib/time/update.bash の差分:

--- a/lib/time/update.bash
+++ b/lib/time/update.bash
@@ -6,9 +6,11 @@
 # This script rebuilds the time zone files using files
 # downloaded from the ICANN/IANA distribution.
 
+# NOTE: As of Oct, 2013, the C files will not build on Macs but will build on Linux.
+
 # Versions to use.
-CODE=2013c
-DATA=2013c
+CODE=2013g
+DATA=2013g
 
 set -e
 rm -rf work

lib/time/zoneinfo.zip の差分:

--- a/lib/time/zoneinfo.zip
+++ b/lib/time/zoneinfo.zip
index e9ddfff818..c9181153fa 100644
Binary files a/lib/time/zoneinfo.zip and b/lib/time/zoneinfo.zip differ

コアとなるコードの解説

lib/time/update.bash の変更

このスクリプトの変更は非常にシンプルですが、その影響は大きいです。

  • CODE=2013c から CODE=2013g
  • DATA=2013c から DATA=2013g

これらの変更は、update.bash スクリプトがIANA Time Zone Databaseのバージョン 2013g のソースコードとデータセットをダウンロードして使用するように指示します。これにより、Goのタイムゾーンデータが最新の状態に保たれ、最新のタイムゾーン規則(夏時間や標準時の変更など)が反映されるようになります。

また、追加されたコメント # NOTE: As of Oct, 2013, the C files will not build on Macs but will build on Linux. は、当時の開発環境におけるクロスプラットフォームビルドの課題を示唆しています。これは、tzdataのビルドプロセスがC言語のコンパイルを伴い、特定のOS(この場合はmacOS)で問題が発生する可能性があったことを示しています。

lib/time/zoneinfo.zip の変更

zoneinfo.zip はバイナリファイルであるため、差分は「Binary files ... differ」と表示されます。これは、ファイルの内容が変更されたことを意味し、具体的には update.bash スクリプトによって生成された新しいタイムゾーンデータがこのZIPファイルに格納されたことを示しています。ファイルサイズの増加(374530バイトから374754バイトへ)は、新しいタイムゾーン情報が追加されたか、既存の情報がより詳細になったことを裏付けています。Goの time パッケージは、この zoneinfo.zip ファイルを読み込むことで、タイムゾーンに関する正確な情報を提供します。

関連リンク

参考にした情報源リンク

# [インデックス 17768] ファイルの概要

このコミットは、Go言語の標準ライブラリ `lib/time` におけるタイムゾーンデータファイルを、2013gバージョンに更新することを目的としています。これは、タイムゾーン情報の正確性を保つために定期的に行われるメンテナンス作業の一環であり、特に夏時間(Daylight Saving Time, DST)の変更や政治的なタイムゾーン境界の調整に対応するために重要です。

## コミット

commit 158c56ef8a7149d863fda4726094978d0562eea2 Author: Rob Pike r@golang.org Date: Tue Oct 8 16:16:24 2013 -0700

lib/time: update time zone files to version 2013g
This dataset is current as of Sep 30, 2013.

Fixes #6524

R=golang-dev, minux.ma
CC=golang-dev
https://golang.org/cl/14570044

## GitHub上でのコミットページへのリンク

[https://github.com/golang/go/commit/158c56ef8a7149d863fda4726094978d0562eea2](https://github.com/golang/go/commit/158c56ef8a7149d863fda4726094978d0562eea2)

## 元コミット内容

lib/time: update time zone files to version 2013g This dataset is current as of Sep 30, 2013.

Fixes #6524

R=golang-dev, minux.ma CC=golang-dev https://golang.org/cl/14570044


## 変更の背景

タイムゾーン情報は、世界中の政府や地域によって頻繁に変更されます。これには、夏時間の開始・終了日の変更、標準時のオフセットの変更、あるいは全く新しいタイムゾーンの導入などが含まれます。これらの変更は、正確な時刻計算や日付変換を行うソフトウェアにとって非常に重要です。Go言語の `time` パッケージは、これらのタイムゾーン情報に依存しており、古いデータを使用していると、誤った時刻表示や計算結果を招く可能性があります。

このコミットは、具体的にはGoのIssue #6524を修正するために行われました。Issue #6524は、Goが使用しているタイムゾーンデータが古く、特定のタイムゾーン(例: ブラジルの夏時間変更)に対応できていないという報告でした。このため、Goのタイムゾーンデータを最新のIANA Time Zone Database (tzdata) バージョン2013gに更新する必要がありました。

## 前提知識の解説

### IANA Time Zone Database (tzdata)

IANA Time Zone Database(以前はOlson databaseとして知られていました)は、世界のタイムゾーンと夏時間(DST)の歴史的な変化を記録した、協調的な公開データベースです。このデータベースは、オペレーティングシステムやプログラミング言語(Goを含む)が正確な時刻情報を扱うための標準的な情報源として広く利用されています。tzdataは、政治的な決定や地理的な変更に応じて定期的に更新されます。

### Go言語におけるタイムゾーンの扱い

Go言語の `time` パッケージは、システムにインストールされているタイムゾーン情報、またはGo自身の `zoneinfo.zip` ファイルに含まれるタイムゾーン情報を使用して時刻を扱います。`zoneinfo.zip` は、IANA Time Zone Databaseから生成されたバイナリデータを含んでおり、Goアプリケーションがシステムに依存せずに正確なタイムゾーン情報にアクセスできるようにします。

### `lib/time/update.bash` スクリプト

`lib/time/update.bash` は、Goのタイムゾーンデータを更新するためのシェルスクリプトです。このスクリプトは、IANA Time Zone Databaseのソースコードとデータをダウンロードし、それらをGoが利用できる形式(`zoneinfo.zip`)に変換する役割を担っています。スクリプト内には、使用するtzdataの「CODE」バージョン(ソースコードのバージョン)と「DATA」バージョン(データセットのバージョン)が定義されており、これらを変更することで新しいtzdataバージョンを取り込むことができます。

## 技術的詳細

このコミットの主要な技術的変更は、Goのタイムゾーンデータ更新スクリプト `lib/time/update.bash` 内で、IANA Time Zone Databaseのバージョン指定を `2013c` から `2013g` へと変更した点です。

`update.bash` スクリプトは、以下の手順でタイムゾーンデータを更新します。

1.  **バージョン指定**: スクリプト内の `CODE` と `DATA` 変数で、ダウンロードするtzdataのバージョンを指定します。このコミットでは、これらが `2013g` に更新されました。
2.  **ダウンロード**: 指定されたバージョンのtzdataソースコードとデータファイルをIANAのFTPサーバーなどからダウンロードします。
3.  **コンパイル/変換**: ダウンロードしたデータは、Goが内部的に使用するバイナリ形式に変換されます。このプロセスには、C言語のコードをコンパイルするステップが含まれる場合があります。コミットメッセージの差分には「NOTE: As of Oct, 2013, the C files will not build on Macs but will build on Linux.」というコメントが追加されており、当時のmacOS環境でのビルドに関する既知の問題が示唆されています。これは、tzdataのビルドプロセスがプラットフォームに依存する可能性を示しています。
4.  **`zoneinfo.zip` の生成**: 最終的に、変換されたタイムゾーンデータは `lib/time/zoneinfo.zip` というZIPアーカイブにまとめられます。このファイルはGoのバイナリに組み込まれるか、実行時に参照されます。

`zoneinfo.zip` ファイルはバイナリファイルであり、その内容は直接テキストとして読むことはできません。このコミットでは、`zoneinfo.zip` のサイズが `374530` バイトから `374754` バイトに増加しており、新しいタイムゾーンデータが追加または更新されたことを示しています。

この更新は、Goアプリケーションが世界中の最新のタイムゾーン規則(特に夏時間の変更)に正確に対応できるようになることを意味します。

## コアとなるコードの変更箇所

このコミットで変更されたファイルは以下の2つです。

1.  `lib/time/update.bash`
2.  `lib/time/zoneinfo.zip`

`lib/time/update.bash` の差分:

```diff
--- a/lib/time/update.bash
+++ b/lib/time/update.bash
@@ -6,9 +6,11 @@
 # This script rebuilds the time zone files using files
 # downloaded from the ICANN/IANA distribution.
 
+# NOTE: As of Oct, 2013, the C files will not build on Macs but will build on Linux.
+
 # Versions to use.
-CODE=2013c
-DATA=2013c
+CODE=2013g
+DATA=2013g
 
 set -e
 rm -rf work

lib/time/zoneinfo.zip の差分:

--- a/lib/time/zoneinfo.zip
+++ b/lib/time/zoneinfo.zip
index e9ddfff818..c9181153fa 100644
Binary files a/lib/time/zoneinfo.zip and b/lib/time/zoneinfo.zip differ

コアとなるコードの解説

lib/time/update.bash の変更

このスクリプトの変更は非常にシンプルですが、その影響は大きいです。

  • CODE=2013c から CODE=2013g
  • DATA=2013c から DATA=2013g

これらの変更は、update.bash スクリプトがIANA Time Zone Databaseのバージョン 2013g のソースコードとデータセットをダウンロードして使用するように指示します。これにより、Goのタイムゾーンデータが最新の状態に保たれ、最新のタイムゾーン規則(夏時間や標準時の変更など)が反映されるようになります。

また、追加されたコメント # NOTE: As of Oct, 2013, the C files will not build on Macs but will build on Linux. は、当時の開発環境におけるクロスプラットフォームビルドの課題を示唆しています。これは、tzdataのビルドプロセスがC言語のコンパイルを伴い、特定のOS(この場合はmacOS)で問題が発生する可能性があったことを示しています。

lib/time/zoneinfo.zip の変更

zoneinfo.zip はバイナリファイルであるため、差分は「Binary files ... differ」と表示されます。これは、ファイルの内容が変更されたことを意味し、具体的には update.bash スクリプトによって生成された新しいタイムゾーンデータがこのZIPファイルに格納されたことを示しています。ファイルサイズの増加(374530バイトから374754バイトへ)は、新しいタイムゾーン情報が追加されたか、既存の情報がより詳細になったことを裏付けています。Goの time パッケージは、この zoneinfo.zip ファイルを読み込むことで、タイムゾーンに関する正確な情報を提供します。

関連リンク

参考にした情報源リンク