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

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

このコミットは、Go言語のWindows向けディストリビューションパッケージングに関する継続的な開発作業を反映しています。具体的には、インストーラーの機能改善、パッケージ名の標準化、ビルドスクリプトの堅牢化、および関連するドキュメントの更新が含まれています。

コミット

commit a9e57f743d658ba27d3165dc6841915b12a98879
Author: Joe Poirier <jdpoirier@gmail.com>
Date:   Sun Feb 19 22:21:41 2012 -0600

    misc/dist/windows: ongoing dev
    
    Added the (properly formatted) license file back,
    the installer adds go\bin to the system PATH now,
    the output package names are in line with the linux
    and darwin versions, dist.bat extracts GOARCH in a
    sane way, readme cleanup.
    
    Tested on Windows 7 only. It would be helpful if
    someone else could give it a try. See the readme
    for details.
    
    R=golang-dev, bradfitz
    CC=golang-dev
    https://golang.org/cl/5673099

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

https://github.com/golang/go/commit/a9e57f743d658ba27d3165dc6841915b12a98879

元コミット内容

このコミットは、Go言語のWindows向けディストリビューションに関する継続的な開発作業の一環です。主な変更点は以下の通りです。

  • ライセンスファイルの再追加: 適切な形式でライセンスファイルが追加されました。
  • インストーラーのPATH設定: インストーラーがgo\binディレクトリをシステムPATHに追加するようになりました。これにより、Goの実行ファイルがコマンドプロンプトから直接実行できるようになります。
  • パッケージ名の標準化: 出力されるパッケージ名(zipおよびmsiファイル)が、LinuxおよびDarwin(macOS)バージョンと一貫性のある形式に変更されました。
  • dist.batスクリプトの改善: dist.batスクリプトがGOARCH環境変数をより堅牢な方法で抽出するようになりました。
  • READMEのクリーンアップ: READMEファイルが更新され、依存関係、パッケージング手順、およびTODOリストが整理されました。
  • バッチファイルの削除と統合: godocserver.batgoenv.batが削除され、その機能がインストーラーのショートカット定義に直接統合されました。

この変更はWindows 7でのみテストされており、他の環境でのテストが推奨されています。

変更の背景

このコミットの背景には、Go言語のWindowsユーザーエクスペリエンスの向上という明確な目標があります。以前のWindows向けGoディストリビューションは、手動での環境設定や、他のプラットフォームとの命名規則の不一致など、いくつかの課題を抱えていました。

具体的には、以下の点が改善の動機となっています。

  1. 利便性の向上: Goをインストールした後、ユーザーが手動でGOROOTGOPATH、そしてPATH環境変数を設定する必要がありました。これは特にWindowsに不慣れなユーザーにとって障壁となっていました。インストーラーが自動的にgo\binをシステムPATHに追加することで、インストール直後からGoコマンドが利用可能になり、開発の初期設定が大幅に簡素化されます。
  2. 一貫性の確保: Goのディストリビューションは、LinuxやmacOSといった他の主要なオペレーティングシステム向けにも提供されています。それぞれのプラットフォームでパッケージの命名規則が異なると、ユーザーや自動化スクリプトが混乱する可能性があります。このコミットでは、Windows版のパッケージ名を他のプラットフォームと統一することで、Goエコシステム全体の一貫性を高めています。
  3. ビルドプロセスの堅牢化: dist.batのようなバッチスクリプトは、Windows環境でのビルドとパッケージングにおいて重要な役割を果たします。GOARCHのような重要な環境変数の抽出方法が不適切だと、ビルドが失敗したり、意図しない結果になったりする可能性があります。より「健全な」方法でGOARCHを抽出するように改善することで、ビルドプロセスの信頼性と安定性が向上します。
  4. コードベースの整理と効率化: godocserver.batgoenv.batのような補助的なバッチファイルは、特定の機能を提供していましたが、その機能がインストーラーの内部ロジックやショートカット定義に直接統合できる場合、これらのファイルを削除することでコードベースが簡素化され、メンテナンスが容易になります。これにより、冗長性が排除され、より効率的なパッケージングプロセスが実現されます。
  5. ライセンスの明確化: オープンソースプロジェクトにおいて、ライセンス情報の提供は非常に重要です。ライセンスファイルが適切にパッケージに含まれることで、Goの利用条件が明確になり、法的な遵守が保証されます。

