CEPにおいてExtendScriptから返ってくる値を真剣に考えてみる。
*今回TypeScriptを使った記事になります。
何度も述べていますがExtensionの開発においてパネルとExtendScriptを繋ぐ部分というはエラーが起きやすい箇所であります。開発するExtensionの仕様が複雑になればパネルとExtendScriptの間で色んな値のやりとりが発生します。この時に厳格パラメータの管理を行なっていないと思わぬエラーが発生して延々とパネルとExtendScriptのデバッグをする羽目になります。
ExtendScript側からパネル側に返ってくる値は常にstring型
おさらいになりますがExtendScirpt側から返ってくる値は常にstring型です。このためObjectは必ずJSON.stringifyでstring型にしてからパネル側でJSON.parseでオブジェクトに変換する必要があります。その他Object以外のあらゆる値も常にstring型として返ってきます。
nullもnumberもbooleanも全てstring型として返ってきます。TypeScriptでの型の管理もこれではやりづらくバグ発生につながります。いままで私も適当に扱ってきたのでが今回この受け取る値の型についてTypeScriptでどうやって扱うのか考えてみます。
環境
今回TypeScriptを使った開発になります。型付を行なって極力受け取り時にミスがなくなるようにします。今回ExtendScript側もTypeScriptで開発するのでその辺の開発環境に関してはCEP上のExtendScriptをモダンな環境で開発する(Webpack + TypeScript + Babel)を参照してください。
ExtendScriptの実行が成功か失敗で大きく分ける
Fetch APIなんかもそうですが投げた要求に対して返ってくる値は成功か失敗かエラーコードで判定できます。エラーの場合もエラーコードと別にエラーの詳細をテキストで返してくれるので投げた側も投げた先で何が起こっているか分かりやすいです。今回これに倣って大きく成功か失敗かパネル側で判定できるようにします。具体的には以下のような型のオブジェクトを常にExtendScript側から返すようにします。
失敗時と成功時で同じstatusのプロパティを持たせています。これによりTypeScript上でstatusの値を調べさせることによりTypeScriptの推測がスムーズにいきます。
エラーの種類、返ってきた値によって状態を表したい場合などは細かくstatusの種類を増やしてもいいでしょう。後はExtendScript側のあらゆる関数の返す値を上記の型に沿ったオブジェクトを常に返すようにするだけです。
JSON.parseメソッドによって変換された後ならオブジェクト内のあらゆる値は正常な型に変換されます。なのでparamプロパティにnullやboolean型の値を入れればそのまま元の型の値のまま扱えるようになります。ExtendScriptの実行が正常に処理されたかどうかを明確にされた状態で値を受け取れつつ値の型もそのままの状態で返せるので安全に開発できるようになるでしょう。