Nullsoft Scriptable Install System

Nullsoft Scriptable Install System  は、スクリプト駆動型のWindows用インストールシステム。Winampの開発元であるNullsoftがオリジナルを開発した。InstallShieldのような商用プロプライエタリ製品の代替として広く採用されるようになってきている。

NSISはいくつかのフリーソフトウェアライセンスでリリースされており、主なライセンスとしてzlib Licenseを採用している。したがって、フリーソフトウェアである。

1. 歴史
-----

NSISはWinampの配布のために開発された。Nullsoftが以前に開発したPiMP  をベースにしており、SuperPiMP と呼ばれることもある。バージョン2.0a0以降SourceForgeにプロジェクトを移行し、Nullsoft以外の開発者がプロジェクトに普通に関与できるようになった。NSIS 2.0 が実際にリリースされたのはそれから約2年後である。

NSISバージョン1はいろんな意味でWindows Installerに似通っていたが、スクリプトが書きやすく、より多数の圧縮フォーマットをサポートしていた。NSISバージョン2は効率的なGUIで、LZMA圧縮、各種言語、使いやすいプラグインシステムをサポートしている。

1.1. POSIX
----------

バージョン2.01では、初めてPOSIXプラットフォームでのコンパイルが可能になった。これにより、Wineなどを使わなくともLinuxやFreeBSDでWindows用インストーラのクロスコンパイルが可能となっている。今のところ、x86だけをサポートしている。

2. コンセプト
--------

2.1. スクリプト
----------

NSISコンパイラプログラム //makensis// は、次の例のようなスクリプトをコンパイルしインストーラの実行ファイルを作成する。スクリプトの各行には1つのコマンドが書かれている。# スクリプト例 Name "Example1" OutFile "example1.exe" InstallDir "$PROGRAMFILES\Example1" Page Directory Page InstFiles Section SetOutPath $INSTDIR File ..\makensis.exe SectionEnd

2.2. ユーザインタフェース
---------------

バージョン2.0で新たに //Modern UI//  と呼ばれるGUIを導入した。MUIはウィザード風インタフェースを持っている。ウェルカムページ、完了ページ、言語選択ダイアログ、コンポーネントの説明エリア、従来よりも幅広いカスタマイズオプションなどをサポートしている。# Modern UI のスクリプト例 !include MUI.nsh Name "Example 2" OutFile "Example2.exe" !insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_LICENSE "license.rtf" !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_COMPONENTS !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_FINISH !insertmacro MUI_LANGUAGE "English" !insertmacro MUI_LANGUAGE "German" !insertmacro MUI_LANGUAGE "French" Section "Extract makensis" SetOutPath $INSTDIR File ..\makensis.exe SectionEnd

2.3. プラグイン
----------

NSISは、インストーラとやり取りできるプラグインで拡張可能である。プラグインはC言語、C++、Delphiで書くことができ、インストール時の各種タスクを実行したり、インストーラのインタフェースを拡張したりする。プラグインはNSISのスクリプトから1行で呼び出すことができる。

NSISパッケージにはいくつかのプラグインも含まれており、スプラッシュスクリーンの表示、特別なページの表示、背景に画像を表示する、ウェブサイトからのファイルのダウンロード、何らかの計算を行うもの、ファイルへのパッチ適用などのプラグインがある。

その他のプラグインはオンラインで入手可能で、[1]やPythonの[2]などがある。

3. 特徴
-----

オーバーヘッドが小さい 
zlib、bzip2、LZMAによる圧縮
スクリプトベース
多言語対応
プラグインサポート
スクリプトプリプロセッサ
[3]

4. NSISを使っている主な製品
-----------------



5. GUI
------

NSISプロジェクトはテキストファイルの編集だけで構成できるが、いくつかのサードパーティー製編集ソフトウェアもある。

[4] - Eclipseプラットフォーム用モジュール。NSISスクリプトの編集、コンパイル、検証が可能。
[5]

6. インストーラ用インタフェース
-----------------

Modern UIを拡張・置換する新たなインタフェースを開発するプロジェクト群が始まっている。[6]や[7]といったインタフェースは、InstallShield風の見た目を採用している。[8]は見た目をより簡潔にしているが、機能的にはModern UIと同等である。

7. 生成インストーラ
-----------

生成したインストーラは1つのPortable Executableとなり、インストール対象ファイル群はそのインストーラにアーカイブされている。NSISインストーラ自体は34KBのオーバーヘッドであり、スクリプトは実行ファイルのコードにコンパイルされている。スクリプトがコンパイルされるため、インストーラから元のスクリプトを簡単に取り出すことはできず、リバースエンジニアリングが必要になる。

アーカイブされたインストール対象ファイル群を取り出す場合は、7-Zip、Total Commander のプラグイン "[9]"、FAR Manager 用の同名の[10]が使える可能性がある。

アーカイブには以下のようなフォルダがある。

$PLUGINSDIR : インストールルーチン用プラグイン群
$INSTDIR : インストール中に使うファイル群
$_OUTDIR : インストール対象ファイル群

8. Unicodeサポート
--------------

NSISの公式リリースではUnicodeをサポートしていないが、[11] がUnicodeサポート版NSISを開発・保守している。

9. NSIS Media というマルウェア
----------------------

NSIS Mediaというマルウェア企業が広く知られている。NSIS MediaとNSISは名前が似ているだけで全く無関係である。このため、NSISを使ったインストーラには必ずマルウェアが含まれていると思っている人もいるdate=2009年8月}}。インストーラが何であれ、インターネットからのダウンロードには常に注意が必要である。

一部のアンチウイルスソフトでは、NSISdlなどのプラグインをトロイの木馬として認識することもあった。これも間違いである。NSISはスクリプトシステムなのでマルウェアの開発にも使えるが、それがNSISの目的ではないし、そういう観点では大概のプログラミング言語にも同じことが言える。

10. 関連項目
--------

Inno Setup
InstallShield
Microsoft Windows Installer
WiX
Windows 10
インストーラ

11. 参考文献
--------

12. 外部リンク
---------

[12]
[13]
[14]