これらの改善は、Go言語の採用を促進し、特にWindowsプラットフォームでの開発者体験を向上させることを目的としています。

前提知識の解説

このコミットの変更内容を理解するためには、以下の技術的知識が役立ちます。

  1. Go言語の環境変数 (GOROOT, GOPATH, GOBIN, GOARCH):

    • GOROOT: Goのインストールディレクトリを指します。Goの標準ライブラリやツールがここに配置されます。
    • GOPATH: Goのワークスペースディレクトリを指します。ユーザーが開発するGoプロジェクトのソースコード、コンパイル済みバイナリ、パッケージなどが配置されます。
    • GOBIN: Goの実行可能バイナリがインストールされるディレクトリを指します。通常はGOPATH/binまたはGOROOT/binに設定されます。
    • GOARCH: ターゲットとするアーキテクチャ(例: 386 for x86, amd64 for x64)を指定します。Goのクロスコンパイルにおいて重要です。
    • PATH: オペレーティングシステムが実行可能ファイルを探すディレクトリのリストです。GOBINPATHに追加することで、Goのコマンドをどこからでも実行できるようになります。
  2. Windows Installer XML (WiX) Toolset:

    • WiXは、Windows Installer (MSI) パッケージを作成するためのオープンソースツールセットです。XMLベースの言語を使用して、インストーラーの動作、ファイル、レジストリ、ショートカットなどを定義します。
    • installer.wxsファイルはWiXのソースファイルであり、Goインストーラーの構造と動作を記述しています。
    • candle.exeはWiXソースファイルをコンパイルしてオブジェクトファイル(.wixobj)を生成し、light.exeはこれらのオブジェクトファイルをリンクして最終的なMSIパッケージを生成します。
    • WiXでは、ProductPackageMediaDirectoryComponentFeatureなどの要素を使用してインストーラーの論理構造を定義します。
    • Property要素は、インストーラーの動作や表示に関する値を設定するために使用されます。特に、ARPCOMMENTSなどのARPプレフィックスを持つプロパティは、「プログラムの追加と削除」コントロールパネルに表示される情報を制御します。
    • Environment要素は、インストール時にシステム環境変数を設定するために使用されます。このコミットでは、PATH環境変数を更新するために使用されています。
    • Shortcut要素は、スタートメニューやデスクトップにショートカットを作成するために使用されます。
  3. Mercurial (hg):

    • Mercurialは、Gitと同様の分散型バージョン管理システムです。Goプロジェクトの初期段階では、Mercurialが主要なバージョン管理システムとして使用されていました。
    • hg cloneコマンドは、リポジトリを複製するために使用されます。
    • hg id -nは、現在のリビジョンのID(ハッシュ)とブランチ名を返します。
    • hg rootは、リポジトリのルートディレクトリを返します。
  4. Windowsバッチスクリプト (.bat):

    • Windowsのコマンドプロンプトで実行されるスクリプト言語です。
    • setlocalendlocal: 環境変数の変更をスクリプトの実行範囲に限定するために使用されます。setlocalで開始し、endlocalで終了すると、その間の環境変数の変更はスクリプト終了時に元に戻ります。
    • for /f: ファイルの内容やコマンドの出力を解析するために使用されます。
    • call: 別のバッチスクリプトを実行し、制御を呼び出し元のスクリプトに戻します。
    • rmdir /S /Q, del /F /Q /S: ディレクトリやファイルを強制的に削除するためのコマンドです。
    • xcopy: ファイルやディレクトリをコピーするためのコマンドです。
    • go tool dist env: Goのディストリビューションツールが提供するコマンドで、Goのビルド環境に関する情報を出力します。-wオプションは、環境変数を設定するバッチスクリプト形式で出力します。
  5. 7-Zip (コマンドライン版):

    • 高圧縮率のファイルアーカイバです。7za.exeはコマンドラインインターフェースを提供し、zip形式などのアーカイブを作成するために使用されます。

