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

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

コミット

このコミットは、Go言語のコマンドラインツール cmd/go における go help remote コマンドの出力内容を更新し、Google CodeのURL形式を修正するものです。また、go list コマンドの出力例も同様に更新されています。

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

https://github.com/golang/go/commit/e8ae29588d87e931e4c2848f3fe76270c9c70e7d

元コミット内容

cmd/go: update "go help remote" to use correct Google Code urls

R=golang-dev, bradfitz
CC=golang-dev
https://golang.org/cl/5489114

変更の背景

このコミットは2011年に行われたものであり、当時のGoogle Codeのプロジェクトホスティングサービスにおける推奨されるURL形式への変更を反映しています。Go言語のパッケージ管理システムは、インポートパスとしてURLを使用するという特徴があります。そのため、go get コマンドなどが正しく機能し、ユーザーがGoogle Code上のリポジトリを適切に参照できるように、Goツール自身が提供するヘルプドキュメントや出力例も最新かつ正確な情報を提供する必要がありました。

具体的には、以前の project.googlecode.com/ のような形式から、より標準的で一般的な code.google.com/p/project という形式への移行が行われていました。この変更は、Google CodeのインフラストラクチャやURLルーティングの進化に伴うものであり、Goツールがその変化に追従し、ユーザーに誤った情報を提供しないようにするためのメンテナンスの一環です。

なお、Google Codeは2015年にサービスを終了しており、現在ではこれらのURLは直接機能しません。このコミットは、Google Codeが活発に利用されていた時期のGoツールの正確性を保つための歴史的な変更点として理解されます。

前提知識の解説

Go言語のパッケージ管理とインポートパス

Go言語では、パッケージのインポートパスは通常、そのパッケージのソースコードがホストされているリポジトリのURLに基づいています。例えば、import "github.com/user/repo/package" のように記述します。go get コマンドは、このインポートパスを解析して、対応するリポジトリからソースコードをダウンロードし、ローカルの GOPATH に配置します。

Google Code

Google Codeは、Googleが提供していたオープンソースプロジェクトのホスティングサービスです。バージョン管理システムとしてGit、Mercurial、Subversionをサポートし、プロジェクトのソースコード、バグトラッカー、Wikiなどを提供していました。Go言語の初期の多くのプロジェクトもGoogle Code上でホストされていました。

go help remote コマンド

go help remote コマンドは、Go言語のツールがサポートするリモートリポジトリのインポートパスの慣例や例について説明するヘルプドキュメントを表示します。これは、ユーザーが外部のパッケージをインポートする際に、どのようなURL形式を使用すべきかを理解するのに役立ちます。

go list コマンド

go list コマンドは、指定されたパッケージに関する情報を表示します。デフォルトでは、パッケージ名とファイルシステム上の場所を出力します。この出力例も、ユーザーがGoパッケージの構造やローカルでの配置を理解する上で重要な情報源となります。

Vanity Import Paths (補足)

Google Codeの閉鎖後、Goコミュニティでは「Vanity Import Paths」という概念が推奨されるようになりました。これは、golang.org/x/... のように、実際のホスティングサービスに依存しないカスタムドメインをインポートパスとして使用し、そのドメインのHTMLに go-import メタタグを埋め込むことで、go get が実際のソースコードリポジトリの場所を解決できるようにする仕組みです。これにより、ホスティングサービスが変更されても、インポートパス自体を変更する必要がなくなり、依存関係の「リンク切れ」を防ぐことができます。このコミットが行われた2011年時点では、Vanity Import Pathsはまだ一般的ではありませんでした。

技術的詳細

このコミットの技術的な核心は、Go言語のツールがユーザーに提示する情報(ヘルプドキュメントと出力例)の正確性を保つことにあります。

Goの cmd/go ツールは、外部リポジトリからのパッケージ取得を容易にするために、特定のURLパターンを認識します。Google Codeの場合、プロジェクトのURL構造は code.google.com/p/プロジェクト名 という形式が標準でした。しかし、過去には project.googlecode.com/ のようなサブドメイン形式も存在したか、あるいはドキュメントが古い形式を参照していた可能性があります。

このコミットは、src/cmd/go/help.go 内の go help remote の説明文と、src/cmd/go/list.go 内の go list の出力例において、Google Codeのインポートパスの記述を、当時の最新かつ正しい code.google.com/p/project 形式に統一しています。これにより、ユーザーがGoのドキュメントを参照してGoogle Code上のプロジェクトをインポートしようとした際に、正しいパス形式を迷うことなく使用できるようになります。

特に help.go の変更では、Git、Mercurial、Subversionといった異なるVCSの例が、VCSの種類に依存しない code.google.com/p/project のルートパス形式に集約されています。これは、Google Codeが提供するVCSに関わらず、プロジェクトの識別子が code.google.com/p/ の後に続くという共通のルールを強調するものです。また、project.subrepository のような形式の追加は、Google Codeが提供していたサブプロジェクトや特定のVCSリポジトリの構造をより正確に反映するためのものです。

この変更は、Goツールの内部的なロジックやGoogle Codeとの連携方法そのものを大きく変えるものではなく、あくまでユーザーインターフェース(ドキュメントと例)の改善に焦点を当てています。

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

src/cmd/go/help.gosrc/cmd/go/list.go の2つのファイルが変更されています。

src/cmd/go/help.go の変更点

