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

[インデックス 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.cryptogo.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エコシステムにとって重要な変更を反映しています。具体的には、以下の点が技術的な詳細として挙げられます。

  1. インポートパスの変更: 多くのパッケージ(特に crypto および exp 以下の実験的なパッケージ、net 関連の一部、encoding/git85patch など)が、メインのGoリポジトリから code.google.com/p/go.cryptocode.google.com/p/go.netcode.google.com/p/go.codereview といった新しいドメイン配下のサブリポジトリへ移動しました。これにより、これらのパッケージを参照する既存のGoコードは、新しいインポートパスに更新する必要が生じました。
  2. gofix による自動更新: この変更は後方互換性のないものでしたが、gofix ツールがこの移行を円滑にする役割を担いました。gofix は、古いインポートパスを使用しているコードを検出し、自動的に新しいサブリポジトリのインポートパスに書き換える機能を提供しました。これにより、開発者は手動での大規模なコード修正を避けることができました。
  3. go get によるパッケージ取得の必要性: サブリポジトリに移動したパッケージは、Goの標準ライブラリの一部ではなくなったため、それらを使用するプロジェクトは、初めてビルドする際に go get コマンドを使って明示的にこれらのパッケージをダウンロードし、ローカルにインストールする必要が生じました。これは、依存関係管理の初期段階における重要なステップでした。
  4. ドキュメントの重要性: このコミットは、これらの変更を開発者に周知するためのドキュメント更新であり、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パッケージのサブリポジトリへの移行に関する重要なセクションを追加しています。

  1. 見出しと説明: This weekly snapshot relocates many packages to sub-repositories of the main Go repository. These are the old and new import paths: この行は、今回の週次スナップショットの主要な変更点として、多くのパッケージがメインのGoリポジトリからサブリポジトリへ再配置されたことを明確に示し、古いインポートパスと新しいインポートパスの対応表が続くことを予告しています。

  2. インポートパスの対応表: 続くリストは、移動した各パッケージの「古いインポートパス」(左側)と「新しいサブリポジトリのインポートパス」(右側)をタブ区切りで示しています。

    • crypto/bcrypt から code.google.com/p/go.crypto/bcrypt のように、crypto 関連のパッケージが go.crypto サブリポジトリへ移動したことが示されています。
    • exp/sshnet/dictnet/websocketexp/spdy など、ネットワーク関連や実験的なパッケージが go.net サブリポジトリへ移動したことが示されています。
    • encoding/git85patch といったコードレビュー関連のパッケージが go.codereview サブリポジトリへ移動したことが示されています。 この対応表は、開発者が自身のコードベースでインポートパスを更新する際に参照するための具体的な情報を提供します。
  3. gofixgo 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リリースに向けた大規模なパッケージ再編において、開発者がスムーズに移行できるよう、必要な情報とツール(gofixgo get)の使用方法を簡潔かつ明確に伝える役割を果たしています。

関連リンク

参考にした情報源リンク