これらの知識を持つことで、コミットがGoのWindowsディストリビューションのビルド、パッケージング、およびインストールプロセスにどのように影響するかを深く理解できます。

技術的詳細

このコミットにおける技術的な変更は多岐にわたりますが、特に以下の点が重要です。

  1. GOARCH環境変数の抽出方法の改善 (dist.bat):

    • 以前のdist.batでは、%ROOT%\bin\go tool dist envの出力を一時ファイルenv.txtにリダイレクトし、そのファイルからGOARCHという文字列をfindコマンドで検索していました。この方法は、出力形式が変更された場合や、findコマンドの挙動に依存するため、脆弱でした。
    • 新しい方法では、%ROOT%\bin\go tool dist env -wを使用しています。-wオプションは、環境変数を設定するためのバッチスクリプト形式(例: set GOARCH=amd64)で出力を生成します。この出力をenv.batという一時ファイルにリダイレクトし、call env.batを実行することで、GOARCHを含む必要な環境変数を現在のスクリプトのコンテキストに直接ロードします。このアプローチは、Goツール自体が提供する公式の環境情報取得メカニズムを利用するため、より堅牢で信頼性が高いです。
  2. パッケージ命名規則の標準化 (dist.bat):

    • 生成されるzipおよびMSIパッケージのファイル名が、gowin%GOARCH%_"%VER%.zipgowin%GOARCH%_"%VER%.msiから、go.%VER%.windows-%GOARCH%.zipgo.%VER%.windows-%GOARCH%.msiに変更されました。
    • この変更は、Goの他のプラットフォーム(LinuxやmacOS)向けパッケージの命名規則(例: go.<version>.<os>-<arch>.tar.gz)と一致させることを目的としています。これにより、Goのディストリビューション全体で一貫した命名規則が確立され、自動化されたスクリプトやダウンロードプロセスでの取り扱いが容易になります。
  3. システムPATHへの自動追加 (installer.wxs):

    • WiXインストーラーのソースファイルinstaller.wxsに、<Environment>要素が追加されました。
    • この要素は、インストール時にシステム環境変数PATH[INSTALLDIR]bin(Goのインストールディレクトリ内のbinサブディレクトリ)を追加する役割を担います。
    • Action="set"は変数を設定することを示し、Part="last"は既存のPATHの末尾に追加することを示します。Permanent="no"は、アンインストール時にこの変更が元に戻されることを意味し、System="yes"はシステム環境変数として設定されることを意味します。
    • これにより、ユーザーはGoのインストール後、手動で環境変数を設定することなく、コマンドプロンプトからgoコマンドを直接実行できるようになります。これは、WindowsユーザーにとってGoの利用開始を大幅に簡素化する重要な改善です。
  4. godocserver.batgoenv.batの削除と機能統合:

    • godocserver.batgoenv.batという2つのバッチファイルが削除されました。これらのファイルは、それぞれGoドキュメントサーバーの起動とGo環境の設定を行うためのものでした。
    • installer.wxs内のショートカット定義が変更され、godocserver.batの機能が直接GoDocServerショートカットのTargetおよびArguments属性に組み込まれました。具体的には、cmd.exeを介してgodoc.exeを起動し、同時にブラウザでドキュメントサーバーのURLを開くコマンドが直接記述されています。
    • goenv.batの機能は、システムPATHへの自動追加によって不要になったため、関連するショートカットも削除されました。
    • この変更により、インストーラーがより自己完結型になり、外部のバッチファイルへの依存が減少し、メンテナンスが容易になります。
  5. WiXインストーラーのメタデータと表示の改善 (installer.wxs):

    • Codepage="1252"Product要素に追加されました。これは、Windows-1252エンコーディングを使用することを示し、インストーラーのテキスト表示における互換性を向上させます。
    • ARPCOMMENTS, ARPCONTACT, ARPHELPLINK, ARPREADME, ARPURLINFOABOUTといったProperty要素が追加されました。これらは、Windowsの「プログラムの追加と削除」コントロールパネルに表示されるGoインストーラーのエントリに関する詳細情報を提供します。これにより、ユーザーはインストールされたGoに関するより豊富な情報を確認できるようになります。
    • GoProgramShortcutsDirの名前が「Go Programming」から「Go Programming Language」に変更され、より正確な表現になりました。

