MaxScriptTip: 簡単なMZPインストーラ作成

3月 06, 2016
Maxに簡単にスクリプトをインストール出来る、MZPパッケージの作成方法について。

MZPは一度作ってしまうと何度も使い回せて便利なのですが、最初は何となく取っ付きづらい印象があると思います。
そこで、今回は必要最低限でのMZPパッケージの作り方を説明します。

今回作成するMZPパッケージは以下のファイルで構成されています。

  • マクロファイル (sample.mcr)
  • 暗号化済みスクリプトファイル (sample.mse)
  • mzp.run
  • インストーラスクリプト (install.ms)

マクロファイルとスクリプトファイルをそれぞれ分離したのは、マクロファイルを暗号化出来ないというMaxの仕様の為です。(実際には作れますが、動作しません。)
スクリプトそのものはsample.msに書き、暗号化後、それをマクロから呼び出すというフローを想定しています。

最終的に、上記4つのファイルをZIP形式で圧縮することで、パッケージを作成します。

mzp.run

name "SampleTool"
version 1.00

copy "sample.mcr" to "$userMacros/SampleTool"
copy "sample.mse" to "$userScripts/SampleTool"

run install.ms
drop install.ms

clear temp
mzp.runはMZPパッケージがMaxにドロップされた時、最初に実行されるコマンドファイルです。
ただしコマンドとは言っても、MaxScriptを直接使用するわけではなく、mzp.run専用コマンドを使用します。
各コマンドについて簡単に説明します。

name
ツール名を指定します。
version
ツールバージョンを指定します。必ずしも浮動小数である必要はありません。
copy
パッケージ内のファイルを指定したフォルダにコピー(配置)します。
指定出来るフォルダ名はリファレンスを参照してください。
記号パス名
注意点として、Program Files下のMaxインストールフォルダへファイルをコピーする時、Maxに管理者権限(もしくはフォルダアクセス権)が無いとコピーに失敗します。
その場合、同名の$user~フォルダにインストールする等して回避する必要があります。
また、コピー先にフォルダが無かった場合、自動的に作成されます。
run
.mzpがドラッグ&ドロップ以外の方法で実行された時、指定したスクリプトを実行します。
このコマンドはrun.mzp内で複数回実行する事が出来ます。
drop
.mzpがMaxにドロップされた時実行されます。ただし、.mzpがドロップ以外の方法で実行された時は実行されません。
また、このコマンドはmzp.runにつき1回しか実行出来ません。
clear
.mzpパッケージが一時的に展開されたtempフォルダを削除します。

run, dropを別々に指定しているのは、.mzpの実行のされ方でどちらが呼び出されるかが代わるからです。runは複数回実行出来ますが、dropは出来ないので、基本はinstall.msを呼び出すだけにしておいて、細かい処理はinstall.ms内でやるようにした方がいいかもしれません。

その他いろいろコマンドはありますが、全て説明しているとキリが無いので、詳細はリファレンスを参照してください。
Zip ファイル スクリプト パッケージ

install.ms

(
    local msgTitle = "SampleTool Installer"
    local mcrPath = @"$userMacros/SampleTool/sample.mcr"
    
    if doesFileExist mcrPath then
    (
        fileIn mcrPath
        local msg = "Installation Completed.\n" + \
                    "---------------------------\n" + \
                    "Category: SampleCategory\n" + \
                    "MacroName: SampleTool"
        messageBox msg title:msgTitle beep:false
    )
    else
        messageBox "MacroScript not found." title:msgTitle beep:true
)
mzp.runから呼び出されるインストールスクリプトです。
絶対に必要というわけではないですが、今回はインストール結果の表示の為に使用しています。
インストール先のカテゴリ等表示してあげると親切かもしれません。

インストール後にfileInでマクロをロードしています。
こうすることでMaxの再起動なしに、すぐにマクロを使えるようになります。

sample.mcr

macroScript SampleTool
category:"SampleCategory"
(
    on execute do
    (
        try
            fileIn @"$userScripts/SampleTool/sample.mse"
        catch
            messageBox "Script not found.\nsample.mse" title:"SampleTool"
    )
)
暗号化済みスクリプトを呼び出す為のマクロファイルです。
スクリプトファイルが存在すればfileInで実行し、無ければメッセージボックスを表示します。

sample.mse

暗号化したスクリプトファイルです。
暗号化したスクリプトは単体でツールバー等に登録できないという致命的な問題が有る為、ほぼマクロスクリプトとペアでリリースするのが基本になります。
マクロスクリプトが必要ないケースととしては、スクリプトプラグイン等、startupScriptsに配置してその後呼び出さないスクリプト等があります。


パッケージ作成

最後に作成した4つのファイルを全て選択し、ZIPファイルとして圧縮します。
ここで重要なのはファイルを入れているフォルダではなく、ファイルそのものを選択して圧縮する必要があるという事です。
最後にZIPファイルの拡張子を.mzpに変更して完成です。
Maxにドロップして、無事インストール完了ダイアログが表示されるか、マクロは実行出来るかを確かめてみてください。

Related Articles