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

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

このコミットは、Go言語のテスト実行スクリプトである test/run に関連する変更です。具体的には、テスト実行環境の PATH 環境変数に /usr/pkg/bin を追加することで、pkgsrc 経由でインストールされた perl などのツールがテスト中に正しく見つけられるようにする修正です。

コミット

test/run: add /usr/pkg/bin to PATH.
perl is installed by pkgsrc to /usr/pkg/bin.

LGTM=iant
R=golang-codereviews, iant
CC=golang-codereviews
https://golang.org/cl/70630043

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

https://github.com/golang/go/commit/8b1b1e159d0ff464062b5325edf29c52000fd1f4

元コミット内容

test/run: add /usr/pkg/bin to PATH. perl is installed by pkgsrc to /usr/pkg/bin.

このコミットは、Goのテスト実行スクリプト test/run において、PATH 環境変数に /usr/pkg/bin を追加するものです。これは、pkgsrc を通じて /usr/pkg/bin にインストールされた perl が、テスト実行時に正しく参照されるようにするための変更です。

変更の背景

Go言語のテストスイートは、様々な環境で実行されることを想定しています。このコミットが行われた当時、特定の環境(おそらく pkgsrc を利用しているシステム)において、テストスクリプトが依存する外部ツール(この場合は perl)が見つからないという問題が発生していたと考えられます。

pkgsrc は、NetBSDプロジェクトが開発しているポータブルなパッケージ管理システムで、様々なUNIX系OSで利用できます。pkgsrc を利用してインストールされたソフトウェアは、通常 /usr/pkg/bin/usr/pkg/sbin といったディレクトリに配置されます。

test/run スクリプトは、Goのテストを実行するためのシェルスクリプトであり、テストの実行環境をセットアップする役割を担っています。このスクリプト内で perl が必要とされる場面があったにもかかわらず、PATH 環境変数に /usr/pkg/bin が含まれていなかったため、pkgsrc 経由でインストールされた perl が見つからず、テストが失敗する可能性がありました。

このコミットは、このような環境依存の問題を解決し、Goのテストスイートのポータビリティと信頼性を向上させることを目的としています。

前提知識の解説

PATH 環境変数

PATH 環境変数は、UNIX系オペレーティングシステムにおいて、実行可能ファイル(コマンド)を探すディレクトリのリストを定義するものです。ユーザーがコマンド名を入力して実行しようとすると、シェルはこの PATH に含まれるディレクトリを順番に検索し、最初に見つかった実行可能ファイルを実行します。

例えば、PATH/usr/local/bin:/usr/bin:/bin と設定されている場合、ls コマンドを実行すると、シェルはまず /usr/local/binls を探し、次に /usr/bin、最後に /bin を探します。

このコミットでは、test/run スクリプトがテスト実行時に使用する PATH を明示的に設定しています。これにより、テスト環境が特定のディレクトリに依存するツールを見つけられるようになります。

pkgsrc

pkgsrc は、NetBSDプロジェクトによって開発された、クロスプラットフォームなパッケージ管理システムです。NetBSDだけでなく、Linux、macOS、Solaris、FreeBSDなど、50以上の異なるオペレーティングシステムで利用できます。

pkgsrc の主な特徴は以下の通りです。

  • ポータビリティ: 多くのUNIX系OSで同じ方法でソフトウェアをインストール・管理できます。
  • ソースベース: 基本的にソースコードからソフトウェアをビルドしてインストールします。これにより、特定のシステムアーキテクチャに最適化されたバイナリを生成できます。
  • 依存関係の解決: ソフトウェアの依存関係を自動的に解決し、必要なライブラリやツールも同時にインストールします。

pkgsrc を利用してインストールされた実行可能ファイルは、通常 /usr/pkg/bin ディレクトリに配置されます。このため、pkgsrc 環境で Go のテストを実行する場合、perl のようなツールが /usr/pkg/bin に存在することが一般的です。

Perl