これらの技術的変更は、GoのWindowsディストリビューションの品質、使いやすさ、および保守性を総合的に向上させるものです。

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

このコミットにおける主要なコード変更は、以下のファイルに集中しています。

  1. misc/dist/windows/dist.bat:

    • GOARCHの抽出ロジックが変更されました。
      --- a/misc/dist/windows/dist.bat
      +++ b/misc/dist/windows/dist.bat
      @@ -5,31 +5,32 @@
       
       setlocal
       
      -:: Requires WiX (candle light heat), 7zip, and hg
      +:: Requires Windows Installer XML (WiX), 7zip, and Mercurial (hg)
       
      -echo # Setting variable info
      +echo # Setting some variables
       for /f %%i in ('hg.exe root') do set ROOT=%%i
       for /f %%i in ('hg.exe id -n') do set ID=%%i
       for /f "tokens=3" %%i in ('%ROOT%\bin\go.exe version') do set VER=%%i
       if errorlevel 1 goto end
       
       echo # Getting GOARCH
      -%ROOT%\bin\go tool dist env > env.txt
      -set GOARCH /p = find "GOARCH" "env.txt">NUL
      -del /F /Q /S env.txt>NUL
      +%ROOT%\bin\go tool dist env -w>env.bat
      +call env.bat
      +del /F /Q /S env.bat>NUL
       if errorlevel 1 goto end
       
      +
       rmdir /S /Q go>NUL
       mkdir go
       
      -echo # Cloning the go tree
      +echo # Cloning the Go tree
       hg clone -r %ID% %ROOT% go
       if errorlevel 1 goto end
       
       rmdir /S /Q  go\.hg>NUL
       del /F /Q /S go\.hgignore go\.hgtags>NUL
       
      -echo # Copying pkg, bin and src/pkg/runtime/z*
      +echo # Copying pkg, bin, and src/pkg/runtime/z*
       xcopy %ROOT%\pkg                   go\pkg /V /E /Y /I
       xcopy %ROOT%\bin                   go\bin /V /E /Y /I
       xcopy %ROOT%\src\pkg\runtime\z*.c  go\src\pkg\runtime  /V /E /Y
      @@ -37,18 +38,20 @@ xcopy %ROOT%\src\pkg\runtime\z*.go go\src\pkg\runtime  /V /E /Y
       xcopy %ROOT%\src\pkg\runtime\z*.h  go\src\pkg\runtime  /V /E /T
       
       echo # Starting zip packaging
      -7za a -tzip -mx=9 gowin%GOARCH%_"%VER%.zip "go/"
      +7za a -tzip -mx=9 go.%VER%.windows-%GOARCH%.zip "go/"
       if errorlevel 1 goto end
       
      +
       echo # Starting Go directory file harvesting
       heat dir go -nologo -cg AppFiles -gg -g1 -srd -sfrag -template fragment -dr INSTALLDIR -var var.SourceDir -out AppFiles.wxs
       if errorlevel 1 goto end
       
       echo # Starting installer packaging
       candle -nologo -dVersion=%VER% -dArch=%GOARCH% -dSourceDir=go installer.wxs AppFiles.wxs
      -light -nologo -ext WixUIExtension -ext WixUtilExtension installer.wixobj AppFiles.wixobj -o gowin%GOARCH%_"%VER%.msi
      +light -nologo -ext WixUIExtension -ext WixUtilExtension installer.wixobj AppFiles.wixobj -o go.%VER%.windows-%GOARCH%.msi
       if errorlevel 1 goto end
       
       del /F /Q /S *.wixobj AppFiles.wxs *.wixpdb>NUL
       
       :end
      +endlocal
      
    • 生成されるzipとmsiのファイル名が変更されました。
  2. misc/dist/windows/installer.wxs:

    • システムPATHへの追加ロジックが追加されました。
    • godocserver.batgoenv.batに関連するショートカットが削除され、GoDocServerの機能が直接ショートカットに組み込まれました。
    • インストーラーのメタデータ(「プログラムの追加と削除」に表示される情報)が追加・更新されました。
    --- a/misc/dist/windows/installer.wxs
    +++ b/misc/dist/windows/installer.wxs
    @@ -16,8 +16,9 @@
     
     <Product
         Id="FF5B30B2-08C2-11E1-85A2-6ACA4824019B"
    -    Name="The Go Programming Language $(var.Arch) $(var.Version)"
    +    Name="Go Programming Language $(var.Arch) $(var.Version)"
         Language="1033"
    +    Codepage="1252"
         Version="0.0.0.0"
         Manufacturer="http://golang.org"
         UpgradeCode="1C3114EA-08C3-11E1-9095-7FCA4824019B" >
    @@ -29,10 +30,17 @@
         Comments="The Go programming language is an open source project to make programmers more productive."
         InstallerVersion="300"
         Compressed="yes"
    -    Manufacturer="http://golang.org"
         InstallScope="perMachine"
    +    SummaryCodepage="1252"
         Languages="1033" />
    -     <!--    Platform="x86 or x64" -->
    +    <!--    Platform="x86 or x64" -->
    +
    +    <Property Id="ARPCOMMENTS" Value="The Go programming language is a fast, statically typed, compiled language that feels like a dynamically typed, interpreted language." />
    +    <Property Id="ARPCONTACT" Value="golang-nuts@googlegroups.com" />
    +    <Property Id="ARPHELPLINK" Value="golang.org/doc/community.html" />
    +    <Property Id="ARPREADME" Value="golang.org" />
    +    <Property Id="ARPURLINFOABOUT" Value="golang.org" />
    +
     <!--
     <Upgrade Id="">
         <UpgradeVersion
    @@ -44,6 +52,7 @@
             Property="" />
     </Upgrade>
     -->
    +
     <Media Id='1' Cabinet="go.cab" EmbedCab="yes" CompressionLevel="high" />
     <Condition Message="Windows 2000 or greater required."> VersionNT >= 500</Condition>
     <SetDirectory Id="INSTALLDIRROOT" Value="C:\"/>
    @@ -59,36 +68,29 @@
       <Directory Id="INSTALLDIR" Name="Go"/>
     </Directory>
     <Directory Id="ProgramMenuFolder">
    -    <Directory Id="GoProgramShortcutsDir" Name="Go Programming"/>
    +    <Directory Id="GoProgramShortcutsDir" Name="Go Programming Language"/>
     </Directory>
     <Directory Id="DesktopFolder" Name="Desktop"/>
    </Directory>
     
    -<!-- Programs Menu & Desktop Shortcuts -->
    +<!-- Programs Menu & Desktop Shortcuts, Registry & Environment Settings -->
     <DirectoryRef Id="GoProgramShortcutsDir">
       <Component Id="Component_GoShortCuts" Guid="f5fbfb5e-6c5c-423b-9298-21b0e3c98f4b">
    -    <Shortcut
    -        Id="GoEnvStartMenuShortcut"
    -        Name="GoEnv"
    -        Description="Sets the Go environment and spawns a shell window"
    -        Target="[INSTALLDIR]goenv.bat" />
    -    <Shortcut
    -        Id="GoEnvDesktopShortcut"
    -        Directory="DesktopFolder"
    -        Name="GoEnv"
    -        Description="Sets the Go environment and spawns a shell window"
    -        Target="[INSTALLDIR]goenv.bat" />
         <Shortcut
             Id="GoDocServerStartMenuShortcut"
             Name="GoDocServer"
    -        Description="Starts the godoc server on localhost:6060"
    -        Target="[INSTALLDIR]godocserver.bat" />
    +        Description="Starts the Go documentation server (http://localhost:6060)"
    +        Show="minimized"
    +        Arguments='/c "start /d[INSTALLDIR]bin godoc.exe -http=:6060 &amp;&amp; start http://localhost:6060"'
    +        Target="[%ComSpec]" />
         <Shortcut
             Id="GoDocServerDesktopShortcut"
             Directory="DesktopFolder"
             Name="GoDocServer"
    -        Description="Starts the godoc server on localhost:6060"
    -        Target="[INSTALLDIR]godocserver.bat" />
    +        Description="Starts the godoc server (http://localhost:6060)"
    +        Show="minimized"
    +        Arguments='/c "start /d[INSTALLDIR]bin godoc.exe -http=:6060 &amp;&amp; start http://localhost:6060"'
    +        Target="[%ComSpec]" />
         <Shortcut
             Id="UninstallShortcut"
             Name="Uninstall Go"
    @@ -105,24 +107,18 @@
             Type="integer"
             Value="1"
             KeyPath="yes" />
    +    <Environment
    +        Id="Environment"
    +        Action="set"
    +        Part="last"
    +        Name="PATH"
    +        Permanent="no"
    +        System="yes"
    +        Value="[INSTALLDIR]bin" />
       </Component>
     </DirectoryRef>
     
     <!-- Components -->
    -<DirectoryRef Id="INSTALLDIR">
    -  <Component Id="Component_GoDocServerBAT" Guid="c40ea60a-4290-4a91-864d-e1d8eb5cf693">
    -    <File
    -        Id="FILE_GoDocServerBat"
    -        Source="godocserver.bat"
    -        KeyPath="yes" />
    -  </Component>
    -  <Component Id="Component_GoEnvBAT" Guid="ee4587d3-fba3-47f9-b45e-ec9ca9c8a9c3">
    -    <File
    -        Id="FILE_GoEnvBat"
    -        Source="goenv.bat"
    -        KeyPath="yes" />
    -  </Component>
    -</DirectoryRef>
     
     <!-- Install the files -->
     <Feature
    @@ -131,8 +127,6 @@
         Level="1">
     
           <ComponentGroupRef Id="AppFiles" />
    -      <ComponentRef Id="Component_GoDocServerBAT" />
    -      <ComponentRef Id="Component_GoEnvBAT" />
           <ComponentRef Id="Component_GoShortCuts" />
     </Feature>
     
    
  3. misc/dist/windows/godocserver.bat:

    • ファイルが削除されました。
  4. misc/dist/windows/goenv.bat:

    • ファイルが削除されました。
  5. misc/dist/windows/LICENSE:

    • 新しいバイナリファイルとして追加されました。
  6. misc/dist/windows/README:

    • 依存関係、パッケージング手順、およびTODOリストが更新されました。

