[インデックス 12750] ファイルの概要
このコミットは、Go言語のWindowsインストーラーに関する修正を含んでいます。具体的には、インストールのデフォルトドライブをC:\
に設定し、WiXインストーラー定義ファイルからWin64
コンポーネントプロパティを削除することで、Windows環境でのインストールプロセスを改善しています。
コミット
commit f4fc8894241fa4f55075f0ad71398618f929356b
Author: Joe Poirier <jdpoirier@gmail.com>
Date: Mon Mar 26 16:48:20 2012 +1100
windows: install fixes
* set default installation drive to C:\
* remove Win64 component property
R=golang-dev, bradfitz, aram
CC=golang-dev
https://golang.org/cl/5901044
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/f4fc8894241fa4f55075f0ad71398618f929356b
元コミット内容
windows: install fixes
* set default installation drive to C:\
* remove Win64 component property
変更の背景
このコミットは、Go言語のWindowsインストーラーが抱えていた問題を解決するために行われました。主な問題点は以下の2つと考えられます。
- デフォルトインストールパスの不確実性: 以前のインストーラーでは、デフォルトのインストールドライブが明示的に
C:\
に設定されていなかった可能性があります。これにより、ユーザーの環境によっては意図しないドライブにインストールされたり、インストールパスの決定に一貫性がなかったりする問題が発生していたかもしれません。C:\
をデフォルトとすることで、より予測可能で標準的なインストール体験を提供できます。 Win64
プロパティの誤用または冗長性: WiX (Windows Installer XML) ツールセットでインストーラーを作成する際、Win64
プロパティはコンポーネントが64ビットシステムにのみインストールされるべきであることを示すために使用されます。しかし、このプロパティが不適切に使用されていたか、あるいは特定のコンポーネントに対しては冗長であった可能性があります。例えば、インストーラー全体が64ビットをターゲットとしている場合、個々のコンポーネントにWin64
を明示的に設定する必要がない、または設定することで予期せぬ挙動を引き起こす可能性がありました。この修正は、インストーラーの動作をより堅牢にし、潜在的な互換性問題を解消することを目的としています。
これらの修正により、Go言語のWindowsインストーラーの信頼性とユーザーエクスペリエンスが向上しました。
前提知識の解説
このコミットを理解するためには、以下の技術的背景知識が役立ちます。
1. Windows Installer (MSI) と WiX Toolset
- Windows Installer (MSI): Microsoftが提供するソフトウェアのインストール、メンテナンス、削除を行うためのフレームワークです。
.msi
ファイルは、インストールに必要なすべての情報(ファイル、レジストリエントリ、ショートカットなど)を含むデータベースです。 - WiX Toolset (Windows Installer XML): MSIパッケージを作成するためのオープンソースのツールセットです。XML形式でインストーラーの動作を定義し、それをコンパイルしてMSIファイルを生成します。開発者は、C++やC#のようなプログラミング言語ではなく、XMLを使ってインストーラーを記述できます。
2. WiXにおけるディレクトリとプロパティ
Directory
要素: インストール先のファイルシステム上のディレクトリ構造を定義します。SetDirectory
要素: 特定のディレクトリの値を設定するために使用されます。このコミットでは、INSTALLDIRROOT
というディレクトリの値を[%SYSTEMDRIVE]
に設定しています。SYSTEMDRIVE
プロパティ: Windows Installerの標準プロパティの一つで、Windowsがインストールされているドライブのルートパス(例:C:\
)を返します。[%SYSTEMDRIVE]
のように角括弧で囲むことで、このプロパティの実行時値を取得できます。Component
要素: インストールされるファイルのグループ、レジストリエントリ、ショートカットなどを定義する論理的な単位です。各コンポーネントには一意のGUIDが割り当てられます。Win64
属性:Component
要素の属性で、そのコンポーネントが64ビットシステムにのみインストールされるべきであることを示します。この属性がyes
に設定されている場合、32ビットシステムではそのコンポーネントはインストールされません。このコミットでは、この属性が削除されています。
3. 条件付きコンパイル (<?if?>
, <?else?>
, <?endif?>
)
WiXのXMLファイルでは、プリプロセッサディレクティブを使用して条件付きコンパイルを行うことができます。これは、異なるビルドターゲット(例: 32ビットと64ビット)に対して異なる設定を適用する際に便利です。
<?if?>
: 条件が真の場合に続くXMLを処理します。<?else?>
:<?if?>
の条件が偽の場合に続くXMLを処理します。<?endif?>
: 条件付きブロックの終わりを示します。
このコミットの変更箇所では、IsX64Target
という変数の定義が条件付きコンパイルブロック内にありました。
技術的詳細
このコミットは、misc/dist/windows/installer.wxs
というWiXインストーラー定義ファイルを変更しています。主な変更点は以下の通りです。
-
IsX64Target
変数の削除:- 以前のコードでは、32ビットビルドと64ビットビルドを区別するために
IsX64Target
というWiX変数が定義されていました。 - 32ビットビルドの場合、
<?define IsX64Target = no ?>
と設定されていました。 - 64ビットビルドの場合、
<?define IsX64Target = yes ?>
と設定されていました。 - このコミットでは、これらの定義が削除されています。これは、インストーラーのビルドプロセスが
Win64
のターゲットをより直接的に扱うようになったか、あるいはこの変数が特定のコンポーネントのWin64
属性に直接バインドされる必要がなくなったことを示唆しています。
- 以前のコードでは、32ビットビルドと64ビットビルドを区別するために
-
デフォルトインストールドライブの設定:
<MajorUpgrade AllowDowngrades="yes" />
タグの直後に、<SetDirectory Id="INSTALLDIRROOT" Value="[%SYSTEMDRIVE]"/>
という新しい行が追加されました。- これは、
INSTALLDIRROOT
という内部的なディレクトリプロパティの値を、Windowsがインストールされているドライブのルート(例:C:\
)に設定することを意味します。これにより、GoのデフォルトインストールパスがC:\Go
のようになるなど、インストーラーが常にC:\
ドライブを基準に動作するようになります。
-
Win64
コンポーネントプロパティの削除:Component Id="Component_GoProgramShortCuts"
とComponent Id="Component_GoEnvironment"
の2つのComponent
要素から、Win64="$(var.IsX64Target)"
という属性が削除されました。- 以前は、これらのコンポーネントの
Win64
属性は、前述のIsX64Target
変数の値に依存していました。この属性が削除されたことで、これらのコンポーネントは、インストーラー全体のターゲットプラットフォーム(32ビットまたは64ビット)に基づいて自動的に適切な動作をするようになります。これは、WiXが提供するより一般的な64ビット対応のメカニズム(例:<Package Platform="x64" />
)に依存するようになったことを示唆しており、個々のコンポーネントレベルでの明示的なWin64
指定が不要になった、または不適切になったことを意味します。
これらの変更は、GoのWindowsインストーラーの堅牢性を高め、特に64ビットシステムでのインストールプロセスを簡素化し、より標準的な挙動に近づけることを目的としています。
コアとなるコードの変更箇所
diff --git a/misc/dist/windows/installer.wxs b/misc/dist/windows/installer.wxs
index 20f261f9d0..b170b98dc4 100644
--- a/misc/dist/windows/installer.wxs
+++ b/misc/dist/windows/installer.wxs
@@ -10,12 +10,10 @@
<?define ProdId = {FF5B30B2-08C2-11E1-85A2-6ACA4824019B} ?>
<?define UpgradeCode = {1C3114EA-08C3-11E1-9095-7FCA4824019B} ?>
<?define SysFolder=SystemFolder ?>
- <?define IsX64Target = no ?>
<?else?>
<?define ProdId = {716c3eaa-9302-48d2-8e5e-5cfec5da2fab} ?>
<?define UpgradeCode = {22ea7650-4ac6-4001-bf29-f4b8775db1c0} ?>
<?define SysFolder=System64Folder ?>
- <?define IsX64Target = yes ?>
<?endif?>
<Product
@@ -51,6 +49,7 @@
<Media Id='1' Cabinet="go.cab" EmbedCab="yes" CompressionLevel="high" />
<Condition Message="Windows 2000 or greater required."> VersionNT >= 500</Condition>
<MajorUpgrade AllowDowngrades="yes" />
+<SetDirectory Id="INSTALLDIRROOT" Value="[%SYSTEMDRIVE]"/>
<CustomAction
Id="SetApplicationRootDirectory"
@@ -72,7 +71,7 @@
<!-- Programs Menu Shortcuts -->
<DirectoryRef Id="GoProgramShortcutsDir">
- <Component Id="Component_GoProgramShortCuts" Guid="{f5fbfb5e-6c5c-423b-9298-21b0e3c98f4b}" Win64="$(var.IsX64Target)">
+ <Component Id="Component_GoProgramShortCuts" Guid="{f5fbfb5e-6c5c-423b-9298-21b0e3c98f4b}">
<Shortcut
Id="GoDocServerStartMenuShortcut"
Name="GoDocServer"
@@ -102,7 +101,7 @@
<!-- Registry & Environment Settings -->
<DirectoryRef Id="GoEnvironmentEntries">
- <Component Id="Component_GoEnvironment" Guid="{3ec7a4d5-eb08-4de7-9312-2df392c45993}" Win64="$(var.IsX64Target)">
+ <Component Id="Component_GoEnvironment" Guid="{3ec7a4d5-eb08-4de7-9312-2df392c45993}">
<RegistryKey
Root="HKCU"
Key="Software\GoProgrammingLanguage"
コアとなるコードの解説
上記の差分は、misc/dist/windows/installer.wxs
ファイルに対する3つの主要な変更を示しています。
-
IsX64Target
変数の削除 (-4行):- <?define IsX64Target = no ?> ... - <?define IsX64Target = yes ?>
この部分では、WiXのプリプロセッサディレクティブ内で定義されていた
IsX64Target
という変数の定義が削除されています。以前は、この変数がインストーラーがターゲットとするアーキテクチャ(32ビットまたは64ビット)を示すために使用されていました。この削除は、インストーラーのビルドシステムがこの情報をより直接的に処理するようになったか、あるいはこの変数が不要になったことを意味します。 -
デフォルトインストールドライブの設定 (+1行):
+<SetDirectory Id="INSTALLDIRROOT" Value="[%SYSTEMDRIVE]"/>
この行は新しく追加されたもので、
INSTALLDIRROOT
というWiXの内部ディレクトリプロパティの値を、Windowsがインストールされているシステムドライブのルート(例:C:\
)に設定しています。これにより、GoのインストーラーはデフォルトでC:\
ドライブを基準としてインストールパスを決定するようになり、インストールの一貫性が向上します。 -
Win64
コンポーネントプロパティの削除 (-2行):- <Component Id="Component_GoProgramShortCuts" Guid="{f5fbfb5e-6c5c-423b-9298-21b0e3c98f4b}" Win64="$(var.IsX64Target)"> ... - <Component Id="Component_GoEnvironment" Guid="{3ec7a4d5-eb08-4de7-9312-2df392c45993}" Win64="$(var.IsX64Target)">
Component_GoProgramShortCuts
とComponent_GoEnvironment
という2つのコンポーネント定義から、Win64="$(var.IsX64Target)"
という属性が削除されています。この属性は、コンポーネントが64ビットシステムにのみインストールされるべきであることを示していました。この削除は、これらのコンポーネントがインストーラー全体のターゲットアーキテクチャに自動的に適応するようになったため、個別にWin64
属性を指定する必要がなくなったことを意味します。これは、WiXのより現代的な64ビット対応のプラクティスに沿った変更と考えられます。
これらの変更は全体として、GoのWindowsインストーラーの堅牢性と互換性を向上させ、特に64ビット環境でのインストールプロセスをよりスムーズにするためのものです。
関連リンク
- Go CL 5901044: https://golang.org/cl/5901044
参考にした情報源リンク
- WiX Toolset Documentation (Official): https://wixtoolset.org/documentation/
- WiX Installer for a Go Application (Stack Overflow/Blog Posts):
- https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQG6xF4nhiIFy0m275T7KN-x7rrihUnXiNaXQ53hvdY2C_duzDYkpsKrkhyehxMrmiMxcGIE16sy0OILDfCOaK1N56Y2jmphcsEbalTAI17k0LR4tTLz6QdrZY71D4-1X-fpLIpTExi2aJPdlkQ=
- https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQFd0d9x7ct-Gnlaj_CpnavzKfe11PbFXVdyknw50FIF33LEFkno9l3IPtmWVcPn7-v_fW2cTHnTjzKgiiJ13WoLfPl38xJn-UeSjR9uWOQQToQVnMVwpl_7iMzQwwKFTngEhYeFWw==
- WiX Properties (ProgramFilesFolder, SYSTEMDRIVE, WindowsVolume):
- https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQH2actBCySA70ruixF4QO5PVc_w06It4AN2enSfnQ6FR3p_5w1NX2uEbZPoLXLX1r-lVy28Qqn_CYsvr3LWcceY8AbNL7TfwPWXdCbHmmaWL03Uc433JmAKmw2yXBjhpDFpZ7Sq4p-fbCVe7pyCR_yvCI9Y4OjvHPCWt-jiGGOM
- https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQHBsQv_F6Xzvxur7o6Mfp0kjqlwyY0C7NljVlMCZULw67K-ckadH3roWd7dwCee2MCNXXKzsVB57qLUW62YigsC3o4ApRvoQtKSRfcWFJPCprsnpJRl1_6Zel-T520REag8iD5C0YVCImK9EPMgpiCdRMriG2OaNo7lTefdfArzCVfebtEbMdDm0QQ=
- https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQGqDT6JZlbkyaotZrUWztg9E-yePZ0ZcAXyc-u0mYP2XhVhNsTSXLTBk2pLh8jivWjthp0jQZtadeT7aqCwIN6pBArmTaCE8z-_jgqx1HrGqjA6YOXfh_0zZuFqwxiRaPo54VTWDhlMc611WJVCT7cOA==
- WiX Components and KeyPath:
- WiX Package Element: