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

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

このコミットは、Go言語のmacOS (darwin) バイナリディストリビューションからXcode関連のファイルを削除するものです。具体的には、Goのインストール時に実行されるpostinstallスクリプトから、Xcodeの共有ディレクトリにファイルをコピーする処理が削除されています。

コミット

commit 8869cc159e25f571f7b24f23735679d1a0531d82
Author: Emil Hessman <c.emil.hessman@gmail.com>
Date:   Fri Aug 30 10:11:18 2013 +1000

    misc/dist: remove Xcode files from the darwin binary distribution
    
    Fixes #6132.
    
    R=golang-dev, adg
    CC=golang-dev
    https://golang.org/cl/12858049

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

https://github.com/golang/go/commit/8869cc159e25f571f7b24f23735679d1a0531d82

元コミット内容

misc/dist: remove Xcode files from the darwin binary distribution
    
Fixes #6132.
    
R=golang-dev, adg
CC=golang-dev
https://golang.org/cl/12858049

変更の背景

このコミットの主な目的は、Go言語のmacOS向けバイナリディストリビューションのサイズを削減し、インストールプロセスを簡素化することです。以前のバージョンでは、Goのインストール時にXcodeに関連するファイル(具体的にはXcodeの仕様ファイルなど)が/Library/Application Support/Developer/Shared/Xcode/Specifications/ディレクトリにコピーされていました。これは、GoツールをXcode開発環境と統合するため、あるいはGoのビルドプロセスがXcodeの特定のコンポーネントに依存していたためと考えられます。

しかし、Go言語のツールチェインが成熟し、Xcodeとの密接な連携が不要になった、あるいはGoのビルドシステムが自己完結型になったなどの理由により、これらのファイルが不要になったと判断された可能性があります。また、Xcodeのバージョンアップに伴い、これらのファイルの互換性維持が困難になった、あるいは単に配布物から不要な依存関係を取り除くというクリーンアップの一環である可能性も考えられます。

コミットメッセージにあるFixes #6132は、Goプロジェクトの内部イシュートラッカーで報告された問題6132を解決することを示しています。この問題は、おそらくXcodeファイルの配布に関するものであったと推測されます。

前提知識の解説

  • Xcode: Appleが提供するmacOSおよびiOSアプリケーション開発のための統合開発環境(IDE)です。C, C++, Objective-C, Swiftなどの言語をサポートし、コンパイラ、デバッガ、シミュレータなどの開発ツールが含まれています。
  • macOS (darwin): AppleのオペレーティングシステムであるmacOSのカーネル名(Darwin)を指します。Go言語のディストリビューションでは、macOS向けのビルドを「darwin」と表記することが一般的です。
  • バイナリディストリビューション: ソースコードからコンパイルされた実行可能な形式のソフトウェアパッケージを指します。ユーザーはこれをダウンロードしてすぐに実行できます。
  • postinstallスクリプト: ソフトウェアのインストールプロセスにおいて、主要なファイルのコピーが完了した後に実行されるスクリプトです。環境設定、追加ファイルの配置、キャッシュのクリアなど、インストール後の最終処理を行います。Go言語のディストリビューションでは、Goのツールやライブラリが正しく機能するように、環境変数の設定や追加ファイルの配置などが行われることがあります。
  • misc/dist: Go言語のリポジトリ内で、様々なプラットフォーム向けのディストリビューション(配布物)を構築するためのスクリプトや設定ファイルが格納されているディレクトリです。darwinはその中のmacOS向けのサブディレクトリです。
  • xcodebuild: Xcodeに付属するコマンドラインツールで、Xcodeプロジェクトのビルド、テスト、アーカイブなどを行うことができます。-versionオプションはXcodeのバージョン情報を出力します。
  • sed: ストリームエディタ。テキストストリーム(ファイルやパイプからの入力)に対して、正規表現を用いた置換や削除などの操作を行います。
  • grep: テキストファイルから正規表現にマッチする行を検索するコマンドです。
  • find: ファイルシステム内を検索し、指定された条件に一致するファイルやディレクトリを見つけるコマンドです。
  • chmod: ファイルやディレクトリのパーミッション(アクセス権)を変更するコマンドです。
  • mkdir: ディレクトリを作成するコマンドです。
  • cp: ファイルやディレクトリをコピーするコマンドです。

技術的詳細

このコミットは、misc/dist/darwin/scripts/postinstallスクリプトから、Xcode関連のファイルをインストールするロジックを削除しています。

