[インデックス 11488] ファイルの概要
このコミットは、Go言語の公式開発ドキュメントの一部である doc/devel/weekly.html
ファイルを更新するものです。このファイルは、Goプロジェクトの週次スナップショットに関する重要な変更点や注意事項を開発者に伝える役割を担っています。具体的には、Goパッケージのサブリポジトリへの再配置に関する情報が追記されています。
コミット
このコミットは、Go言語の多くのパッケージがメインリポジトリからサブリポジトリへ再配置されたことに関する情報を、週次スナップショットのドキュメント (doc/devel/weekly.html
) に追加するものです。これにより、開発者は新しいインポートパスと、go get
コマンドによるパッケージの取得方法について知ることができます。また、gofix
ツールがこれらのインポートパスの更新を自動的に行うことも明記されています。
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/2ea25e240ef4a3e20be35c3ccdf5a3813c8ecd36
元コミット内容
doc: update weekly snapshot notes with subrepo changes
R=golang-dev, dsymonds
CC=golang-dev
https://golang.org/cl/5599051
変更の背景
この変更は、2012年3月のGo 1リリースに向けて行われた大規模なパッケージ再編の一環です。Go 1の目標の一つは、言語とそのコアライブラリの安定した基盤を確立することでした。これには、パッケージ階層の大幅な再編成と多数のAPI変更が含まれていました。
Goチームは、メインのGoリポジトリの肥大化を防ぎ、特定のパッケージの開発をより独立して進めるために、一部のパッケージを「サブリポジトリ」として分離することを決定しました。これにより、メインのGoディストリビューションのサイズを抑えつつ、これらのパッケージが独自の開発サイクルを持つことが可能になります。このコミットは、その変更が開発者に適切に伝わるように、ドキュメントを更新するものです。
前提知識の解説
- Go言語のパッケージ管理: Go言語では、コードはパッケージとして組織され、
import
ステートメントによって他のパッケージを参照します。パッケージは通常、ファイルシステムのディレクトリ構造に対応しており、そのパスがインポートパスとなります。 - Go 1リリース: Go 1は、Go言語の最初の安定版リリースであり、後方互換性を保証する重要なマイルストーンでした。このリリースでは、多くのAPIが整理され、一部のパッケージが再配置されました。
- サブリポジトリ (Sub-repositories): Go言語におけるサブリポジトリとは、メインのGoプロジェクトとは別に管理されるが、Goエコシステムの一部として認識される独立したGitリポジトリのことです。これらは通常、
go.crypto
やgo.net
のように、go.
プレフィックスを持つドメインの下にホストされます(例:code.google.com/p/go.crypto/bcrypt
)。これにより、メインのGoディストリビューションに含めるには大きすぎる、あるいは開発サイクルが異なるパッケージを効率的に管理できます。 gofix
ツール:gofix
は、Go言語のツールチェーンに含まれるユーティリティで、Goのソースコードを自動的に書き換えて、APIの変更やパッケージの移動などの後方互換性のない変更に対応させるために使用されました。Go 1リリース時の大規模な変更において、開発者が手動でコードを修正する手間を大幅に削減する上で不可欠なツールでした。go get
コマンド:go get
は、Goのパッケージをリモートリポジトリからダウンロードし、インストールするためのコマンドです。サブリポジトリに移動したパッケージを使用するには、このコマンドを使って明示的に取得する必要があります。
技術的詳細
このコミットで更新されたドキュメントは、Go 1リリースに向けて行われたパッケージのサブリポジトリへの移行という、Goエコシステムにとって重要な変更を反映しています。具体的には、以下の点が技術的な詳細として挙げられます。
- インポートパスの変更: 多くのパッケージ(特に
crypto
およびexp
以下の実験的なパッケージ、net
関連の一部、encoding/git85
、patch
など)が、メインのGoリポジトリからcode.google.com/p/go.crypto
、code.google.com/p/go.net
、code.google.com/p/go.codereview
といった新しいドメイン配下のサブリポジトリへ移動しました。これにより、これらのパッケージを参照する既存のGoコードは、新しいインポートパスに更新する必要が生じました。 gofix
による自動更新: この変更は後方互換性のないものでしたが、gofix
ツールがこの移行を円滑にする役割を担いました。gofix
は、古いインポートパスを使用しているコードを検出し、自動的に新しいサブリポジトリのインポートパスに書き換える機能を提供しました。これにより、開発者は手動での大規模なコード修正を避けることができました。go get
によるパッケージ取得の必要性: サブリポジトリに移動したパッケージは、Goの標準ライブラリの一部ではなくなったため、それらを使用するプロジェクトは、初めてビルドする際にgo get
コマンドを使って明示的にこれらのパッケージをダウンロードし、ローカルにインストールする必要が生じました。これは、依存関係管理の初期段階における重要なステップでした。- ドキュメントの重要性: このコミットは、これらの変更を開発者に周知するためのドキュメント更新であり、Goエコシステムにおける重要な移行期における情報提供の役割を果たしています。
コアとなるコードの変更箇所
doc/devel/weekly.html
ファイルに以下の28行が追加されています。
--- a/doc/devel/weekly.html
+++ b/doc/devel/weekly.html
@@ -24,6 +24,34 @@ Error variables in the archive/tar, archive/zip, compress/gzip, compress/zlib,\
and crypto/bcrypt packages have been renamed from FooError to ErrFoo. \
There is no gofix, but the compiler will flag code that needs updating.\
\
+This weekly snapshot relocates many packages to sub-repositories of the main \
+Go repository. These are the old and new import paths:\
+\
+\tcrypto/bcrypt code.google.com/p/go.crypto/bcrypt\
+\tcrypto/blowfish code.google.com/p/go.crypto/blowfish\
+\tcrypto/cast5 code.google.com/p/go.crypto/cast5\
+\tcrypto/md4 code.google.com/p/go.crypto/md4\
+\tcrypto/ocsp code.google.com/p/go.crypto/ocsp\
+\tcrypto/openpgp code.google.com/p/go.crypto/openpgp\
+\tcrypto/openpgp/armor code.google.com/p/go.crypto/openpgp/armor\
+\tcrypto/openpgp/elgamal code.google.com/p/go.crypto/openpgp/elgamal
+\tcrypto/openpgp/errors code.google.com/p/go.crypto/openpgp/errors
+\tcrypto/openpgp/packet code.google.com/p/go.crypto/openpgp/packet
+\tcrypto/openpgp/s2k code.google.com/p/go.crypto/openpgp/s2k\
+\tcrypto/ripemd160 code.google.com/p/go.crypto/ripemd160\
+\tcrypto/twofish code.google.com/p/go.crypto/twofish\
+\tcrypto/xtea code.google.com/p/go.crypto/xtea
+\texp/ssh code.google.com/p/go.crypto/ssh
+\tnet/dict code.google.com/p/go.net/dict
+\tnet/websocket code.google.com/p/go.net/websocket
+\texp/spdy code.google.com/p/go.net/spdy
+\tencoding/git85 code.google.com/p/go.codereview/git85
+\tpatch code.google.com/p/go.codereview/patch
+\n+Gofix will update imports of these packages to use the new import paths.\n+Installations that depend on these packages will need to install them using a\n+\'go get\' command.\n+\n Other changes:\
* 6c, 8c: make floating point code NaN-safe.\
* 6l, 8l: remove unused macro definition (thanks Shenghou Ma).\
コアとなるコードの解説
追加されたコードは、doc/devel/weekly.html
ドキュメントに、Goパッケージのサブリポジトリへの移行に関する重要なセクションを追加しています。
-
見出しと説明:
This weekly snapshot relocates many packages to sub-repositories of the main Go repository. These are the old and new import paths:
この行は、今回の週次スナップショットの主要な変更点として、多くのパッケージがメインのGoリポジトリからサブリポジトリへ再配置されたことを明確に示し、古いインポートパスと新しいインポートパスの対応表が続くことを予告しています。 -
インポートパスの対応表: 続くリストは、移動した各パッケージの「古いインポートパス」(左側)と「新しいサブリポジトリのインポートパス」(右側)をタブ区切りで示しています。
crypto/bcrypt
からcode.google.com/p/go.crypto/bcrypt
のように、crypto
関連のパッケージがgo.crypto
サブリポジトリへ移動したことが示されています。exp/ssh
、net/dict
、net/websocket
、exp/spdy
など、ネットワーク関連や実験的なパッケージがgo.net
サブリポジトリへ移動したことが示されています。encoding/git85
、patch
といったコードレビュー関連のパッケージがgo.codereview
サブリポジトリへ移動したことが示されています。 この対応表は、開発者が自身のコードベースでインポートパスを更新する際に参照するための具体的な情報を提供します。
-
gofix
とgo get
に関する指示: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 'go get' command.
これらの行は、開発者にとって非常に重要な指示です。gofix
ツールが、これらのパッケージのインポートパスを自動的に新しいものに更新してくれることを伝えています。これにより、手動での修正作業が不要になることを示唆しています。- これらのパッケージに依存する環境では、
go get
コマンドを使用して新しい場所からパッケージをインストールする必要があることを明確に指示しています。これは、サブリポジトリのパッケージが標準ライブラリとは異なる方法で取得されることを意味します。
この追加されたセクションは、Go 1リリースに向けた大規模なパッケージ再編において、開発者がスムーズに移行できるよう、必要な情報とツール(gofix
と go get
)の使用方法を簡潔かつ明確に伝える役割を果たしています。
関連リンク
- Go CL 5599051: https://golang.org/cl/5599051
参考にした情報源リンク
- go.dev (Go 1 Release Notes): https://go.dev/doc/go1
- go.dev (Go 1 and the Future of Go Programs): https://go.dev/blog/go1
- go.dev (GoFix): https://go.dev/blog/gofix