これらの変更は、GoのWindowsディストリビューションのビルド、パッケージング、およびインストールプロセスに直接影響を与えます。

コアとなるコードの解説

このコミットのコアとなる変更は、GoのWindowsインストーラーの機能性とユーザーエクスペリエンスを向上させることにあります。

1. dist.batにおけるGOARCH抽出の改善とパッケージ命名の標準化:

  • GOARCH抽出: 以前はgo tool dist envの出力をテキストファイルにリダイレクトし、そこからGOARCHを検索するという間接的な方法が取られていました。これは、出力形式の変更やfindコマンドの挙動に依存するため、エラーが発生しやすい可能性がありました。

    -%ROOT%\bin\go tool dist env > env.txt
    -set GOARCH /p = find "GOARCH" "env.txt">NUL
    -del /F /Q /S env.txt>NUL
    +%ROOT%\bin\go tool dist env -w>env.bat
    +call env.bat
    +del /F /Q /S env.bat>NUL
    

    新しいアプローチでは、go tool dist env -wを使用します。-wオプションは、環境変数を設定するバッチスクリプト形式(例: set GOARCH=amd64)で出力を生成します。この出力を一時的なenv.batファイルに保存し、call env.batで実行することで、GOARCHを含む必要な環境変数を現在のスクリプトのコンテキストに直接、かつ確実にロードします。これは、Goツール自体が提供する公式の環境情報取得メカニズムを利用するため、より堅牢で信頼性が高い方法です。

  • パッケージ命名: 生成されるzipおよびMSIパッケージのファイル名が変更されました。

    -7za a -tzip -mx=9 gowin%GOARCH%_"%VER%.zip "go/"
    +7za a -tzip -mx=9 go.%VER%.windows-%GOARCH%.zip "go/"
    ...
    -light -nologo -ext WixUIExtension -ext WixUtilExtension installer.wixobj AppFiles.wixobj -o gowin%GOARCH%_"%VER%.msi
    +light -nologo -ext WixUIExtension -ext WixUtilExtension installer.wixobj AppFiles.wixobj -o go.%VER%.windows-%GOARCH%.msi
    

    この変更は、Goの他のプラットフォーム(LinuxやmacOS)向けパッケージの命名規則(例: go.<version>.<os>-<arch>.tar.gz)と一致させることを目的としています。これにより、Goのディストリビューション全体で一貫した命名規則が確立され、自動化されたスクリプトやダウンロードプロセスでの取り扱いが容易になります。

