[インデックス 11392] ファイルの概要
このコミットは、Go言語の最初の安定版リリースであるGo 1のドキュメントファイル doc/go1.html
および doc/go1.tmpl
に変更を加えています。これらのファイルは、Go 1リリースにおける重要な変更点、特に標準ライブラリの再編成に関する情報を提供するためのものです。具体的には、一部のパッケージがメインのGoリポジトリから独立した「サブリポジトリ」へ移動したことについて、その詳細とユーザーへの影響を説明するセクションが追加されています。
コミット
このコミットは、Go 1リリースの一環として、一部の標準ライブラリパッケージを独立したサブリポジトリに移行する作業を反映しています。これにより、Goのメインリポジトリの肥大化を防ぎ、特定のパッケージの独立した開発とバージョン管理を可能にすることを目的としています。コミットは、これらの変更がユーザーに与える影響、特にインポートパスの変更と gofix
ツールによる自動更新の必要性について、公式ドキュメントに追記しています。
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/7eaad5e640001333013f497c8fd558418f9d3f85
元コミット内容
go1: sub-repositories
R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/5569065
変更の背景
Go言語は、2012年3月に最初の安定版リリースであるGo 1を迎えました。Go 1は、言語仕様と標準ライブラリの安定性を保証し、後方互換性を維持することを約束した画期的なリリースでした。この安定化プロセスの一環として、Goチームは標準ライブラリの構造を見直し、メインのGoリポジトリの肥大化を防ぎ、よりモジュール化されたエコシステムを構築する必要性を認識しました。
その結果、利用頻度が比較的低い、あるいは特定の目的(例: 暗号化、ネットワークプロトコル)に特化した一部のパッケージを、メインリポジトリから切り離し、独立した「サブリポジトリ」として管理する方針が決定されました。これにより、メインのGoディストリビューションのサイズを小さく保ちつつ、これらのパッケージがGoのリリースサイクルとは独立して進化できるようになります。
このコミットは、このサブリポジトリへの移行という重要な変更を、Go 1の公式ドキュメントに反映させるために行われました。ユーザーが既存のコードをGo 1に移行する際に、どのパッケージのインポートパスが変更されたのか、そしてどのように対応すべきかを明確に伝えることが目的です。
前提知識の解説
Go 1リリース
Go 1は、Go言語にとって非常に重要なマイルストーンとなるリリースです。このリリース以降、Go言語は「Go 1互換性保証」という原則を導入し、Go 1で書かれたプログラムは将来のGoのバージョンでも動作し続けることが保証されました。これにより、Go言語はエンタープライズレベルのアプリケーション開発にも適した、安定したプラットフォームとしての地位を確立しました。
Goのパッケージ管理とインポートパス
Go言語では、コードはパッケージとして組織され、import
ステートメントによって他のパッケージの機能を利用します。Goの初期のパッケージ管理は、GOPATH
環境変数に依存していました。GOPATH
は、Goのソースコード、コンパイル済みバイナリ、パッケージが配置されるワークスペースのルートディレクトリを指定します。パッケージは、GOPATH
内のディレクトリ構造に基づいてインポートパスが決定されます(例: github.com/user/repo/package
)。
gofix
ツール
gofix
は、Go 1リリースに伴うAPIの変更や言語仕様の微調整に対応するために提供されたコマンドラインツールです。Go 1では、後方互換性を保証するために多くの努力が払われましたが、それでも一部のAPIはより良い設計のために変更されました。gofix
は、古いGoのバージョンで書かれたコードを自動的にスキャンし、Go 1の新しいAPIや慣習に合わせて修正する機能を提供しました。これにより、開発者は手動での大規模なコード修正作業を大幅に削減できました。
サブリポジトリ (Sub-repositories)
Goにおけるサブリポジトリとは、Goのメインリポジトリ(code.google.com/p/go/
、後に github.com/golang/go
)から切り離され、独立したバージョン管理と開発が行われるGoパッケージのリポジトリ群を指します。これらは通常、code.google.com/p/go.crypto
や code.google.com/p/go.net
のような特定のドメインの下に配置され、メインのGoディストリビューションには含まれません。ユーザーがこれらのパッケージを使用するには、go get
コマンドを使って明示的にダウンロードし、インストールする必要があります。サブリポジトリの導入は、Goエコシステムのモジュール化と、各パッケージの独立した進化を促進するための戦略でした。
技術的詳細
このコミットの主要な技術的変更は、Go 1のドキュメントにサブリポジトリへの移行に関する情報が追加されたことです。具体的には、以下の点が重要です。
-
インポートパスの変更: 多くのパッケージが、
crypto/bcrypt
のような標準ライブラリ内のパスから、code.google.com/p/go.crypto/bcrypt
のような新しい外部リポジトリのパスに変更されました。これは、既存のGoプログラムがGo 1に移行する際に、これらのインポートパスを更新する必要があることを意味します。変更されたパッケージのリストは以下の通りです。
Old Path New Path crypto/bcrypt
code.google.com/p/go.crypto/bcrypt
crypto/blowfish
code.google.com/p/go.crypto/blowfish
crypto/cast5
code.google.com/p/go.crypto/cast5
crypto/md4
code.google.com/p/go.crypto/md4
crypto/ocsp
code.google.com/p/go.crypto/ocsp
crypto/openpgp
code.google.com/p/go.crypto/openpgp
crypto/openpgp/armor
code.google.com/p/go.crypto/openpgp/armor
crypto/openpgp/elgamal
code.google.com/p/go.crypto/openpgp/elgamal
crypto/openpgp/errors
code.google.com/p/go.crypto/openpgp/errors
crypto/openpgp/packet
code.google.com/p/go.crypto/openpgp/packet
crypto/openpgp/s2k
code.google.com/p/go.crypto/openpgp/s2k
crypto/ripemd160
code.google.com/p/go.crypto/ripemd160
crypto/twofish
code.google.com/p/go.crypto/twofish
crypto/xtea
code.google.com/p/go.crypto/xtea
exp/ssh
code.google.com/p/go.crypto/ssh
net/dict
code.google.com/p/go.net/dict
net/websocket
code.google.com/p/go.net/websocket
exp/spdy
code.google.com/p/go.net/spdy
encoding/git85
code.google.com/p/go.codereview/git85
patch
code.google.com/p/go.codereview/patch
-
gofix
による自動更新: ドキュメントには、「Gofix will update imports of these packages to use the new import paths.」と明記されており、gofix
ツールがこれらのインポートパスの変更を自動的に処理できることが示されています。これは、開発者が手動で多数のファイルを修正する手間を省く上で非常に重要でした。 -
go install
の必要性: サブリポジトリに移動したパッケージは、Goのメインディストリビューションには含まれなくなります。そのため、これらのパッケージに依存するアプリケーションをビルドする前に、ユーザーはgo install
コマンド(またはgo get
コマンド)を使用して、これらのパッケージを明示的にダウンロードし、ローカルのGOPATH
にインストールする必要があることが説明されています。
この変更は、Goの標準ライブラリの構造をよりクリーンにし、メインリポジトリの管理を簡素化するとともに、特定の機能領域のパッケージが独立して進化できる柔軟性を提供しました。
コアとなるコードの変更箇所
このコミットは、主にGo 1のリリースノートまたはドキュメントを構成するHTMLファイルとテンプレートファイルに変更を加えています。
doc/go1.html
と doc/go1.tmpl
の両方で、以下の変更が行われています。
-
TODOコメントの削除:
- <br> - <font color="red">TODO: gofix should also handle packages that move to subrepos.</font>
この行は、
gofix
がサブリポジトリに移動したパッケージを処理すべきだというTODOコメントでした。今回のコミットでサブリポジトリに関する情報が追加され、gofix
が実際にその処理を行うことが明記されたため、このTODOは不要となり削除されました。 -
「Packages moving to subrepositories」セクションの追加:
<h3>Packages moving to subrepositories</h3>
の見出しの下に、以下のHTML構造が追加されました。<p> Go 1 has moved a number of packages into sub-repositories of <a href="http://code.google.com/p/go/">the main Go repository</a>. This table lists the old and new import paths: </p> <table class="codetable" frame="border" summary="Sub-repositories"> <colgroup align="left" width="40%"></colgroup> <colgroup align="left" width="60%"></colgroup> <tr> <th align="left">Old</th> <th align="left">New</th> </tr> <tr> <td colspan="2"><hr></td> </tr> <!-- ここに各パッケージの旧パスと新パスの<tr>要素が続く --> <tr><td>crypto/bcrypt</td> <td>code.google.com/p/go.crypto/bcrypt</tr> ... <tr><td>patch</td> <td>code.google.com/p/go.codereview/patch</tr> </table> <p> <em>Updating</em>: Gofix will update imports of these packages to use the new import paths. Installations that depend on these packages will need to install them using a <code>go install</code> command. </p>
この追加されたセクションは、サブリポジトリへの移行の概要、旧パスと新パスの対応表、そしてユーザーがコードを更新するために
gofix
を使用し、必要に応じてgo install
でパッケージをインストールする必要があることを説明しています。
コアとなるコードの解説
このコミットにおける「コアとなるコード」とは、Go 1の公式ドキュメントに追加されたHTMLコンテンツそのものです。
-
TODOコメントの削除: これは、サブリポジトリへの移行に関する
gofix
の対応が完了したことを示唆しています。以前は未解決の課題として残されていたものが、このコミットによってドキュメントに反映される形で解決されたことを意味します。 -
サブリポジトリセクションの追加:
<p>
タグで囲まれた最初の段落は、Go 1で一部のパッケージがメインリポジトリからサブリポジトリへ移動したという事実を簡潔に述べています。メインのGoリポジトリへのリンクも提供されています。<table class="codetable" ...>
要素は、この変更の最も重要な部分です。旧インポートパスと新インポートパスを明確に対応付けた表形式で提示することで、開発者が自分のコードベースでどのインポートパスを更新する必要があるかを一目で確認できるようにしています。この表は、Go 1への移行作業における重要なリファレンスとなります。- 最後の
<p>
タグで囲まれた段落は、ユーザーがこの変更にどのように対応すべきか、具体的な手順を説明しています。Gofix will update imports of these packages to use the new import paths.
:gofix
ツールがインポートパスの変更を自動的に処理してくれることを保証し、開発者の負担を軽減します。Installations that depend on these packages will need to install them using a <code>go install</code> command.
:サブリポジトリに移動したパッケージは、Goの標準インストールには含まれないため、それらに依存するプロジェクトはgo install
コマンドを使って明示的にダウンロード・インストールする必要があることを明確に指示しています。
これらの変更は、Go 1のリリースにおける重要な構造的変更をユーザーに伝え、スムーズな移行を支援するための、非常に実用的なドキュメントの更新です。
関連リンク
- Go 1 Release Notes (公式ドキュメント): このコミットが変更を加えているドキュメントそのもの。Go 1のリリース時に公開された最終版を参照すると、この変更が全体の中でどのように位置づけられているか理解できます。
- https://go.dev/doc/go1 (現在のGo公式ドキュメントのGo 1リリースノート)
- Go言語の公式ブログ (Go 1リリースに関するアナウンス):
- https://go.dev/blog/go1 (The Go Programming Language Blog: Go 1 is released)
参考にした情報源リンク
- コミット情報から読み取った内容
- Go 1リリースに関する一般的な知識
gofix
ツールに関する一般的な知識- Go言語のサブリポジトリに関する一般的な知識
- https://go.dev/doc/go1 (Go 1 Release Notes)
- https://go.dev/blog/go1 (The Go Programming Language Blog: Go 1 is released)
- https://go.dev/cmd/go/#hdr-Download_and_install_packages_and_dependencies (Go Command Documentation: go get/install)
- https://go.dev/blog/gofix (The Go Programming Language Blog: gofix: A tool for updating Go programs)# [インデックス 11392] ファイルの概要
このコミットは、Go言語の最初の安定版リリースであるGo 1のドキュメントファイル doc/go1.html
および doc/go1.tmpl
に変更を加えています。これらのファイルは、Go 1リリースにおける重要な変更点、特に標準ライブラリの再編成に関する情報を提供するためのものです。具体的には、一部のパッケージがメインのGoリポジトリから独立した「サブリポジトリ」へ移動したことについて、その詳細とユーザーへの影響を説明するセクションが追加されています。
コミット
このコミットは、Go 1リリースの一環として、一部の標準ライブラリパッケージを独立したサブリポジトリに移行する作業を反映しています。これにより、Goのメインリポジトリの肥大化を防ぎ、特定のパッケージの独立した開発とバージョン管理を可能にすることを目的としています。コミットは、これらの変更がユーザーに与える影響、特にインポートパスの変更と gofix
ツールによる自動更新の必要性について、公式ドキュメントに追記しています。
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/7eaad5e640001333013f497c8fd558418f9d3f85
元コミット内容
go1: sub-repositories
R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/5569065
変更の背景
Go言語は、2012年3月に最初の安定版リリースであるGo 1を迎えました。Go 1は、言語仕様と標準ライブラリの安定性を保証し、後方互換性を維持することを約束した画期的なリリースでした。この安定化プロセスの一環として、Goチームは標準ライブラリの構造を見直し、メインのGoリポジトリの肥大化を防ぎ、よりモジュール化されたエコシステムを構築する必要性を認識しました。
その結果、利用頻度が比較的低い、あるいは特定の目的(例: 暗号化、ネットワークプロトコル)に特化した一部のパッケージを、メインリポジトリから切り離し、独立した「サブリポジリ」として管理する方針が決定されました。これにより、メインのGoディストリビューションのサイズを小さく保ちつつ、これらのパッケージがGoのリリースサイクルとは独立して進化できるようになります。
このコミットは、このサブリポジトリへの移行という重要な変更を、Go 1の公式ドキュメントに反映させるために行われました。ユーザーが既存のコードをGo 1に移行する際に、どのパッケージのインポートパスが変更されたのか、そしてどのように対応すべきかを明確に伝えることが目的です。
前提知識の解説
Go 1リリース
Go 1は、Go言語にとって非常に重要なマイルストーンとなるリリースです。このリリース以降、Go言語は「Go 1互換性保証」という原則を導入し、Go 1で書かれたプログラムは将来のGoのバージョンでも動作し続けることが保証されました。これにより、Go言語はエンタープライズレベルのアプリケーション開発にも適した、安定したプラットフォームとしての地位を確立しました。
Goのパッケージ管理とインポートパス
Go言語では、コードはパッケージとして組織され、import
ステートメントによって他のパッケージの機能を利用します。Goの初期のパッケージ管理は、GOPATH
環境変数に依存していました。GOPATH
は、Goのソースコード、コンパイル済みバイナリ、パッケージが配置されるワークスペースのルートディレクトリを指定します。パッケージは、GOPATH
内のディレクトリ構造に基づいてインポートパスが決定されます(例: github.com/user/repo/package
)。
gofix
ツール
gofix
は、Go 1リリースに伴うAPIの変更や言語仕様の微調整に対応するために提供されたコマンドラインツールです。Go 1では、後方互換性を保証するために多くの努力が払われましたが、それでも一部のAPIはより良い設計のために変更されました。gofix
は、古いGoのバージョンで書かれたコードを自動的にスキャンし、Go 1の新しいAPIや慣習に合わせて修正する機能を提供しました。これにより、開発者は手動での大規模なコード修正作業を大幅に削減できました。
サブリポジトリ (Sub-repositories)
Goにおけるサブリポジトリとは、Goのメインリポジトリ(code.google.com/p/go/
、後に github.com/golang/go
)から切り離され、独立したバージョン管理と開発が行われるGoパッケージのリポジトリ群を指します。これらは通常、code.google.com/p/go.crypto
や code.google.com/p/go.net
のような特定のドメインの下に配置され、メインのGoディストリビューションには含まれません。ユーザーがこれらのパッケージを使用するには、go get
コマンドを使って明示的にダウンロードし、インストールする必要があります。サブリポジトリの導入は、Goエコシステムのモジュール化と、各パッケージの独立した進化を促進するための戦略でした。
技術的詳細
このコミットの主要な技術的変更は、Go 1のドキュメントにサブリポジトリへの移行に関する情報が追加されたことです。具体的には、以下の点が重要です。
-
インポートパスの変更: 多くのパッケージが、
crypto/bcrypt
のような標準ライブラリ内のパスから、code.google.com/p/go.crypto/bcrypt
のような新しい外部リポジトリのパスに変更されました。これは、既存のGoプログラムがGo 1に移行する際に、これらのインポートパスを更新する必要があることを意味します。変更されたパッケージのリストは以下の通りです。
Old Path New Path crypto/bcrypt
code.google.com/p/go.crypto/bcrypt
crypto/blowfish
code.google.com/p/go.crypto/blowfish
crypto/cast5
code.google.com/p/go.crypto/cast5
crypto/md4
code.google.com/p/go.crypto/md4
crypto/ocsp
code.google.com/p/go.crypto/ocsp
crypto/openpgp
code.google.com/p/go.crypto/openpgp
crypto/openpgp/armor
code.google.com/p/go.crypto/openpgp/armor
crypto/openpgp/elgamal
code.google.com/p/go.crypto/openpgp/elgamal
crypto/openpgp/errors
code.google.com/p/go.crypto/openpgp/errors
crypto/openpgp/packet
code.google.com/p/go.crypto/openpgp/packet
crypto/openpgp/s2k
code.google.com/p/go.crypto/openpgp/s2k
crypto/ripemd160
code.google.com/p/go.crypto/ripemd160
crypto/twofish
code.google.com/p/go.crypto/twofish
crypto/xtea
code.google.com/p/go.crypto/xtea
exp/ssh
code.google.com/p/go.crypto/ssh
net/dict
code.google.com/p/go.net/dict
net/websocket
code.google.com/p/go.net/websocket
exp/spdy
code.google.com/p/go.net/spdy
encoding/git85
code.google.com/p/go.codereview/git85
patch
code.google.com/p/go.codereview/patch
-
gofix
による自動更新: ドキュメントには、「Gofix will update imports of these packages to use the new import paths.」と明記されており、gofix
ツールがこれらのインポートパスの変更を自動的に処理できることが示されています。これは、開発者が手動で多数のファイルを修正する手間を省く上で非常に重要でした。 -
go install
の必要性: サブリポジトリに移動したパッケージは、Goのメインディストリビューションには含まれなくなります。そのため、これらのパッケージに依存するアプリケーションをビルドする前に、ユーザーはgo install
コマンド(またはgo get
コマンド)を使用して、これらのパッケージを明示的にダウンロードし、ローカルのGOPATH
にインストールする必要があることが説明されています。
この変更は、Goの標準ライブラリの構造をよりクリーンにし、メインリポジトリの管理を簡素化するとともに、特定の機能領域のパッケージが独立して進化できる柔軟性を提供しました。
コアとなるコードの変更箇所
このコミットは、主にGo 1のリリースノートまたはドキュメントを構成するHTMLファイルとテンプレートファイルに変更を加えています。
doc/go1.html
と doc/go1.tmpl
の両方で、以下の変更が行われています。
-
TODOコメントの削除:
- <br> - <font color="red">TODO: gofix should also handle packages that move to subrepos.</font>
この行は、
gofix
がサブリポジトリに移動したパッケージを処理すべきだというTODOコメントでした。今回のコミットでサブリポジトリに関する情報が追加され、gofix
が実際にその処理を行うことが明記されたため、このTODOは不要となり削除されました。 -
「Packages moving to subrepositories」セクションの追加:
<h3>Packages moving to subrepositories</h3>
の見出しの下に、以下のHTML構造が追加されました。<p> Go 1 has moved a number of packages into sub-repositories of <a href="http://code.google.com/p/go/">the main Go repository</a>. This table lists the old and new import paths: </p> <table class="codetable" frame="border" summary="Sub-repositories"> <colgroup align="left" width="40%"></colgroup> <colgroup align="left" width="60%"></colgroup> <tr> <th align="left">Old</th> <th align="left">New</th> </tr> <tr> <td colspan="2"><hr></td> </tr> <!-- ここに各パッケージの旧パスと新パスの<tr>要素が続く --> <tr><td>crypto/bcrypt</td> <td>code.google.com/p/go.crypto/bcrypt</tr> ... <tr><td>patch</td> <td>code.google.com/p/go.codereview/patch</tr> </table> <p> <em>Updating</em>: Gofix will update imports of these packages to use the new import paths. Installations that depend on these packages will need to install them using a <code>go install</code> command. </p>
この追加されたセクションは、サブリポジトリへの移行の概要、旧パスと新パスの対応表、そしてユーザーがコードを更新するために
gofix
を使用し、必要に応じてgo install
でパッケージをインストールする必要があることを説明しています。
コアとなるコードの解説
このコミットにおける「コアとなるコード」とは、Go 1の公式ドキュメントに追加されたHTMLコンテンツそのものです。
-
TODOコメントの削除: これは、サブリポジトリへの移行に関する
gofix
の対応が完了したことを示唆しています。以前は未解決の課題として残されていたものが、このコミットによってドキュメントに反映される形で解決されたことを意味します。 -
サブリポジトリセクションの追加:
<p>
タグで囲まれた最初の段落は、Go 1で一部のパッケージがメインリポジトリからサブリポジトリへ移動したという事実を簡潔に述べています。メインのGoリポジトリへのリンクも提供されています。<table class="codetable" ...>
要素は、この変更の最も重要な部分です。旧インポートパスと新インポートパスを明確に対応付けた表形式で提示することで、開発者が自分のコードベースでどのインポートパスを更新する必要があるかを一目で確認できるようにしています。この表は、Go 1への移行作業における重要なリファレンスとなります。- 最後の
<p>
タグで囲まれた段落は、ユーザーがこの変更にどのように対応すべきか、具体的な手順を説明しています。Gofix will update imports of these packages to use the new import paths.
:gofix
ツールがインポートパスの変更を自動的に処理してくれることを保証し、開発者の負担を軽減します。Installations that depend on these packages will need to install them using a <code>go install</code> command.
:サブリポジトリに移動したパッケージは、Goの標準インストールには含まれないため、それらに依存するプロジェクトはgo install
コマンドを使って明示的にダウンロード・インストールする必要があることを明確に指示しています。
これらの変更は、Go 1のリリースにおける重要な構造的変更をユーザーに伝え、スムーズな移行を支援するための、非常に実用的なドキュメントの更新です。
関連リンク
- Go 1 Release Notes (公式ドキュメント): このコミットが変更を加えているドキュメントそのもの。Go 1のリリース時に公開された最終版を参照すると、この変更が全体の中でどのように位置づけられているか理解できます。
- https://go.dev/doc/go1 (現在のGo公式ドキュメントのGo 1リリースノート)
- Go言語の公式ブログ (Go 1リリースに関するアナウンス):
- https://go.dev/blog/go1 (The Go Programming Language Blog: Go 1 is released)
参考にした情報源リンク
- コミット情報から読み取った内容
- Go 1リリースに関する一般的な知識
gofix
ツールに関する一般的な知識- Go言語のサブリポジトリに関する一般的な知識
- https://go.dev/doc/go1 (Go 1 Release Notes)
- https://go.dev/blog/go1 (The Go Programming Language Blog: Go 1 is released)
- https://go.dev/cmd/go/#hdr-Download_and_install_packages_and_dependencies (Go Command Documentation: go get/install)
- https://go.dev/blog/gofix (The Go Programming Language Blog: gofix: A tool for updating Go programs)