RPGツクールMZのバージョン1.3.2がリリースされました。
先々週公開のバージョン1.3.0で仕様追加されたサブフォルダ関連の改善がなされましたが、サブフォルダ内にjsファイルが格納されても正しくプラグインが動作するような修正対応「サブフォルダ内のプラグイン名取得」が、これによって逆に動作しなくなってしまいました。なんちゅうことしてくれた……。
当サイトのプラグインも再修正しました
というわけで、拙作プラグインも先日修正したものを再び修正しました。河原で積んだ石を鬼(公式)に壊された気分w
サブフォルダを使っていなければ特に影響はありませんが、6月23日以降にダウンロードされた方は、お手数ですが修正版を再度ダウンロードお願いします。
プラグイン名の自動取得
ただ元に戻すのは癪だったので、この機会にプラグイン名を自動的に取得できるようにしてみました。
具体的には、
const pluginName = decodeURIComponent(document.currentScript.src).match(/([^\/]+)\.js$/)[1];
として、自分のファイルパスからファイル名を取得しています。
従来はプラグインのファイル名を変更すると動作しなくなっていたのですが、これによりファイル名を変更しても動作するようになります。
ただ、プラグインファイル名については、ユーザーで勝手に変更することを想定していないケースが多く、特にMZ以降、@base
や@orderAfter
などのプラグインの依存関係を定義するアノテーションも登場したため、ある程度の知識がないとファイル名の変更は推奨されません。
1.3.2修正の要点
結局のところプラグインのサブフォルダ問題は、
- プラグインパラメータやプラグインコマンドはサブフォルダ名を含まない、プラグインファイル名のみをキーにして取得
- 同名のプラグインが別フォルダに存在する場合は重複している旨の警告が出る
という形で対応がなされたようです。
つまり、プラグイン名は別フォルダであっても同名のファイルを避けるようにするべきで、サブフォルダは純粋に、ユーザーが多数のプラグインファイルを分類して整理できるようにした便利機能と位置づけられた模様です。
既に1.3.0の時点で対応修正した分が無駄にならないように、とか、プラグインIDとファイルパスを別々に指定できるように、とかの提案もあったようですが、結局1.3.0対応の修正は思いっきり無視されて、最小限の修正で済むような対応となった模様です。
まあ、一時のマズい仕様に対応するために余計なコードを増やしてもしょうがないので、これはこれで仕方ないかと。明らかに影響範囲の広すぎる仕様変更だったので、性急に個人で対応せず、公式の発表を待てばよかったかもしれませんね。我々が騒いだから、公式も影響の大きさに気付いた、という面もありそうですが……。
お陰でコアスクリプトの理解も進んだし、.match
で( )
に入れた部分を簡単に取得する方法も今回の修正を通じて知れたので、収穫もあった……とポジティブ思考。
コメント