go help remote コマンドの出力に含まれるGoogle Codeのインポートパスの例が修正されています。 具体的には、project.googlecode.com/ という形式から code.google.com/p/project という形式に変更されています。

  • 変更前:
    --- a/src/cmd/go/help.go
    +++ b/src/cmd/go/help.go
    @@ -38,7 +38,7 @@ By convention, this is arranged by starting each path with a
     unique prefix that belongs to you.  For example, paths used
     internally at Google all begin with 'google', and paths
     denoting remote repositories begin with the path to the code,
    -such as 'project.googlecode.com/'.
    +such as 'code.google.com/p/project'.
     	`,
     }
     
    @@ -66,14 +66,11 @@ A few common code hosting sites have special syntax:
     
     	Google Code Project Hosting (Git, Mercurial, Subversion)
     
    -\t\timport "project.googlecode.com/git"
    -\t\timport "project.googlecode.com/git/sub/directory"
    +\t\timport "code.google.com/p/project"
    +\t\timport "code.google.com/p/project/sub/directory"
     
    -\t\timport "project.googlecode.com/hg"
    -\t\timport "project.googlecode.com/hg/sub/directory"
    -
    -\t\timport "project.googlecode.com/svn/trunk"
    -\t\timport "project.googlecode.com/svn/trunk/sub/directory"
    +\t\timport "code.google.com/p/project.subrepository"
    +\t\timport "code.google.com/p/project.subrepository/sub/directory"
     
     	Launchpad (Bazaar)
    

src/cmd/go/list.go の変更点

go list コマンドの出力例に含まれるGoogle Codeのパスが修正されています。 こちらも googlecode.com を含む古い形式から code.google.com/p/ を含む新しい形式に更新されています。

  • 変更前:
    --- a/src/cmd/go/list.go
    +++ b/src/cmd/go/list.go
    @@ -18,9 +18,9 @@ List lists the packages named by the import paths, one per line.
     
     The default output shows the package name and file system location:
     
    -    books /home/you/src/google-api-go-client.googlecode.com/hg/books/v1
    -    oauth /home/you/src/goauth2.googlecode.com/hg/oauth
    -    sqlite /home/you/src/gosqlite.googlecode.com/hg/sqlite
    +    books /home/you/src/code.google.com/p/google-api-go-client/books/v1
    +    oauth /home/you/src/src/code.google.com/p/goauth2/oauth
    +    sqlite /home/you/src/code.google.com/p/sqlite
     
     The -f flag specifies an alternate format for the list,
     using the syntax of package template.  The default output
    

コアとなるコードの解説

この変更は、Go言語のツールがGoogle Codeのプロジェクトを扱う際のパス解決ロジックそのものを変更するものではなく、主にユーザー向けのドキュメント(go help remote)と出力例(go list)を、当時のGoogle Codeの推奨されるURL形式に合わせるためのものです。これにより、ユーザーがGoのツールを使ってGoogle Code上のリポジトリをインポートしたり参照したりする際に、正しいパス形式を理解しやすくなります。

特に、help.go の変更では、Git、Mercurial、Subversionといった異なるバージョン管理システム(VCS)に対応するGoogle Codeのインポートパスの例が、より汎用的な code.google.com/p/project 形式に統一されています。これは、Google Codeが提供するVCSの種類に関わらず、プロジェクトのルートパスが code.google.com/p/プロジェクト名 となることを反映しています。また、project.subrepository のような形式も追加されており、これはGoogle Codeにおけるサブプロジェクトや特定のVCSリポジトリの構造をより正確に表現している可能性があります。

list.go の変更は、go list コマンドがパッケージのファイルシステム上の場所を表示する際の例を更新し、実際のGoogle CodeのURL構造に合致させることで、ユーザーがGoのパッケージがどのようにローカルに配置されるかをより正確に理解できるようにしています。

関連リンク

参考にした情報源リンク

  • Web検索結果: "Google Code project hosting URL format change Go import path"
    • texlution.com (https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQEgxnw4QnFKGdRTBwVY5hD3KGnC20O4he8DDAtG4zeZf3wo9XVCYxQ5SOIFfUHDuHgKPDX4CZcIUi8clOJBqIhoCcDySUdbw6YdcgCgzmlYfCAh-uJkeYwZEokuB2LP8W-S8AMNXRifwEZtKURXxlHy0f94Ng==)
    • go.dev (https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQExv7H0nmqKB1Ap5myqBnbUck-gzz2XNpVA5ucCFNCsV4sgItSxA-zmE83B9DQKzdRv8S5g13fJQvoBesg5IOrUxmrs_nNiuUIY8Uj7fW6oela4f-yyX_Q6Vj-_Ns5cxDA=)
    • google.com (https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQHfxbPHyNMI5wmRA8cHAXXk9fwMswQnFwjtxb30P4PXIsjhTSRZgCXoBfYK75QlPQfgmf07tIS4OzQA_G4k9Z09WuvPJNUaFae22iwNRW6E5NS4x3sTghDqsUusMtIv_YkF6_GH_rKCouFC-HDU7RtffA14lH6udHDrxtmcPdgDeKHCSShLoDGAlFIAKZSImjY_LPTVufAJuRRLClo=)
    • stackoverflow.com (https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQEdYsGspqg1zJpiJ6GMETTGyWOVW3E0RtT6_kclCwrSP7DwvAjfFKcqffiQyeT8JBOfOAvqXwcBA17h2K3HXK7kXiGntsWRKccoU2dtnGq2I2r8qTRLJyn3ZzLFWe0ky7cviXg8aD_xEYbyqH25le6T9i9x_8vhPA_bDgRyu8DgjhJ9Io7HSJl)
    • github.com (https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQGjB3_sxdBivvXpFMRBObkEqQcP2iuXLuIpMHP6NGN8GhGm7UMdVMLoFnuyqBTlFVnGaQbBrM02YdRQKMjihqIYae8f2D8gYLgrRDZDFBXM71WGhlA4HPkGuhTmcSZhO__pEbroEhGii_RoQ-Enfg==)
  • コミット情報: /home/orange/Project/comemo/commit_data/10993.txt