Perlは、Larry Wallによって開発された高水準の汎用プログラミング言語です。テキスト処理能力に優れており、システム管理、Web開発、ネットワークプログラミングなど、幅広い分野で利用されています。Go言語のテストスイートの中には、テストの準備や結果の解析などの補助的なタスクにPerlスクリプトを使用しているものがある可能性があります。

Goのテスト環境 (test/run スクリプト)

Go言語には、標準で強力なテストフレームワークが組み込まれていますが、より複雑なテストや、特定の環境設定が必要なテストのために、test/run のような補助的なスクリプトが使用されることがあります。

test/run スクリプトは、Goのソースツリーの test/ ディレクトリに存在し、Goの標準ライブラリやツールのテストを実行するための主要なエントリポイントの一つです。このスクリプトは、テストの実行に必要な環境変数(PATH など)を設定し、テストバイナリを実行し、結果を収集する役割を担っています。

技術的詳細

このコミットの技術的な核心は、test/run スクリプト内で PATH 環境変数を設定している行に /usr/pkg/bin を追加した点です。

元の PATH 設定は以下のようになっていました。 PATH=${GOBIN:-$GOROOT/bin}:pwd:/bin:/usr/bin:/usr/local/bin

この設定は、Goのバイナリが置かれる可能性のあるディレクトリ (GOBIN または $GOROOT/bin)、現在の作業ディレクトリ (pwd)、そして一般的なシステムバイナリのパス (/bin, /usr/bin, /usr/local/bin) を含んでいます。

しかし、pkgsrc を利用しているシステムでは、perl のような重要なツールが /usr/pkg/bin にインストールされることが一般的です。このディレクトリが PATH に含まれていないと、test/run スクリプトや、それが呼び出すテストスクリプトが perl を見つけられず、テストが失敗してしまいます。

変更後の PATH 設定は以下の通りです。 PATH=${GOBIN:-$GOROOT/bin}:pwd:/bin:/usr/bin:/usr/local/bin:/usr/pkg/bin

末尾に : /usr/pkg/bin が追加されたことで、test/run スクリプトが実行される環境において、/usr/pkg/bin に存在する実行可能ファイルも検索対象に含まれるようになりました。これにより、pkgsrc 経由でインストールされた perl が正しく見つかり、テストが期待通りに動作するようになります。

この変更は、特定のパッケージ管理システム(pkgsrc)を使用している環境でのGoテストの互換性を向上させるための、堅実な修正と言えます。

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

--- a/test/run
+++ b/test/run
@@ -33,7 +33,7 @@ unset GOROOT_FINAL  # breaks ./ imports
 
 failed=0
 
-PATH=${GOBIN:-$GOROOT/bin}:`pwd`:/bin:/usr/bin:/usr/local/bin
+PATH=${GOBIN:-$GOROOT/bin}:`pwd`:/bin:/usr/bin:/usr/local/bin:/usr/pkg/bin
 
 # TODO: We add the tool directory to the PATH to avoid thinking about a better way.
 PATH="$GOTOOLDIR:$PATH"

コアとなるコードの解説

変更は test/run スクリプトの36行目(変更後)にあります。

元の行: PATH=${GOBIN:-$GOROOT/bin}:pwd:/bin:/usr/bin:/usr/local/bin

変更後の行: PATH=${GOBIN:-$GOROOT/bin}:pwd:/bin:/usr/bin:/usr/local/bin:/usr/pkg/bin

この変更は、PATH 環境変数の定義に : /usr/pkg/bin を追加しています。これはシェルスクリプトの構文で、既存の PATH の値に新しいディレクトリ /usr/pkg/bin をコロン : で区切って追加することを意味します。これにより、シェルが実行可能ファイルを探す際に /usr/pkg/bin も検索対象に含まれるようになります。

この修正は非常にシンプルですが、pkgsrc を利用する環境におけるGoテストの安定性と互換性を確保するために重要です。

関連リンク

参考にした情報源リンク