[インデックス 17957] ファイルの概要
このコミットは、Goプロジェクト内のリリース関連ツール群のディレクトリ名を misc/dist から misc/makerelease へと変更するものです。これに伴い、関連するGoソースファイル名も bindist.go から makerelease.go へと変更され、コード内の参照も更新されています。
コミット
commit dba08e0615b54f3b9ebbf3133e6918de7b130645
Author: Andrew Gerrand <adg@golang.org>
Date: Wed Dec 11 14:47:18 2013 +1100
misc/dist: rename to makerelease
The ambiguity has gone on too long.
R=golang-dev, minux.ma, r, dsymonds
CC=golang-dev
https://golang.org/cl/39920043
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/dba08e0615b54f3b9ebbf3133e6918de7b130645
元コミット内容
misc/dist: rename to makerelease
The ambiguity has gone on too long.
このコミットの目的は、misc/dist ディレクトリを misc/makerelease にリネームすることです。コミットメッセージにある「The ambiguity has gone on too long.(曖昧さが長すぎた)」という一文は、既存のディレクトリ名 dist がその機能(リリース作成)を明確に示していなかったことを示唆しています。
変更の背景
Goプロジェクトでは、様々なプラットフォーム向けのバイナリ配布物(ディストリビューション)を作成するためのツールが misc/dist ディレクトリに格納されていました。しかし、「dist」という名前は「distribution(配布物)」の略であり、配布物そのものを指すのか、それとも配布物を作成するプロセスやツールを指すのか、という点で曖昧さがありました。
この曖昧さは、特にプロジェクトに新しく参加する開発者や、コードベースを初めて見る人にとって混乱の原因となる可能性がありました。Goプロジェクトは、コードの可読性と保守性を重視しており、明確な命名規則はその重要な要素の一つです。
このコミットは、その曖昧さを解消し、ディレクトリの目的をより明確にするために行われました。makerelease という新しい名前は、「リリースを作成する」というツールの機能を直接的に表現しており、誤解の余地をなくします。これは、Goプロジェクト全体のコードベースの品質と理解しやすさを向上させるための、小さなしかし重要な改善です。
前提知識の解説
このコミットを理解するためには、以下の前提知識があると役立ちます。
- Go言語のプロジェクト構造: Goプロジェクトは通常、特定の慣習に従ったディレクトリ構造を持っています。
miscディレクトリは、主要なGoツールチェーンやランタイムには直接関係しないが、プロジェクトの運用や開発に役立つ様々なスクリプトやツールを格納するために使われます。 - バイナリディストリビューション (Binary Distribution): ソフトウェアのバイナリディストリビューションとは、コンパイル済みの実行可能ファイルや関連するライブラリ、ドキュメントなどをまとめたパッケージのことです。ユーザーはこれをダウンロードして、ソースコードからビルドすることなくソフトウェアを実行できます。Goの場合、これはGoコンパイラや標準ライブラリ、その他のツールを含むSDK(Software Development Kit)の形で提供されます。
- リリースプロセス: ソフトウェアプロジェクトでは、定期的に新しいバージョンをリリースするプロセスがあります。これには、コードのビルド、テスト、パッケージング、署名、そして配布物の作成が含まれます。Goプロジェクトも同様に、安定したリリースを提供するために厳格なリリースプロセスを持っています。
pkgbuildおよびproductbuild(macOS): macOS環境でソフトウェアパッケージを作成するためのコマンドラインツールです。pkgbuild: 個々のコンポーネント(アプリケーション、フレームワークなど)を含むパッケージ(.pkgファイル)を作成します。productbuild: 複数のパッケージを統合し、配布用のインストーラパッケージ(.pkgまたは.mpkgファイル)を作成します。これには、インストーラのUIやライセンス情報などを定義するDistributionファイルやResourcesが含まれます。
- WiX Toolset (Windows): Windows Installer (MSI) パッケージを作成するためのオープンソースツールセットです。
.wxsファイルは、MSIインストーラの構造と内容を定義するXMLファイルです。GoのWindows向けインストーラは、このWiX Toolsetを使用して作成されていました。 ioutil.TempDir: Goの標準ライブラリio/ioutilパッケージ(Go 1.16以降はosパッケージに移行)の関数で、一時ディレクトリを作成するために使用されます。一時的な作業スペースが必要な場合に便利です。
技術的詳細
このコミットの技術的な変更は、主にファイルとディレクトリのリネーム、およびそれに伴うコード内のパス参照の更新です。
-
ディレクトリのリネーム:
misc/distディレクトリがmisc/makereleaseに変更されました。これには、macOSインストーラ関連のファイル(darwin/Distribution,darwin/Resources/bg.pngなど)やWindowsインストーラ関連のファイル(windows/LICENSE.rtf,windows/installer.wxsなど)が含まれます。- これらのファイルは、Goのバイナリ配布物を作成するためのスクリプトや設定ファイル、リソースなどです。
-
Goソースファイルのリネームと内容の変更:
misc/dist/bindist.goがmisc/makerelease/makerelease.goにリネームされました。- このGoファイルは、Goのリリースバイナリを作成する主要なロジックを含んでいます。ファイル名が変更されただけでなく、その内容も新しいディレクトリ名に合わせて更新されています。具体的には、以下の文字列が変更されています。
- 一時ディレクトリのプレフィックス:
bindistからmakereleaseへ。これはioutil.TempDirで作成される一時ディレクトリの名前に影響します。 - ツールパスのglobパターン:
pkg/tool/*/dist*からpkg/tool/*/makerelease*へ。これは、ビルドされたリリースツール(distまたはmakereleaseという名前の実行ファイル)を検索するためのパターンです。 - エラーメッセージ: 「couldn't find dist in %q」から「couldn't find makerelease in %q」へ。
- macOSインストーラ関連のパス:
misc/dist/darwin/etc,misc/dist,misc/dist/darwin/scripts,misc/dist/darwin/Distribution,misc/dist/darwin/Resourcesがそれぞれmisc/makerelease/darwin/etc,misc/makerelease,misc/makerelease/darwin/scripts,misc/makerelease/darwin/Distribution,misc/makerelease/darwin/Resourcesに変更されました。 - Windowsインストーラ関連のパス:
misc/dist/windowsがmisc/makerelease/windowsに変更されました。
- 一時ディレクトリのプレフィックス:
これらの変更は、単なる名前の変更にとどまらず、コード内のパス参照やエラーメッセージ、一時ファイル名など、関連するすべての箇所で一貫性を保つように行われています。これにより、コードベース全体の整合性が向上し、将来的なメンテナンスが容易になります。
コアとなるコードの変更箇所
このコミットにおけるコアとなるコードの変更は、misc/dist/bindist.go が misc/makerelease/makerelease.go にリネームされ、そのファイル内の文字列が新しいパスと名前に合わせて更新された点です。
--- a/misc/dist/bindist.go
+++ b/misc/makerelease/makerelease.go
@@ -205,7 +205,7 @@ type Build struct {
}
func (b *Build) Do() error {
- work, err := ioutil.TempDir("", "bindist")
+ work, err := ioutil.TempDir("", "makerelease")
if err != nil {
return err
}
@@ -286,13 +286,13 @@ func (b *Build) Do() error {
version string // "weekly.2012-03-04"
fullVersion []byte // "weekly.2012-03-04 9353aa1efdf3"
)
- pat := filepath.Join(b.root, "pkg/tool/*/dist*") // trailing * for .exe
+ pat := filepath.Join(b.root, "pkg/tool/*/makerelease*") // trailing * for .exe
m, err := filepath.Glob(pat)
if err != nil {
return err
}
if len(m) == 0 {
- return fmt.Errorf("couldn't find dist in %q", pat)
+ return fmt.Errorf("couldn't find makerelease in %q", pat)
}
fullVersion, err = b.run("", m[0], "version")
if err != nil {
@@ -351,7 +351,7 @@ func (b *Build) Do() error {
// build pkg
// arrange work so it's laid out as the dest filesystem
- etc := filepath.Join(b.root, "misc/dist/darwin/etc")
+ etc := filepath.Join(b.root, "misc/makerelease/darwin/etc")
_, err = b.run(work, "cp", "-r", etc, ".")
if err != nil {
return err
@@ -371,11 +371,11 @@ func (b *Build) Do() error {
return err
}
defer os.RemoveAll(pkgdest)
- dist := filepath.Join(runtime.GOROOT(), "misc/dist")
+ makerelease := filepath.Join(runtime.GOROOT(), "misc/makerelease")
_, err = b.run("", "pkgbuild",
"--identifier", "com.googlecode.go",
"--version", version,
- "--scripts", filepath.Join(dist, "darwin/scripts"),
+ "--scripts", filepath.Join(makerelease, "darwin/scripts"),
"--root", work,
filepath.Join(pkgdest, "com.googlecode.go.pkg"))
if err != nil {
@@ -383,8 +383,8 @@ func (b *Build) Do() error {
}
targ = base + ".pkg"
_, err = b.run("", "productbuild",
- "--distribution", filepath.Join(dist, "darwin/Distribution"),
- "--resources", filepath.Join(dist, "darwin/Resources"),
+ "--distribution", filepath.Join(makerelease, "darwin/Distribution"),
+ "--resources", filepath.Join(makerelease, "darwin/Resources"),
"--package-path", pkgdest,
targ)
if err != nil {
@@ -404,7 +404,7 @@ func (b *Build) Do() error {
targs = append(targs, targ)
// Create MSI installer.
- win := filepath.Join(b.root, "misc/dist/windows")
+ win := filepath.Join(b.root, "misc/makerelease/windows")
installer := filepath.Join(win, "installer.wxs")
if *wxsFile != "" {
installer = *wxsFile
コアとなるコードの解説
上記の差分は、misc/dist/bindist.go が misc/makerelease/makerelease.go にリネームされた後の、ファイル内容の変更を示しています。
-
ioutil.TempDir("", "bindist")からioutil.TempDir("", "makerelease"):ioutil.TempDirは一時ディレクトリを作成する関数です。第二引数は作成されるディレクトリ名のプレフィックスとして使用されます。以前は「bindist」というプレフィックスが使われていましたが、新しい「makerelease」という名前に合わせて変更されました。これにより、一時ディレクトリの目的もより明確になります。
-
filepath.Join(b.root, "pkg/tool/*/dist*")からfilepath.Join(b.root, "pkg/tool/*/makerelease*"):- これは、Goのビルドツールが生成する実行可能ファイル(
distまたはmakereleaseという名前)を検索するためのglobパターンです。Goのツールチェーンは、ビルド時に特定のツールをpkg/tool/<OS_ARCH>/ディレクトリに配置します。この変更は、ビルドされたツールの名前がdistからmakereleaseに変わったことに対応しています。
- これは、Goのビルドツールが生成する実行可能ファイル(
-
エラーメッセージの変更:
fmt.Errorf("couldn't find dist in %q", pat)からfmt.Errorf("couldn't find makerelease in %q", pat)へ。- これは、上記のツール検索が失敗した場合に表示されるエラーメッセージです。ユーザーや開発者が問題をデバッグする際に、より正確な情報を提供するために更新されました。
-
パス参照の変更:
filepath.Join(b.root, "misc/dist/darwin/etc")など、misc/distを参照していたすべてのパスがmisc/makereleaseを参照するように変更されています。- これには、macOSインストーラ作成時に使用されるスクリプト、配布情報、リソースファイルへのパスが含まれます。また、Windowsインストーラ作成時に使用される
installer.wxsファイルへのパスも同様に変更されています。 runtime.GOROOT()はGoのインストールルートディレクトリを返します。その下のmisc/distディレクトリへの参照もmisc/makereleaseに更新されています。
これらの変更は、単に文字列を置換するだけでなく、Goのビルドシステムとリリースプロセスにおけるパスの整合性を維持するために不可欠です。これにより、リネーム後もリリース作成ツールが正しく機能することが保証されます。
関連リンク
- Go言語の公式ウェブサイト: https://golang.org/
- Goのソースコードリポジトリ (GitHub): https://github.com/golang/go
- Goのコードレビューシステム (Gerrit): https://go-review.googlesource.com/ (コミットメッセージにある
https://golang.org/cl/39920043はGerritのチェンジリストへのリンクです)
参考にした情報源リンク
- Goの公式ドキュメント (特にGoのビルドとインストールに関するセクション)
- WiX Toolset 公式サイト: https://wixtoolset.org/
- macOS
pkgbuildおよびproductbuildのmanページまたはApple Developer Documentation - Goのソースコード内の
miscディレクトリの構造と内容 io/ioutilパッケージのドキュメント (Go 1.16以降はosパッケージ)path/filepathパッケージのドキュメントfmtパッケージのドキュメントruntimeパッケージのドキュメント- Goのリリースノートや開発ブログ(過去のリリースプロセスに関する情報)
- GitHubのコミット履歴と関連する議論