2014-03-13

スクリプトでの環境設定への読み書きを簡略化する

After Effectsでは、プラグインの他にスクリプト機能によって様々な自動化を行うことが可能です。

そんなスクリプトでは、環境設定で独自の設定を保存し、自由に呼び出すことができます。
本来、外部ファイルへのアクセスはデフォルトでは制限されているのですが、スクリプトで環境設定へ情報を保存する場合はその必要がありません

例えば、ScriptUIでユーザーが入力した値を保存したい場合など、外部ファイルを用いずとも環境設定に保存すれば、ユーザーに負担なく情報を保存することができます。

そんなスクリプトですが、例えば環境設定を単純に読み書きする場合でも長いコードを書く必要が出てきます。
簡単に一例を挙げます。

  1. 環境設定が存在するかどうか確認する
  2. 環境設定が存在する場合その値を取得する
  3. 環境設定が存在しない場合は値を保存する
エラーのないコードにすると、以下のようになります。
if(app.settings.haveSetting("sectionName","keyName") == false){
app.settings.saveSetting("sectionName","keyName", "myValue");
}
var value = app.settings.getSetting("sectionName","keyName");
alert(value);
コードを見てのとおり、環境設定の確認・保存・取得それぞれにsectionNameとkeyNameを渡さなければなりません。

今回は、この一連の動作を一つのオブジェクトとして注目して簡略化を計りたいと思います。
PrefSetting Objectは一連の動作をまとめたコードになります。

PrefSetting Object

まずPrefSetting Objectを用いて新規にインスタンスを作成します。
コードで言うとこういうことです。
myPref = new PrefSetting("sectionName", "keyName");
インスタンス作成時にsectionNameとkeyNameを設定します。
次に値が保存されていないなら保存します。
myPref.saveValue("myValue");
値を取得するときはこのようにします。
myPref.getValue();
おおざっぱなことはこれでお分かりになったかと思います。
あらかじめmyPrefのインスタンス作成時にsectionNameとkeyNameを設定したことで、後の保存・取得で該当の引数を省略することが可能です。

また、getValueメソッドでセッティングの有無を問わずに呼び出しを行っていますが、内部的には環境設定の有無を判別し、値が存在しない場合はnullを返すようにしています。
this.getValue = function() {
if (this.hasSetting()) {
return app.settings.getSetting(String(name), String(key));
}
return null;
};
これらの機能によって、初めに上げたコードを以下のように省略することが可能です。(環境設定が存在しない場合でもエラーが出ない)
myPref = new PrefSetting("sectionName", "keyName");
var value = myPref.getValue();
alert(value);
もちろん環境設定が存在するかどうかを判別するメソッドも用意しています。
myPref.hasSetting()
一覧はこのようになっています。

PrefSetting Object attribute
名称 説明
savePreferenceAuto 環境設定を自動で保存するかどうかのフラグです. デフォルトではfalseです. trueをセットするとsaveメソッド呼び出し時に環境設定を自動で保存します.
PrefSetting Object method
名称 説明
saveToDisk() 環境設定を保存します. このメソッドを呼び出した場合,他のスクリプトなどで変更された値も保存されます.
setSectionName(newSectionName) 操作中のセクション名を変更します.
getSectionName() 操作中のセクション名を返します.
setKeyName(newKeyName) 操作中のキーの名称を変更します.
getKeyName() 操作中のキーの名称を返します.
hasSetting() 対象の環境設定が存在するかどうかを返します.
deleteSetting() 対象の環境設定を削除します. また,環境設定を削除できたかどうか(環境設定が存在しないか)を返します. 削除できた場合はtrueを返します.
saveValue(value) 引数を対象の環境設定に値として保存します.
getValue() 対象の環境設定の値を取得します. セクションやキーが存在しない場合はnullを返します.
saveValueAsBool(value) 引数を対象の環境設定の値にBool値として保存します.
getValueAsBool() 対象の環境設定の値をBool値として取得します. セクションやキーが存在しない場合はnullを返します.
saveValueAsFloat(value) 引数を対象の環境設定の値にFloat値として保存します.
getValueAsFloat() 対象の環境設定の値をFloat値として取得します. セクションやキーが存在しない場合はnullを返します.
saveValueAsLong(value) 引数を対象の環境設定の値にLong値として保存します.
getValueAsLong() 対象の環境設定の値をLong値として取得します. セクションやキーが存在しない場合はnullを返します.
saveValueAsString(value) 引数を対象の環境設定の値にString値として保存します.
getValueAsString() 対象の環境設定の値をString値として取得します. セクションやキーが存在しない場合はnullを返します.
saveValueAsURI(value) 引数をエンコード(encodeURIComponent)し対象の環境設定に値として保存します.
getValueAsURI() 対象の環境設定の値をデコード(decodeURIComponent)し取得します. セクションやキーが存在しない場合はnullを返します.
※saveToDisk()ですが、本来スクリプトの環境設定はAEが正常終了した時に保存されるのに対し、明示的に環境設定を保存するためのものです。
内部的にはapp.preferences.saveToDisk();をコールしています。
コード内部には、コメントで引数などの説明も合わせて一例を載せているので参考にしてください。

著作権は捨てていませんが、個人・商業での使用はご自由にどうぞ。

ダウンロード



タグ : , , [タグを追加する]


この記事の投稿者について:Misaki_Akatsuki
動画作ったり音楽作ったりプログラミングしています。 http://www.nicovideo.jp/mylist/15400509 この投稿者のTwitter @Misaki_Akatsuki

フィードバック

1 Star2 Stars3 Stars4 Stars5 Stars
評価がまだありません。この記事はどうでしたか?
Loading...Loading...


特集