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にドロップして、無事インストール完了ダイアログが表示されるか、マクロは実行出来るかを確かめてみてください。