WiX チュートリアル (日本語訳)

Lesson 9 トランスフォーム

トランスフォームは、一つのインストーラを別のインストーラに変更するためのものです。既に存在するインストーラにトランスフォームを適用すると、内部のどのテーブルでも変更する事が出来て、それに応じてインストーラの動作を変更することが出来ます。トランスフォームに出来ない事の一つは、パッケージに埋め込まれているファイルを修正することです。

9.1 インストーラを変形する

トランスフォームを使う理由として、一つ面白いものがあります。それは、ユーザー・インタフェイスの文字列を別の言語に変更する、というものです。以前、Lesson 2.4 で既に論じたように、WiX は WixUI のインタフェイス言語を地域化(ローカライズ)することを許しています。その機能を使えば、さまざまな言語でインストーラを作成することが出来ます。しかし、複数の言語を必要とする場合は、この簡単な解法では、複数の平行するインストーラが作成できるだけです。それぞれのインストーラがそれぞれ固有の言語を表示するのは結構なことですが、配置すべき全てのファイルを別々のパッケージに重複して保存しなければなりません。

こういう場合にトランスフォームが役立ちます。まず、基本となるインストーラ(これは英語でも何でも構いません)から始めます。追加するすべての言語は実際には実行時のパッチになります。Windows Installer が最初のページを表示する前にそのパッチを呼び出して、UI の文字列を指定された言語に翻訳するのです。こうして、全ての言語は同一のインストーラ・パッケージを共有します。インストールされるべきファイルはパッケージの中に一度しか出現せず、それぞれの追加される言語はパッケージのサイズを少し増加させるだけになります。

インストールは小さなブートストラッパーで起動します(WiX はもうすぐ独自のブートストラッパーを提供しますが、それまでは、以前に Lesson 5.1 で推奨したものを使って下さい)。ブートストラッパーは表示可能な言語をリストアップして、おそらくは実行中のオペレーティング・システムの言語を既定値として選ぶでしょうが、ユーザーが好きな言語を選ぶことも出来ます。言語の選択が終ると、ブートストラッパーは適用すべきトランスフォームを指定して実際のインストーラを起動します。

そのような複数言語インストーラを作成するために必要となる変更は驚くほど小さいものです。

† 訳註:このレッスンについては、日本語版のサンプルは提供していません。ここで説明されている事柄に関しては、WiX のソース自体には、注目すべきところはほとんど有りません。

<?xml version='1.0' encoding='windows-1252'?>
<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>

  <Product Name='Hoge 1.0'
           Id='YOURGUID-86C7-4D14-AEC0-86416A69ABDE'
           UpgradeCode='YOURGUID-7349-453F-94F6-BCB5110BA4FD'
           Language='1033' Codepage='$(var.codepage)'
           Version='1.0.0' Manufacturer='Piyo Software'>

    <Package Id='*' Keywords='Installer'
             Description="Piyo Software's Hoge 1.0 Installer"
             Comments='Hoge is a registered trademark of Piyo Software.'
             Manufacturer='Piyo Software' InstallerVersion='100' Languages='1033'
             Compressed='yes' SummaryCodepage='$(var.codepage)' />

  ...

</Wix>

最初のステップとして、地域化されたインストーラを別々にビルドします。以前とほとんど同じですが、それぞれのインストーラにサポートされている言語のテーブルで示されている正しいコードページを指定しなければなりません。

candle.exe SampleMulti.wxs -dcodepage=1252
light.exe -ext WixUIExtension -cultures:en-us -out SampleMulti.msi SampleMulti.wixobj

candle.exe SampleMulti.wxs -dcodepage=1250
light.exe -ext WixUIExtension -cultures:hu-hu -out Sample_Hu-hu.msi SampleMulti.wixobj

candle.exe SampleMulti.wxs -dcodepage=1252
light.exe -ext WixUIExtension -cultures:fr-fr -out Sample_Fr-fr.msi SampleMulti.wixobj

次に、WiX のトランスフォーム・ツール Torch を使って、順番に、地域化されたインストーラとベースになるインストーラ(SampleMulti.msi)を比較して、両者間の差異を含んだ .mst トランスフォーム・ファイルを作成します。

torch.exe -p -t language SampleMulti.msi Sample_Hu-hu.msi -out hu-hu.mst
torch.exe -p -t language SampleMulti.msi Sample_Fr-fr.msi -out fr-fr.mst

これで、ブートストラップ・インストーラが、適切な言語パッケージを指定してベースのインストーラ・パッケージを呼び出すことが出来るようになります。

msiexec /i SampleMulti.msi TRANSFORMS="fr-fr.mst"

この場合、ブートストラッパーが必要になる他に、独立したトランスフォーム・ファイルも配布する必要が生じます。より良い方法は、トランスフォームを元のパッケージに埋め込むことです(今のところ WiX ではサポートされていませんが、EmbedTransform というツールをダウンロードして使うことが出来ます)。

EmbedTransform.exe SampleMulti.msi hu-hu.mst
EmbedTransform.exe SampleMulti.msi fr-fr.mst

使い方で違うところは一点だけ、トランスフォーム・ファイルの名前の前にコロンを付けて、Windows Installer にパッケージ内部を探すように指示することだけです。

msiexec /i SampleMulti.msi TRANSFORMS=":fr-fr.mst"
Copyright © 2004-2012, Gábor DEÁK JAHN, Tramontána
何よりもコメントと寄稿を歓迎します。
日本語翻訳 Copyright © 2010, 2013, Nobuo Kihara, softark
読みやすくて正確な翻訳を目指しましたが、解釈の誤りと技術的な間違いが含まれていないという保証は出来ません。間違いの指摘や修正案の提示を歓迎します。github のリポジトリ ( https://github.com/softark/wix-j ) をご利用下さい。