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

[インデックス 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 パッケージに移行)の関数で、一時ディレクトリを作成するために使用されます。一時的な作業スペースが必要な場合に便利です。

技術的詳細

このコミットの技術的な変更は、主にファイルとディレクトリのリネーム、およびそれに伴うコード内のパス参照の更新です。

  1. ディレクトリのリネーム:

    • misc/dist ディレクトリが misc/makerelease に変更されました。これには、macOSインストーラ関連のファイル(darwin/Distribution, darwin/Resources/bg.png など)やWindowsインストーラ関連のファイル(windows/LICENSE.rtf, windows/installer.wxs など)が含まれます。
    • これらのファイルは、Goのバイナリ配布物を作成するためのスクリプトや設定ファイル、リソースなどです。
  2. Goソースファイルのリネームと内容の変更:

    • misc/dist/bindist.gomisc/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/windowsmisc/makerelease/windows に変更されました。

これらの変更は、単なる名前の変更にとどまらず、コード内のパス参照やエラーメッセージ、一時ファイル名など、関連するすべての箇所で一貫性を保つように行われています。これにより、コードベース全体の整合性が向上し、将来的なメンテナンスが容易になります。

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

このコミットにおけるコアとなるコードの変更は、misc/dist/bindist.gomisc/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.gomisc/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 に変わったことに対応しています。
  • エラーメッセージの変更:

    • 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の公式ドキュメント (特に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のコミット履歴と関連する議論