#2」が開催されました。会場をお貸しくださったMD5500さん、そして参加してくださった皆様、ありがとうございました。次回は9月開催の予定です。近づいた頃Twitterやブログで告知しますので、よろしくお願いします。以下は今日いただいた質問のおさらいです。スクリプトを実行する際に変数を覚えておきたい例えば以下のような単純なスクリプトを例にみてみます。}これは組版ハイライト機能の一部のオン・オフを切り替えるスクリプトです。最初にactiveDocumentの「代替フォント」と「代替字形」の組版ハイライト設定をmyHighlightOptionという変数に代入しています。変数をそれぞれ用意してあげる形でも当然よいのですが、今回はJSON(JavaScriptオブジェクト記法)を用いて変数の管理をすっきりさせてみました(JSONについては後ほど)。現在の設定を変数myHighlightOptionに覚えさせたら、一旦ふたつをfalseにします。本来やりたい処理が間に入っているという想定です。確認のためにalertで設定値を覗いています。最後に、スクリプトの処理を終えたらドキュメントの設定を元に戻してあげる、という命令を入れておしまいです。ふたつの設定を予めオンにしてから実行すると処理の流れが分かりやすいと思います。これは1つのスクリプトで完結させる場合を想定したものです。コード中の「処理A」と「処理B」が同一のスクリプトでなかった場合にはまた違った処理が必要です。要するに、前半の「ドキュメント設定に手を加える処理」と後半の「元の設定に戻す処理」が別々のスクリプトだった場合です。いうわけで、先程のスクリプトを2つに分割してみます。}こんな感じにして、InDesignからスクリプトAのあとにBを実行してみてください(ESTKから実行すると変数が保持されて違う結果になる場合があります)。結果はスクリプトBがエラーで実行できないはずです。エラーは変数myHighlightOptionが存在しないというものですが、宣言していないので当然です。今度はこの2つのスクリプトの1行目に、以下の1文を加えてください。"testScript"その上で、改めてInDesignからふたつのスクリプトを実行してみてください。今度はエラーなく実行できたと思います。変数の宣言をしていないスクリプトBがエラーなく実行できるのが少し不思議かもしれませんが、これが「ターゲットエンジン」の指定です。ターゲットエンジンを「main」以外に指定すると、スクリプトは処理が終わってもメモリを解放しません。要するに、一度定義した変数などをわざわざ解放(≒削除)しない限り、ずっと覚えておくようになります。同じターゲットエンジン間で変数を共有できるようになるのです。このお陰で、スクリプトAで宣言した変数を、スクリプトBで呼び出す、といったことが可能になります。注意してもらいたいのは、変数が使い回せるということがリスクになる可能性もあるということです。同じエンジンで動くスクリプトが複数あると、たまたま同じ名前の変数を定義してしまった、ということが起こり得ます。同じエンジンのスクリプト同士で変数の宣言があったりなかったりするために、後々見返した際に変数の宣言場所が分からなくなったりします。変数の扱いには細心の注意を払い、変数の出どころ=宣言元をコメントアウトするなどして対応する必要があるでしょう。JSONについて今日のもくもく会ではJSONについての詳しい説明は省いてしまいました。基本的にはWikipedia等を参考にしてもらいつつ、大事なところだけ。JSONとは以下のような形でオブジェクトを指定します。//255,255,255オブジェクトのプロパティのように取り出す方法(前者)と、連想配列のように取り出す方法(後者)があります。このときの「maker」「name」「color」をキー(key)、「HONDA」「ODESSEY」「white」をそのキーに対する値(value)といいます。JSONではキーを文字列型として宣言する必要があります。255]}このように宣言することも可能ですが、これは厳密にはJSONとして誤りです。キーは文字列型、ということは意識しておいてください。連想配列と先述しましたが、このmyCarオブジェクトは下記のように宣言することもできます。255];普通の配列と連想配列が違うところは、連想配列がlengthプロパティを持たないということです。普通のfor文で順繰りに中身を取り出すといったことができません。連想配列の中身を取り出す場合は、for...in文を使います。}ここで注意すべきなのは、定義した順で取得できるかどうかは担保されないという点です。この例では「maker」「name」「color」という順で定義しましたが、for...in文は順番を考慮しません。取り出す際に定義した順番で取り出せるかどうかは保証されていないのです。このfor...in文は、何も連想配列のためのものではなく、その他のあらゆるオブジェクトのプロパティを取得することができます。}こうするとappのプロパティをまとめて取得できる、という具合です。うむむむ、想定していたよりも長くなっていまいました^^;;もくもく会の成果もついでに発表しようかとも思っていたのですが、それはまた今度のエントリーに譲りたいと思います。大した内容ではないのですが、ちょっとしたInDesignの不具合を...2017-10-03アートボードから飛び出た部分を収めたいイラレのスクリプトを久しぶりに作ってみました。目指しつつ、バグの検証や後工程の事をぼんやり考えるDTPブログです。Uske_Sはてなブログをはじめよう!uske_Sさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。