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

投稿者: | 2016/03/06

今回は簡単にスクリプトをインストール出来る、MZPパッケージの作成方法について。

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

パッケージ構成

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

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

マクロファイルとスクリプトファイルをそれぞれ分離したのは、マクロファイルを暗号化出来ないというMaxの仕様の為です。(実際には作れますが、動作しません。)

スクリプトそのものはsample.msに書き、暗号化後、それをマクロから呼び出すというフローを想定しています。

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

mzp.run

mzp.runはパッケージがMaxにドロップされた時、最初に実行されるコマンドファイルです。
今回は最小限のコマンドのみで構成します。

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
name
ツール名を指定します。
version
ツールバージョンを指定します。
必ずしも浮動小数である必要はありません。
copy
パッケージ内の特定のファイルを、指定したインストール先フォルダにコピー(配置)します。
指定出来るフォルダについては記号パス名を参照してください。

注意点として、Program Files下のMaxフォルダへコピーする場合、Maxが管理者権限で起動されているか、もしくはフォルダアクセス権を取得していないとコピーに失敗します。
ユーザーフォルダ(Document下)にコピーする場合、この問題は発生しません。
また、コピー先にフォルダが無かった場合、自動的に作成されます。

run
.mzpがドラッグ&ドロップ以外の方法で実行された時、指定したスクリプトを実行します。
このコマンドはrun.mzp内で複数回指定する事が出来ます。
drop
.mzpがMaxにドロップされた時実行されます。
このコマンドは1つのmzp.runにつき1回しか実行出来ません。
clear
.mzpパッケージが一時的に展開されたtempフォルダを削除します。

run, dropはパッケージの起動方法によってどちらが呼び出されるかが変わります。
何故実行可能回数が違うのかは謎ですが、基本的にはinstall.msを呼び出すだけにしておいて、細かい処理はそちらでやるようにした方がいいかと思います。

その他いろいろコマンドはありますが、全て説明しているとキリが無いので、詳細はリファレンスを参照してください。

install.ms

mzp.runから呼び出されるインストールスクリプトです。
絶対に必要というわけではないですが、細かい処理を行う場合はここの中で行うのが良いと思います。
今回はインストール結果の表示に使用しています。

(
    local mcrPath = @"$userMacros/SampleTool/sample.mcr"
    if doesFileExist mcrPath then
    (
        fileIn mcrPath
        local msg = "Category: SampleCategory \nMacroName: SampleTool"
        messageBox msg title:"Installation Completed" beep:false
    )
    else
        messageBox "MacroScript not found." title:"Installation Failed" beep:true
)

メッセージ内容はお好みで。
インストール先のカテゴリ等表示してあげると親切かと思います。

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

sample.mcr

暗号化済みスクリプトを呼び出す為のマクロファイルです。
スクリプトファイルが存在すればfileInで実行し、無ければエラーメッセージを表示します。

macroScript SampleTool
category:"SampleCategory"
(
    on execute do
    (
        try
            fileIn @"$userScripts/SampleTool/sample.mse"
        catch
            messageBox "Script not found." title:"Sample.mse"
    )
)

こちらもエラーメッセージはお好みで。

sample.mse

暗号化したスクリプトファイルの本体です。
必ずしも暗号化していなくても構いませんが、今回はするものとして説明しています。

暗号化したスクリプトは単体でツールバーやショートカットに登録できないという致命的な問題が有る為、ほぼマクロスクリプトとペアでリリースする事になります。

マクロスクリプトが必要ないケースとしては、スクリプトプラグイン等でstartupScriptsに配置して、その後ツールバー等に一切登録しないケースがあります。

パッケージ作成

作成した4つのファイルを全て選択し、ZIPファイルとして圧縮します。

ここで重要なのはファイルを入れているフォルダではなく、ファイルそのものを選択して圧縮する必要があるという事です。

最後にZIPファイルの拡張子を.mzpに変更して完成です。

Maxにドロップして、無事インストール完了ダイアログが表示されるか、マクロは実行出来るかを確認してください。

コメントを残す

メールアドレスが公開されることはありません。