WiX Toolset の昔話なんかを残しておこうかと…

ふとしたきっかけで Qiita で WiX toolset(以下WiX) の記事を探してみたところ、結構 WiXToolset なタグのついた記事がある。連載記事もあるけど、それでも37は最もニッチともいえる開発ツールであるインストーラ関連としては多いんじゃないかしら？ IS(ヒットさせないためあえて省略)のタグは５個だったし。
ということで、ちゃんと残ってるところはもうほとんどないので WiX の昔話などを交えてちょこっと書いておこうかとｗ

# 初出
2004/04/05、Microsoft 初の OSS プロダクトとして「Windows Installer XML(WiX) toolset」という名前で世に公開されました。
「あのMSがOSSだと！？」と世界中でニュースになっていたので、当時開発をしていた人だとインストーラやWindows関係に興味がなくても聞こえていたかもしれません。

# 作者は？
現在のコントリビュータは３人みたいですね。

オリジナルの作者でもある [Rob Mensching](https://robmensching.com/blog/) には、2007年に参加したグロサミの時に使ってるよ！って挨拶に行きました。
当時MSにいた Rob は、その後スピンアウトして [FireGiant](https://www.firegiant.com/) を立ち上げ、今はそこで CEO をしつつ、WiXの開発も継続しています。

# どこに公開されているの？
開発当初は、SourceForge.net で行っていました(昔ほど活気はないけど今も存在している)。その後 MS が Codeplex を立ち上げたので、引っ越してきてくれと強烈なアピールを受けて引越することになります(結局移行したのはソースリポジトリだけで、コミュニティはSourceForgeのままでしたそのコミュニティも FireGiant 立ちあげ後にMLを引っ越して今はSourceForgeでの活動は何も残っていない)。
その Codeplex も閉鎖することになり、今の [Github](https://github.com/wixtoolset) に移行します。
今のGithubを見るとわかりますが、昔と違って、リポジトリを小分けにしたこともあって、いっぱいプロジェクトがあります。

# ライセンスは？
今の OSS のライセンスは [Microsoft Reciprocal License (MS-RL)](https://opensource.org/licenses/ms-rl) です。詳しくは [WiX Toolset License](https://wixtoolset.org/about/license/)を参照してください。
ちなみに、公開当初はCPL(Common Public License Version 1.0)でした。これこそまさに昔話だわｗ

# 現在の管理は？
OSSとしての公開当初は、Microsoft の管理下でした。とはいえ、窓口その他何から何までRob一人でやってたアフターファイブプロジェクトですが。
その後、スピンアウトする際、管理団体兼で立ちあげた FireGiant に移管されます。
当時は、このままIS同様少しずつ分離していくのかな？と思ってたんですが、何年か前に [.NET Foundation](https://dotnetfoundation.org/) に移管され、またMSのおひざ元に戻って今に至っています。
普通にかかわっている分には、どこの管理下であっても影響はないんですけどね。

# FireGiant って？
WiXの開発メンバーの主力がいる会社で、主に WiX の開発サポートやコンサルティング的なことをやってるみたいです。日本国内には代理店的なものも連絡窓口的なものもないし、サイトにある情報以外知らないんですけどね。
ちなみに、msiからMSIXにコンバートするツールとかOSSで公開されていない有償機能なんかもあったりします。

# 今もアクティブなの？
OSSの永遠のテーマの一つ。アクティブかどうか？ですが、以前に比べればかなり静かにはなっていますが、今でもアクティブなプロジェクトとして動いています。
とはいえ、WindowsInstaller自体がWindows7当時に、Ver.5 にアップデートして以後、特に大きな変更もなく、現在に至っており([VersionNT](https://docs.microsoft.com/ja-jp/windows/win32/msi/versionnt?WT.mc_id=DT-MVP-32182)プロパティでWindows10の判定もできないｗ)、実際オワコン？というくらい何もしていないに等しい状況なので、それを使うWiX側の変更も必然的に小さくなってしまうのは仕方がない部分なのかもしれません。
ちなみに、エンジンの最新安定版は、3.11.2 でリリースされたのは 2019/09 なので１年以上更新がなかったりします(その後もソースの修正は行われているので、そのうち 3.11.3が出るんじゃないかな？)。

# WiX の特徴って？
WiX の特徴は大きく二つ。
一つ目は、名前にもあるXML形式によるDSL(Domain Specific Language:ドメイン特化言語/ドメイン固有言語)であるということ。
XML形式のDSLの特徴の一つでもあるのですが、宣言型言語と呼ばれる分野の構文体系を持つことは大きな特徴の一つだと思います。

今でこそ、宣言型の記述も目新しい感じはなくなっていますが、2004年というとWPF(XAML)もまだ出ていない時代(WPFは2005年)だし、当時はとっつきにくいと思ってる人も多かったんじゃないかなぁ？という気がします。ちょうどDSLが流行ったころでもあるけどｗ

また、WindowsInstaller がそうだからというのもあるのですが、WiX の構文はかなり複雑な部類で、wix.xsd というコア構文のスキーマファイルだけで約700Kあります。
他にもたくさんスキーマファイルはあるんですが、全部のスキーマファイルを合わせると1Mを超える大作だったりします。
XMLで頑張って書かなきゃダメなのか？というとそういうわけでもなく、VSの拡張機能にもいくつかGUIでの拡張機能があったりしますし、単体動作のものとしては、WixEdit も有名です。

もう一つの特徴が、C ライクなビルドエンジン。
コンパイル＋リンク方式という分割コンパイル方式はもちろん、Cのスタティックライブラリみたいな wixlib というライブラリ(msmとは根本的に異なる)のビルド、C のようなプリプロセッサシステムの活用による define 置換やマクロ機能。

プログラム開発したことがある人ならわかると思いますが、Debug/Release でビルド構成を変えたり、リリース条件によって複数のリリースビルドを持っているなどもこれらを使うことで簡単に対応することができます。

それと、同一ソリューションに限定されますが、プロジェクト参照することで、ビルド後イメージをプロパティ変数として受け取ることができます。

# いつから使ってるの？
まぁ昔を思い出したからこれを書いてるというのもあるんですが、本格的に使うようになったのは 2005年の中ごろからのようですね。そのころには、自前のデコンパイラを書いてプロジェクトの移行作業なんかをしていたようです。
WiX 2.0 世代とは言え、2006 年には Codezine に記事を載せてたりもします。

# 実際どうなの？
コーディングという点では、テキストベースであることのメリットが大きいです。テキスト検索や置換はも簡単にできるし、同じような処理はコピペしてちょこっと書き換えとかでも対応可能。
もちろん、ComponentId なんかをマクロ定義にしてまとめて管理したりなんてこともできるし、バージョンアップも、Gitベースなら、ブランチ切って、新バージョン向けの書き換えだけで済ませるとかもできる。
もちろん、フォークしてそこから書き換えていくことも可能。

差分開発が多いパッケージベンダーさんだと、一度でもバージョンアップ経験したら、ISにはもう戻れなくなるんじゃないかな？という程度には開発効率が高いです。

ビルド周りのカスタマイズ性の高さも特筆しておくべき点の一つと言えます。最近はやりの CI/CD にももちろん対応。ビルドエンジンである WiX そのものは nuget での取り込みもできるので、ビルド環境は MSBuild のインストールされたWindowsマシンさえあれば動作します。
WiXのビルドエンジンはもともと拡張可能な形で作られているので、オリジナルを書き換えることなく自由にカスタマイズができます。
実際のところ個のカスタマイズ機能は、署名付けのために用意されているんですが、それ以外のビルドロジックもほぼ全面的に書き換えできます。
実際私も、ビルド時自動バージョン更新という仕組みを搭載して、ビルドするたびに自動的にバージョンがインクリメントされるようにしていたりします。

なんて、とりとめもないことを書いてみました。