WiX チュートリアル (日本語訳)
Windows Installer XML (WiX) は、XML ソース・コードから Windows のインストーラ・パッケージをビルドするツールセットです。このツールセットはコマンド・ライン・ツールを提供しており、古いスタイルの Makefile によるビルド・プロセスに組み込んで使用することが出来るだけでなく、新しい MSBuild テクノロジを使って Microsoft の Visual Studio や SharpDevelop のような統合開発環境の中で MSI や MSM のセットアップ・パッケージをビルドすることも出来ます。
WiX はオープン・ソースのプロジェクトで、元来は Microsoft が開発したものですが、現在は Rob Mensching によってメンテナンスされています。SourceForge から最新のバイナリとソース・コードのリリースをダウンロードすることが出来ます。このチュートリアルは、最近リリースされた安定バージョンである 3.0 をカバーしています。
† 訳註:本文書は、Gábor DEÁK JAHN による WiX tutorial を日本語に翻訳したものです。読みやすくて正確な翻訳を目指しましたが、解釈の誤りと技術的な間違いが含まれていないという保証は出来ません。
† 訳註:2011年3月現在、WiX の最新安定バージョンは 3.5 です。3.5 の主要な特徴は、(1) Visual Studio 2010 への対応の追加、(2) IIS7 への対応の追加、(3) 地域化言語の追加 の3点です。WiX 本体のコアは、3.0 との互換性を保ちながら、若干の機能拡張と多くの障害修正がなされています。ただし、WiX 3.0 と 3.5 は、同一マシン上に共存させることは出来ません。本文書のサンプル・ソースの大部分は、WiX 3.5 でも、そのままビルドすることが可能です。
ツールセットは C# で書かれていて、起動するためには .NET Framework 2.0 と、その Service Pack 1 が必要です。と言っても、これはツールセット自体にのみ当てはまることです。このツールセットで作成したパッケージは、対象のコンピュータに何か追加のフレームワークやソフトウェアがインストールされていることを要求するものではありません。同様に、ある種の特殊なアプリケーション(マージ・モジュールやパッチ)では、いくつか追加のユーティリティが必要になりますが、それも、パッケージをビルドするコンピュータで必要になるだけです。クライアントは、出来上った自己完結的なインストーラ・パッケージ以外には、何も必要としません。
WiX の開発者とユーザーの友好的なコミュニティーが、SourceForge が運営している専用のメーリング・リストの中に存在します。このメーリング・リストは、WiX のあらゆる面についてアドバイスを求めるための最善の場所です。SourceForge のアカウントを既に持っているのであれば、ウェブサイトからでも、メーリング・リストに参加することが可能です。しかし、もっと簡単な方法は、メーリング・リストの参加申し込みアドレスに空のメッセージを送信することです。今日、このようなメーリング・リストでは当り前のことですが、最初に参加申し込みをしなければ、何も質問をすることは出来ません。そうでなければ、メーリング・リストのユーザーはスパムに耐えられないでしょう。
† 訳註:日本語のメーリング・リストとしては、Windows Installer/WiX/InstallShield メーリングリストがあります。
アプリケーションの開発が終了しても、まだ終りと言うには程遠いものがあります。近年では、ユーザーは、本格的で完璧なセットアップ・ソリューションが製品に付属しているのを当り前の事として要求するようになっています — そして、セットアップはエンド・ユーザーがアプリケーションに接する一番最初の部分ですから、セットアップの完全さと信頼性が重要であることはいくら強調しても足りません。
従来からあるセットアップ・ツールは、プログラム的なスクリプト・ベースの手法を使って、アプリケーションのインストールに関係するさまざまなステップを記述してきました。ファイルのコピー、レジストリ設定の作成、デバイス・ドライバーやサービスの開始など、すべてそうです。一方、Windows Installer の背景にあるテクノロジは、エンド・ユーザーに対しては同じような見た目や使い勝手を維持しながらも、重要な哲学的変更をいくつか経ています。根本的な変更は、命令的な記述から宣言的な記述への移行でした。すなわち、インストールの個々のステップを記述するのではなく、インストールやアンインストールのさまざまな段階を経た後に、対象のマシンがどんな状態になっているべきかを、宣言的な形式で定義するのです。命令的な記述は非常に効率的であるように見えますが、それには、何かエラーが発生しない限りは、という条件が付きます。しかし、宣言的な記述であれば、予想外の条件、対象マシンの環境の違い、インストールの中断、リソースの共有などに起因するエラーが生じても、うまく対処することが出来ます。セットアップの開発者にとって最も優先すべき課題は、インストールの過程でどのような事態が発生しようとも、対象のマシンを既知の安定した状態に保って、有害な副作用を与えないことです。
広く使われているセットアップ・ツールの開発者たちも、この新しいテクノロジを採用した新しいバージョンのツールを提供して、そういう性格を持ったセットアップ・プログラムを作成できるようにし始めています。しかし、多くの開発者の経験が示すように、それらのツールは、比較的単純なインストーラ・パッケージの作成は完璧にこなしますが、多少複雑な要求に出会った場合には、制約が厳しすぎたり柔軟性が欠けていたりすることが多いのです。
ここで紹介しようとしているツールセット、WiX は、それらとは違う手法を取っています。従来のセットアップ・ツールでは、グラフィカルなインタフェイスが付属していて、インストールのプロセスを構成するファイルや関連タスクを開発者が手作業で収集できるようになっているのが通例ですが、WiX はそういうものではありません。むしろ、プログラミング言語によく似たものです。WiX では、アプリケーションを作成する通常のプロセスと全く同じように、テキスト・ファイルを使って、インストールのプロセスに関する全ての要素を記述します。テキスト・ファイルは、急速に普及してきた XML 形式のものです。そして、通常のコンパイラがソース・ファイルからアプリケーションを作成するのと全く同じように、WiX のコンパイラとリンカがセットアップ・プログラムを作成します。このため、WiX は、自動化されたアプリケーション作成プロセスの一部として組み込むことが、非常に容易に出来るようになっています。組み込む先は、makefile による古典的なテクノロジに基づいたものでも構いませんし、現代的な統合開発環境の類似した機構であっても構いません。
この統合は、基本的には開発者に快適さを提供するだけのものですが、WiX は、それに加えて、更に別のレベルの統合をも提供します。それは、第一の統合よりもはるかに利点が多い、セットアップ開発プロセスとアプリケーション開発プロセスの統合です。伝統的に、セットアップ・プログラムが書かれるのは、メインのアプリケーションがほとんど完成してからの事でした。しかも、多くの場合は、別の開発者によって書かれるのです。この手法は、アプリケーションを構成する全てのリソースについて情報を収集するという、退屈で間違いの多いプロセスを必要とします。通常、ファイルそのものは明白ですが、レジストリ・エントリ、サービス、その他の形式のリソース間依存関係は、大抵は、後になってからでは再構成するのが困難なものです。しっかりした開発ドキュメントが欠如している場合、セットアップの開発者は、全ての情報の断片をアプリケーションの開発者から聞き出すか、もしくはソース・コードから抽出しなければなりません。
統合されたアプリケーション/セットアップ開発環境においては、元の開発者がアプリケーションの開発と同期して WiX のソース・ファイルを修正すべきことになります。新しいモジュールの開発を開始したり、新しいレジストリ・エントリを追加したり、サービスなどの依存関係を作成したりすると同時に、並行して、セットアップに対する適切な修正が施されなければなりません。この手法をとれば、重要な情報が欠落することは決してありませんし、おまけとして、アプリケーションそのものが完成するのと一緒にセットアップ・プログラムも実質的に完成することになります。
このような事の結果として、WiX は全ての開発者に平等に適している訳ではない、という事が言えます。学習曲線の勾配が比較的きついこと(このチュートリアルの主要な目的はその困難の克服を支援することではあるのですが)、不可避的に内部の詳細事項に関わる必要があること、そして、基礎を構成する Windows Installer のテクノロジが複雑であることを考慮に入れると、経験の少ない開発者や、WiX によって得られる無制限の圧倒的なパフォーマンスが本当は必要でない人にとっては、もっと単純な、GUI ベースのセットアップ・オーサリング・ツールの方が適しているでしょう。そういうツールとしては、市販製品でもフリーウェアでも、入手できるソリューションがいくつか有ります。
WiX ツールセットの特徴と利点を要約すると以下の通りです。
WiX の成熟度について疑念が有るかもしれませんね。多数のファイルを配置する必要がある大規模で複雑なアプリケーションでも、WiX でインストーラを作れるだろうか、と。それに対しては、Microsoft 自身が主要なソフトウェア・パッケージを全部 WiX に切り替えつつある、という事を言っておきます。ほんの一例ですが、Microsoft Office 2007 のセットアップはすべて WiX で開発されたものです。
まず最初に、WiX ツールセットの作成について Rob Menshing に謝意を表したいと思います。そして、このチュートリアルに素材を寄稿してくれた Neil Sleightholm、Vadym Stetsyak、Robert Pickering、Marc Borgers、John DeSoi、Markus Karg、Greg Glass、Stefan Krüger、Nobuo Kihara、Phil Wilson、Peter Tewkesbury、Nicholas Muguira、David Adams、Mike Green、Chesong Lee および Christophe Michel に謝意を表します。
† 訳註:日本語のサンプル・コードを全てまとめたものを Samples.zip として提供しています。
† 訳註:この「WiX チュートリアル(日本語訳)」の HTML ソース、サンプル・コード(コマンド・ライン版および VS2008 WiX Project 版)を、github のリポジトリ ( https://github.com/softark/wix-j ) で公開しています。