変更前のpostinstallスクリプトには、以下の処理が含まれていました。

  1. XCODE_SHARED_DIRXCODE_MISC_DIRという変数を定義し、Xcodeの共有ディレクトリと仕様ディレクトリのパスを設定していました。
    • XCODE_SHARED_DIR="/Library/Application Support/Developer/Shared/Xcode"
    • XCODE_MISC_DIR="$XCODE_SHARED_DIR/Specifications/"
  2. XCODE_SHARED_DIRが存在するかどうかを確認していました。
  3. もし存在すれば、XCODE_MISC_DIRが存在しない場合にmkdir -pコマンドで作成していました。
  4. xcodebuild -versionコマンドを実行し、その出力からsedコマンドを使ってXcodeのメジャーバージョン番号を抽出していました。
  5. xcodebuild -versionの実行が失敗した場合($? -ne 0)、Xcode 4が使用されていると解釈し、バージョンを4に設定していました。これは、Xcode 4以降ではコマンドラインツールがオプションになったため、xcodebuildがパスにない場合にエラーになることを考慮したものです。
  6. 最後に、cp $GOROOT/misc/xcode/$version/* "$XCODE_MISC_DIR"コマンドを使って、Goのインストールディレクトリ($GOROOT)内のmisc/xcode/$version/にあるファイルを、Xcodeの仕様ディレクトリにコピーしていました。

このコミットでは、上記の処理全体がpostinstallスクリプトから削除されています。これにより、GoのmacOSバイナリディストリビューションをインストールしても、Xcode関連のファイルはシステムにコピーされなくなります。

この変更は、Go言語がXcodeに依存しない、あるいはXcodeとの統合が不要になったことを示唆しています。これにより、Goのインストールがよりクリーンになり、Xcodeのバージョンアップによる潜在的な互換性問題も回避されます。

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

変更はmisc/dist/darwin/scripts/postinstallファイルのみです。

--- a/misc/dist/darwin/scripts/postinstall
+++ b/misc/dist/darwin/scripts/postinstall
@@ -8,24 +8,3 @@ find . -exec chmod ugo+r \\{\\} \\;\n find bin -exec chmod ugo+rx \\{\\} \\;\n find . -type d -exec chmod ugo+rx \\{\\} \\;\n chmod o-w .\n-\n-echo "Installing miscellaneous files:"\n-XCODE_SHARED_DIR="/Library/Application Support/Developer/Shared/Xcode"\n-XCODE_MISC_DIR="$XCODE_SHARED_DIR/Specifications/"\n-if [ -d "$XCODE_SHARED_DIR" ]; then\n-\t# Create the XCODE_MISC_DIR if it doesn\'t exist already\n-\tmkdir -p "$XCODE_MISC_DIR"\n-\n-\tversion=`/usr/bin/xcodebuild -version | sed -n -E \'s/^Xcode ([0-9]+)\\..*$/\\1/p\'`\n-        \n-        # Since command line tools are optional with Xcode 4, a failure of the \n-\t# xcodebuild -version command is interpreted as meaning Xcode 4 is the \n-\t# version used.\n-\tif [[ $? -ne 0 ]]; then\n-\t\tversion=4\n-\tfi\n-\n-        echo "  Xcode $version"\n-\tcp $GOROOT/misc/xcode/$version/* "$XCODE_MISC_DIR"\n-fi\n-\n```

## コアとなるコードの解説

削除されたコードブロックは、Goのインストールプロセス中にXcode関連のファイルをシステムに配置する役割を担っていました。

*   `echo "Installing miscellaneous files:"`: インストール中に表示されるメッセージです。
*   `XCODE_SHARED_DIR="/Library/Application Support/Developer/Shared/Xcode"`: Xcodeの共有サポートディレクトリへのパスを定義しています。
*   `XCODE_MISC_DIR="$XCODE_SHARED_DIR/Specifications/"`: Xcodeの仕様ファイルが格納されるディレクトリへのパスを定義しています。
*   `if [ -d "$XCODE_SHARED_DIR" ]; then ... fi`: Xcodeの共有ディレクトリが存在するかどうかを確認し、存在する場合にのみ内部の処理を実行します。これは、Xcodeがインストールされていないシステムではこれらの処理をスキップするためです。
*   `mkdir -p "$XCODE_MISC_DIR"`: Xcodeの仕様ディレクトリが存在しない場合に、親ディレクトリを含めて作成します。
*   `version=`/usr/bin/xcodebuild -version | sed -n -E \'s/^Xcode ([0-9]+)\\..*$/\\1/p\'``: `xcodebuild -version`コマンドの出力からXcodeのメジャーバージョン番号を抽出し、`version`変数に格納します。例えば、「Xcode 5.0」からは「5」を抽出します。
*   `if [[ $? -ne 0 ]]; then version=4; fi`: `xcodebuild -version`コマンドがエラーコードを返した場合(つまり、コマンドが正常に実行されなかった場合)、`version`変数を`4`に設定します。これは、Xcode 4以降ではコマンドラインツールが別途インストールされるようになったため、`xcodebuild`がデフォルトでパスにない可能性があることを考慮したフォールバックロジックです。
*   `echo "  Xcode $version"`: 検出されたXcodeのバージョンを表示します。
*   `cp $GOROOT/misc/xcode/$version/* "$XCODE_MISC_DIR"`: Goのインストールディレクトリ(`$GOROOT`)内の`misc/xcode/$version/`にあるすべてのファイルを、Xcodeの仕様ディレクトリにコピーします。これにより、Goに関連するXcodeの仕様ファイルなどがXcode環境に統合されていたと考えられます。

これらの行が削除されたことで、GoのmacOSバイナリディストリビューションは、Xcode環境へのファイルのコピーを行わなくなりました。これは、GoのツールチェインがXcodeへの依存を減らしたか、あるいは完全に排除したことを意味します。

## 関連リンク

*   Go CL 12858049: [https://golang.org/cl/12858049](https://golang.org/cl/12858049)
*   Go Issue #6132: このイシューはGoプロジェクトの内部イシュートラッカーに存在すると考えられますが、公開されているGoのGitHubリポジトリのイシューリストでは直接見つけることができませんでした。これは、イシューが非常に古いか、あるいは内部的な追跡番号である可能性があります。

## 参考にした情報源リンク

*   Go言語のGitHubリポジトリ: [https://github.com/golang/go](https://github.com/golang/go)
*   Xcode Command Line Tools: [https://developer.apple.com/xcode/features/](https://developer.apple.com/xcode/features/) (一般的な情報源)
*   `man sed`, `man find`, `man chmod`, `man mkdir`, `man cp` (Unix/Linuxコマンドのmanページ)
*   `xcodebuild -help` (xcodebuildコマンドのヘルプ)