InDesign UXPプラグインを作ってみた(その3)注意事項とまとめ
まず、今回出会った種々のトラブルから。
プラグインをテスト中、散々フリーズしたりクラッシュしたんですが、主なフリーズは次のコードによるものです。
alert()、confirm()、prompt()
What's New?(Changelog)ページによると、この3つの命令はUXP 7.0でサポートされました。InDesign 18.5はUXP 7.1.1ですから当然サポートされているはず、と思ってテストしてたんですが思った結果にならないわけです。そこでコミュニティフォーラムに投げたら、既知の問題ですって。InDesign 19.0 / UXP 7.2で直すよって。
このような明確な返答が来るのがEcosystemチームのいいところなんですけどね、そういう状況を見ると正式対応は19.0なのかなと思っちゃいますね。
なお、数回クラッシュしたんですが、こちらの原因は分かっていません。フリーズもここで挙げた問題以外にも要因がある気がします。いずれにせよUDTを起動した状態でInDesignを動かすと非常に不安定といえます。
manifest.jsonは文字コードをUTF-8(BOMなし)にしてください。BOM付きにするとUDTで読み込めません。[Add Plugin]をクリックして読み込もうとするとエラーになります。
最初のエントリで「プラグインの名前に日本語が使える」と書きましたが、開発ツールでは一部文字化けします。
下の方、「最初のプラグイン」と表示されなければならないんですが、残念です。
あと気になったのがテンプレートで作成されるhtmlファイルですね。その構造が
<html> <head>...</head> <style>...</style> <body>...</body> </html>
となっています。おかしいだろ。MDNに「<style> 要素は文書の <head> 要素の中に入れる必要があります」と書いてあります。まあ、これでエラーもなく動いてはいそうなんですが。ただ、私は必ず書き直します。気持ち悪くてしょうがないので。
以上のようにInDesign 18.5のUXP pluginはまだベータ版といっていい仕上がりです。実務で使うにはまだ早いかな、というところです。記事の中で多くAdobeサイトのリンクを貼っていますが、これもかなりの頻度で更新されています。まだまだ発展途上という感じですね。
Ecosystemチームも進化していて、サイトでは
const myInDesign = require("indesign"); const app = myInDesign.app;
と書いていますが、テンプレートでは
const { app } = require("indesign");
になりました。これでappという変数が使えるようになっていると。JavaScriptではこういう書き方ができるらしいです。(らしいです、っていうのはこの書き方を説明しているサイトが見つからないんですね。まず、何で検索したらいいかわからない。)
UXP pluginについてはコミュニティフォーラムとは別にCreative Cloud Developer Forumがあります。疑問点や要望があればそちらに投稿すればよいです。私はUXP scriptingについてはコミュニティフォーラム、UXP pluginについてはCreative Cloud Developer Forumかなと思って投げましたが、多分どちらでもよいです。担当者は両方見ているので。
もうひとつ感じたのは、現時点ではBOMなしUTF-8が前提で、「エンコードって何?」状態なんですね。そのため日本語も含めた多言語対応にかなりの問題を残しているんじゃないかということです。このあたりは日本語ネイティブの皆さんがどんどん携わっていかないといけないだろうということです。みんな、おいで!
(コメントも見てね)