[インデックス 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のコミット履歴と関連する議論