12
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

新しいWindows用Vimのインストーラーを作っている話

Last updated at Posted at 2018-12-13

公式インストーラー

Windows用Vimの公式インストーラーは、vim.orgで公開されています。Vimの原作者である Bram Moolenaar 氏による唯一の公式ビルドで、現時点で公開されているバージョンは 8.1.0001 (ファイル名: gvim81.exe)です。ただ更新頻度は低く、大抵はマイナーバージョンアップの直後や、重大なセキュリティー問題があった場合などにしか更新されません。

公式ナイトリービルド

そこで、私と Christian Brabandt 氏 (@chrisbra) で立ち上げたのが、vim-win32-installerです。これは、毎日ドイツ時間の午前0時にVimの公式リポジトリーをチェックし、もし更新があれば、インストーラーとzipパッケージを自動で作成するというものです。自動ビルドであるため、不安定なバージョンが公開されることもありますが、最新バージョンを簡単に試せるという利点があります。(本日(12/13)時点での最新バージョンは 8.1.0578。)
GitHubのVim organizationの配下にある公式のナイトリービルドですが、あくまでナイトリービルドであるため、公式なリリースではなく、準公式的な扱いである点には注意が必要です。

NSIS

いずれのインストーラーもNSISというソフトを使って作成されているのですが、以下のような問題が指摘されてきました。

  • 見た目が古臭い。
  • インストール中・アンインストール中にコマンドプロンプトが開かれて邪魔だ。
  • インストール中・アンインストール中に何度もメッセージボックスが開かれて邪魔だ。
  • メッセージボックスのせいで、サイレントインストールができない。
  • 多言語対応していない。

以下はスクリーンショットの例です。

最初に表示されるメッセージボックス:
vim-old-1.png
コンポーネント選択画面:
vim-old-2.png

MUI2対応インストーラー

これらを解消するために作られたプロジェクトが Guopeng Wen 氏 (@gpwen) による、vim-installer-mui2です。

  • NSISのModern UI 2 (MUI2)という機能を利用することで、見た目を刷新するとともに、多言語にも対応。
  • コマンドプロンプトを開かないように修正。
  • メッセージボックスを開かないようにし、必要な情報はインストーラーの画面上に表示するように修正。
  • サイレントインストールに対応。

このように、指摘されていた問題はすべて解消されています。

このプロジェクトは、かつては本家に取り入れてもらうべく精力的に開発されていたのですが、本家に取り込まれる様子がなかったことからか2011年ごろには開発が停止してしまいました。

取り込まれなかった原因

gpwen氏のMUI2インストーラーが本家に取り込まれなかった理由は、おおざっぱに言うと変更が大きすぎたからでした。

実は、現行のインストーラーはNSISによるユーザーインターフェース部分と、install.exeという実行ファイルによるシステムへの登録処理部分の2つに分かれています。インストーラーの実行中にコマンドプロンプトが開かれるのは、このinstall.exeが実行されているからなのです。

gpwen版では、このinstall.exeの処理もすべてNSIS部分に取り込んでしまっていました。これにより本家に対する変更が非常に大きなものになってしまっていました。(スクリプトのサイズが元の10倍以上。)

一方、人によっては、zipパッケージを解凍し、install.exeを手動で実行してシステムへの登録のみ行うという使い方をしています。そのため、install.exeを削除するわけにはいかず、このままではNSIS部分とinstall.exeで同じような処理を二重管理せざるを得ません。この二重管理を避けたいというのも取り込まれなかった理由です。

新たなMUI2版

そこで今回、変更を少なくし、コードの二重管理も避けた新たなMUI2インストーラーを作成することにしました。今までの指摘に対応したうえで、さらにいくつか改善を行っています。

  • UIはgpwen版をベースとし、MUI2のきれいなUIを使いつつ、多言語にも対応。
  • システムへの登録部分はinstall.exeを使いつつ、実行時にコマンドプロンプトを表示しないように変更。(実は、gpwen版もかつてはそのような実装だったようですが。)
  • 邪魔なメッセージボックスもgpwen版同様に削除。
  • サイレントインストールに対応。
  • HighDPIにも対応し、高DPI環境での表示を改善。
  • インストール項目の選択を記憶し、次回のインストールでは自動で同じ項目を選択する。

こうして出来上がったのが、PR #3501 です。スクリプトサイズも本家の2倍程度で済んでいます。

以下はスクリーンショットの例です。

最初に表示される画面:
vim-mui2-1.png

コンポーネント選択画面:
vim-mui2-2.png

見た目もきれいになり、日本語表示されているのが分かります。

(VimConf Hackathonでも)Bram氏からの反応も悪くなく、数週間から数カ月のうちに本家に取り込まれるかもしれません。todo.txtにも以下のように記載されています。

Patch to simplify nsis installer. (Ken Takata, 2018 Sep 24, was #3479)
Now included in #3501, using MUI2.  Use the zip file to get the binary files:
https://github.com/vim/vim/files/2475621/nsis-icons.zip
Ready to include now.

Improve the installer for MS-Windows.  There are a few alternatives:
- mui2 installer improved by Ken Takata (2018 Sep 29)
- Installer from Cream (Steve Hall).
- Modern UI 2.0 for the Nsis installer. (Guopeng Wen)
    https://github.com/gpwen/vim-installer-mui2
-  make it possible to do a silent install, see
    http://nsis.sourceforge.net/Docs/Chapter4.html#4.12
    Version from Guopeng Wen does this.
- MSI installer: https://github.com/petrkle/vim-msi/
- The one on Issue 279.
Problem: they all work slightly different (e.g. don't install vimrun.exe).
How to test that it works well for all Vim users?

今後について

上記の新MUI2インストーラーは、本家にはまだ取り込まれていませんが、vim-win32-installerでは既に先行してダウンロードできるようになっています。リリースページgvim_8.1.xxxx_x86-mui2.exeが32bit版、gvim_8.1.xxxx_x64-mui2.exeが64bit版です(ファイル名に-mui2が付いている)。ぜひ、ダウンロードして現行のインストーラー(gvim_8.1.xxxx_x86.exe)と比較してみてください。

実際に使ってみて、意見や要望などがあれば以下にお寄せください。

2018-12-22 追記:
新インストーラーが v8.1.0616 として本体にマージされました。vim-win32-installerでは、v8.1.0618以降で新MUI2版が正式なインストーラーとなっています。

参考: 第三者によるインストーラー

公式版ではないWindows用インストーラーとしては以下のようなものもあります。

12
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?