3dsmax2023 でマクロにブロックコメントを使うと起動時にエラーになる

2022年11月28日

 超お久しぶりです。皆さんお元気でしたでしょうか。僕は特に体調を崩したりとかいうこともなく非常に元気にしております。最近会社では新設された技術開発室でマネージャを任されるという事態になり、あちこち顔を出すことが多くなってきてます。どこかで見かけたらぜひお声がけください。

3dsmax2023 で発見したマクロの問題

 さて、そんな具合に管理方面の仕事が増えてきて自分がコードを書くことはだいぶ減っているのですが、過去に作ったもののメンテやら何やらを中心に一応実作業もしてます。そんな中で、3dsmax2023で、2022まで普通に動いていたマクロスクリプトをそのまま持ってくるとエラーになるケースがあり、どうもブロックコメントがNGであるということがわかったので紹介します。

※ 追記あり。コメントで指摘を頂き、ブロックコメントが全部NGなのではなく、マクロ宣言と本体の間に書くのがNGだということがわかりました。(2022以前ではOKだったのでやはり2023からの変更ではありますが)

MaxScript におけるコメントに関して

 まず前提知識として、MaxScriptにおけるコメントの記述に関しておさらいしておきます。そんなこと知ってるという人は読み飛ばしてください。 

 多くのプログラム言語には実行コードとは関係ないコメントを記入する書式が用意されていて、これまた多くの言語で、ブロックコメントとインラインコメントの二つが用意されています。MaxScriptの場合は以下の二種類です。

-- 1行コメント
-- 「--」 と記入するとそこから後ろがコメントになる

a = 0 -- aを0で初期化 といった具合に行の途中からコメントにすることもできる

/*
ブロックコメント
/と* を並べて書くととそこからブロックコメントが始まり、
改行を含んで複数行のコメントを書くことができる。*と/を並べて書いたところで終わる。
*/

3dsmax2023 で問題が起こるケース

 ようやく本題。今回、3dsmax2022 以前のバージョンに向けて作成、配布していたツールを2023 でも使えるように用意していたところ、3dsmax を起動した際にマクロがロードされない、という事態が発生しました。スクリプトリスナーを見ると下記のようになっていました。

「/*」が不明なキーワードと言われる

 ここで検証したコードを載せておきます。

 わずかこれだけ。これを、Usermacroフォルダに格納し、3dsmax2023 を起動すると上記のようにリスナーにエラー(というか黒文字なのでエラー扱いではない?)が出て、このマクロは評価されていない状態になります。

 ここでやっかいなのは、おかしいな、と思ってこのマクロスクリプトをスクリプトエディタで開き、そこで評価(Ctrl+E)すると、なんの問題も起きずに評価され、このマクロが使えるようになるんですね。起動時の読み込みでのみ、エラーになります。なんでだよ。

 解決策は簡単で、ブロックコメントを使わずに全部一行ずつコメントにすればOKです。

 ブロックコメントでマクロ宣言よりも前に書く、のが良いようです。(詳細後述)

 こうすると起動時のエラーは出なくなり、正常にロードされます。

結論~追記 2022.11.28

 ブロックコメント使うのやめましょう、という話です。他の言語でもドキュメント自動生成ツールみたいなものを使う際に、ブロックコメントよりも通常の一行コメントの方が推奨されていたりするケースがありますし、なるべくコメントは一行コメントで書いた方が良さそうだと思っています。

kotenpa さんからコメントで、ブロックコメントが全部NGなのではなく、マクロ宣言と本体の間に書くのがNGだというご指摘をいただきました。検証してみたところ以下のようなことがわかりました。

/*
    マクロ宣言より前に書くのはOK。
    3dsmax 本体に最初から搭載されているマクロはここにブロックコメントで説明が書いてある。
*/

MacroScript TestMacro
ButtonText:"TEST"
Category:"TG_Tools"

/*
    マクロ宣言の後、本体のブロックが始まる前の部分に書かれたブロックコメントはNG
    僕は2022までここにマクロの説明を書いていたのでことごとくエラーに…
*/

(
    /*
        マクロ本体の中ならブロックコメントを書いてもOK
    */
    print "test done."
)

 マクロ宣言を書いた後、マクロの本体が始まる前(マクロ本体の()の前)にブロックコメントを書くとNG(一行コメントならOK)で、マクロ本体の中であればブロックコメントもOK、という挙動のようです。この挙動は3dsmax2022 には無かったのでやはり2023から何か変化したのだと思います。

 どうするのがベストプラクティス?と思って、3dsmax に標準搭載されているマクロを見てみたところ、マクロ宣言よりも前にブロックコメントで説明が書かれていました。ちなみにサードパーティのV-Rayのマクロは先頭がマクロ宣言で、本体内に一行コメントでコメントが記載されているのみでした。

 僕は個人的に、マクロ宣言の後にそのマクロの説明をブロックコメントで書いておいてから本体を書く、という感じにしていたのでこれが3dsmax2023でエラーになった、という事態でした。いったん一行コメントに直すという方法で対処したのですが、公式のマクロに習い、マクロ宣言よりも前に出す、という形式にしようと思います。