2. installer.wxsにおけるシステムPATHへの自動追加とショートカットの統合:

  • システムPATHへの追加: 最も重要な変更点の一つは、Goのインストールディレクトリ内のbinサブディレクトリをシステムPATH環境変数に自動的に追加する機能です。

    <Environment
        Id="Environment"
        Action="set"
        Part="last"
        Name="PATH"
        Permanent="no"
        System="yes"
        Value="[INSTALLDIR]bin" />
    

    このWiXの<Environment>要素により、インストーラーは[INSTALLDIR]binのパスを既存のPATH環境変数の末尾に追加します。Permanent="no"はアンインストール時にこの変更が元に戻されることを保証し、System="yes"はユーザー固有ではなくシステム全体に適用されることを意味します。これにより、ユーザーはGoのインストール後、手動で環境変数を設定することなく、コマンドプロンプトからgoコマンドを直接実行できるようになります。

  • ショートカットの統合とバッチファイルの削除: 以前はgodocserver.batgoenv.batという2つの補助的なバッチファイルが存在し、それぞれGoドキュメントサーバーの起動とGo環境の設定を行っていました。このコミットでは、これらのバッチファイルが削除され、その機能がinstaller.wxs内のショートカット定義に直接統合されました。

    -    <Shortcut
    -        Id="GoEnvStartMenuShortcut"
    -        Name="GoEnv"
    -        Description="Sets the Go environment and spawns a shell window"
    -        Target="[INSTALLDIR]goenv.bat" />
    -    <Shortcut
    -        Id="GoEnvDesktopShortcut"
    -        Directory="DesktopFolder"
    -        Name="GoEnv"
    -        Description="Sets the Go environment and spawns a shell window"
    -        Target="[INSTALLDIR]goenv.bat" />
         <Shortcut
             Id="GoDocServerStartMenuShortcut"
             Name="GoDocServer"
    -        Description="Starts the godoc server on localhost:6060"
    -        Target="[INSTALLDIR]godocserver.bat" />
    +        Description="Starts the Go documentation server (http://localhost:6060)"
    +        Show="minimized"
    +        Arguments='/c "start /d[INSTALLDIR]bin godoc.exe -http=:6060 &amp;&amp; start http://localhost:6060"'
    +        Target="[%ComSpec]" />
    

    GoEnv関連のショートカットは、システムPATHへの自動追加により不要になったため削除されました。GoDocServerのショートカットは、Target="[%ComSpec]"cmd.exeを指す)とArguments属性を使用して、godoc.exeを直接起動し、同時にブラウザでドキュメントサーバーのURLを開くコマンドを実行するように変更されました。これにより、インストーラーがより自己完結型になり、外部のバッチファイルへの依存が減少し、メンテナンスが容易になります。

これらの変更は、GoのWindowsディストリビューションのインストールと初期設定を大幅に簡素化し、ユーザーエクスペリエンスを向上させるための重要なステップです。

関連リンク

参考にした情報源リンク