DTPab

印刷やデザイン、アドビ製アプリやスクリプトなど、雑多な技術ブログ

もくもく会#2レジュメ 解答編1

先日のもくもく会#2に合わせて作ったレジュメですが、ボチボチ解答例を上げていきます。興味のある方はトライしてみてください。

というわけで、まずは機能1「動作するInDesignのバージョンを指定する」です。

(function (){
var versionLimit = 8;
if (parseInt(app.version, 10) < versionLimit){
    alert("InDesignが対応バージョンではありません");
    exit();
    }
})();

この関数を、スクリプトの冒頭に記述すればOKです。
ただあくまでも解答例であって、これが最善の模範解答というわけではないです。あしからず。とはいえExtendScript初級者くらいの方には分かりやすくしたつもりです。

今回は例として「CS6以上で動作する」という仕様にしてみました。
app.versionスクリプトが動作しているアプリケーションのバージョンを取得するもので、InDesignで実行しているのであればリビジョンを含めた数値が取得できます。今回は起動するメジャーバージョンを特定できればいいので、小数点以下のサブバージョンを無視します。そのためのparseIntメソッドです。
parseIntについて詳しくはMDNなどちゃんとしたところを参照していただくとして、簡単な説明だけ。
parseIntには2つの引数を渡します。正確には1つめが必須、2つめがオプションで省略可なわけですが、その性質上(私見でもありますが)2つの引数をきちんと渡してあげます。
parseInt自体は、渡された第一引数を数値型に変換します。Intとついているので、お察しの通り、小数点以下の数値は捨てられて整数値に丸められます。
数値に変換します、といっても、僕らが普段使っている十進数以外にも数の表し方はいくつもあるので、それを「N進数で変換して」と決めるのが第二引数です。今回は10を渡しているので、parseIntは10進数で変換してくれます。この第二引数を省略すると、メソッド自体は「原則として十進数」で変換します。第二引数を省略した場合はメソッド任せになってしまうわけです。parseIntには必ず第二引数まで渡してあげたほうがよりミスの少ないコードになる、と僕は考えています。そういう意味での「私見」でした。
if (parseInt(app.version, 10) < versionLimit){
この部分は、実行しているアプリケーション(InDesign)が仮にCS5だとすると、変数versionLimitには8を代入していますので
if (7 < 8){
となり、式の評価はtrueになります。そうするとalertが実行され、exitスクリプトが終了する、という算段です。
形としては匿名関数にしています(functionをパーレンで括るやり方)が、煩わしければ普通に記述してもらってもいいと思います。要するに最初の行と最後の行を取っ払ってしまっても大丈夫です。その辺はお好みで。

バージョン評価の注意点としては、parseIntだと整数値しか取れないので、CS5とCS5.5が区別できません。その場合は代わりにparseFloatとして浮動小数点が取得できます。もしCS5とCS5.5環境をお持ちであれば試してみてください。
また、exitメソッドはInDesignが持つ特殊なメソッドです。IllustratorPhotoshopでは動作しませんのでお気をつけください。

最後に、説明抜きに自分が使う場合の短いバージョンを置いておきます。実際には変数を使わず下記のように記述することが多いです。ご参考まで。

if (parseInt(app.version, 10) < 8) exit();