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

[インデックス 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.cryptocode.google.com/p/go.net のような特定のドメインの下に配置され、メインのGoディストリビューションには含まれません。ユーザーがこれらのパッケージを使用するには、go get コマンドを使って明示的にダウンロードし、インストールする必要があります。サブリポジトリの導入は、Goエコシステムのモジュール化と、各パッケージの独立した進化を促進するための戦略でした。

技術的詳細

このコミットの主要な技術的変更は、Go 1のドキュメントにサブリポジトリへの移行に関する情報が追加されたことです。具体的には、以下の点が重要です。

  1. インポートパスの変更: 多くのパッケージが、crypto/bcrypt のような標準ライブラリ内のパスから、code.google.com/p/go.crypto/bcrypt のような新しい外部リポジトリのパスに変更されました。これは、既存のGoプログラムがGo 1に移行する際に、これらのインポートパスを更新する必要があることを意味します。

    変更されたパッケージのリストは以下の通りです。

    Old PathNew Path
    crypto/bcryptcode.google.com/p/go.crypto/bcrypt
    crypto/blowfishcode.google.com/p/go.crypto/blowfish
    crypto/cast5code.google.com/p/go.crypto/cast5
    crypto/md4code.google.com/p/go.crypto/md4
    crypto/ocspcode.google.com/p/go.crypto/ocsp
    crypto/openpgpcode.google.com/p/go.crypto/openpgp
    crypto/openpgp/armorcode.google.com/p/go.crypto/openpgp/armor
    crypto/openpgp/elgamalcode.google.com/p/go.crypto/openpgp/elgamal
    crypto/openpgp/errorscode.google.com/p/go.crypto/openpgp/errors
    crypto/openpgp/packetcode.google.com/p/go.crypto/openpgp/packet
    crypto/openpgp/s2kcode.google.com/p/go.crypto/openpgp/s2k
    crypto/ripemd160code.google.com/p/go.crypto/ripemd160
    crypto/twofishcode.google.com/p/go.crypto/twofish
    crypto/xteacode.google.com/p/go.crypto/xtea
    exp/sshcode.google.com/p/go.crypto/ssh
    net/dictcode.google.com/p/go.net/dict
    net/websocketcode.google.com/p/go.net/websocket
    exp/spdycode.google.com/p/go.net/spdy
    encoding/git85code.google.com/p/go.codereview/git85
    patchcode.google.com/p/go.codereview/patch
  2. gofix による自動更新: ドキュメントには、「Gofix will update imports of these packages to use the new import paths.」と明記されており、gofix ツールがこれらのインポートパスの変更を自動的に処理できることが示されています。これは、開発者が手動で多数のファイルを修正する手間を省く上で非常に重要でした。

  3. go install の必要性: サブリポジトリに移動したパッケージは、Goのメインディストリビューションには含まれなくなります。そのため、これらのパッケージに依存するアプリケーションをビルドする前に、ユーザーは go install コマンド(または go get コマンド)を使用して、これらのパッケージを明示的にダウンロードし、ローカルの GOPATH にインストールする必要があることが説明されています。

この変更は、Goの標準ライブラリの構造をよりクリーンにし、メインリポジトリの管理を簡素化するとともに、特定の機能領域のパッケージが独立して進化できる柔軟性を提供しました。

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

このコミットは、主にGo 1のリリースノートまたはドキュメントを構成するHTMLファイルとテンプレートファイルに変更を加えています。

doc/go1.htmldoc/go1.tmpl の両方で、以下の変更が行われています。

  1. TODOコメントの削除:

    - <br>
    - <font color="red">TODO: gofix should also handle packages that move to subrepos.</font>
    

    この行は、gofix がサブリポジトリに移動したパッケージを処理すべきだというTODOコメントでした。今回のコミットでサブリポジトリに関する情報が追加され、gofix が実際にその処理を行うことが明記されたため、このTODOは不要となり削除されました。

  2. 「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のリリース時に公開された最終版を参照すると、この変更が全体の中でどのように位置づけられているか理解できます。
  • Go言語の公式ブログ (Go 1リリースに関するアナウンス):

参考にした情報源リンク

このコミットは、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.cryptocode.google.com/p/go.net のような特定のドメインの下に配置され、メインのGoディストリビューションには含まれません。ユーザーがこれらのパッケージを使用するには、go get コマンドを使って明示的にダウンロードし、インストールする必要があります。サブリポジトリの導入は、Goエコシステムのモジュール化と、各パッケージの独立した進化を促進するための戦略でした。

技術的詳細

このコミットの主要な技術的変更は、Go 1のドキュメントにサブリポジトリへの移行に関する情報が追加されたことです。具体的には、以下の点が重要です。

  1. インポートパスの変更: 多くのパッケージが、crypto/bcrypt のような標準ライブラリ内のパスから、code.google.com/p/go.crypto/bcrypt のような新しい外部リポジトリのパスに変更されました。これは、既存のGoプログラムがGo 1に移行する際に、これらのインポートパスを更新する必要があることを意味します。

    変更されたパッケージのリストは以下の通りです。

    Old PathNew Path
    crypto/bcryptcode.google.com/p/go.crypto/bcrypt
    crypto/blowfishcode.google.com/p/go.crypto/blowfish
    crypto/cast5code.google.com/p/go.crypto/cast5
    crypto/md4code.google.com/p/go.crypto/md4
    crypto/ocspcode.google.com/p/go.crypto/ocsp
    crypto/openpgpcode.google.com/p/go.crypto/openpgp
    crypto/openpgp/armorcode.google.com/p/go.crypto/openpgp/armor
    crypto/openpgp/elgamalcode.google.com/p/go.crypto/openpgp/elgamal
    crypto/openpgp/errorscode.google.com/p/go.crypto/openpgp/errors
    crypto/openpgp/packetcode.google.com/p/go.crypto/openpgp/packet
    crypto/openpgp/s2kcode.google.com/p/go.crypto/openpgp/s2k
    crypto/ripemd160code.google.com/p/go.crypto/ripemd160
    crypto/twofishcode.google.com/p/go.crypto/twofish
    crypto/xteacode.google.com/p/go.crypto/xtea
    exp/sshcode.google.com/p/go.crypto/ssh
    net/dictcode.google.com/p/go.net/dict
    net/websocketcode.google.com/p/go.net/websocket
    exp/spdycode.google.com/p/go.net/spdy
    encoding/git85code.google.com/p/go.codereview/git85
    patchcode.google.com/p/go.codereview/patch
  2. gofix による自動更新: ドキュメントには、「Gofix will update imports of these packages to use the new import paths.」と明記されており、gofix ツールがこれらのインポートパスの変更を自動的に処理できることが示されています。これは、開発者が手動で多数のファイルを修正する手間を省く上で非常に重要でした。

  3. go install の必要性: サブリポジトリに移動したパッケージは、Goのメインディストリビューションには含まれなくなります。そのため、これらのパッケージに依存するアプリケーションをビルドする前に、ユーザーは go install コマンド(または go get コマンド)を使用して、これらのパッケージを明示的にダウンロードし、ローカルの GOPATH にインストールする必要があることが説明されています。

この変更は、Goの標準ライブラリの構造をよりクリーンにし、メインリポジトリの管理を簡素化するとともに、特定の機能領域のパッケージが独立して進化できる柔軟性を提供しました。

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

このコミットは、主にGo 1のリリースノートまたはドキュメントを構成するHTMLファイルとテンプレートファイルに変更を加えています。

doc/go1.htmldoc/go1.tmpl の両方で、以下の変更が行われています。

  1. TODOコメントの削除:

    - <br>
    - <font color="red">TODO: gofix should also handle packages that move to subrepos.</font>
    

    この行は、gofix がサブリポジトリに移動したパッケージを処理すべきだというTODOコメントでした。今回のコミットでサブリポジトリに関する情報が追加され、gofix が実際にその処理を行うことが明記されたため、このTODOは不要となり削除されました。

  2. 「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のリリース時に公開された最終版を参照すると、この変更が全体の中でどのように位置づけられているか理解できます。
  • Go言語の公式ブログ (Go 1リリースに関するアナウンス):

参考にした情報源リンク