AppleScript の JavaScript for Automation でテキストをファイルに保存する
StandardAdditions を使用する
保存ダイアログを表示するには StandardAdditions ライブラリに入っている chooseFileName
関数を使う。
JavaScript for Automation では StandardAdditions を使う前に includeStandardAdditions
を有効にしてこのライブラリを使うという事を記述しなければならない。(AppleScript では記述は必要無い)
今回はファイルの書き出し自体はスクリプトエディタから行うので操作する対象のアプリケーションは
app = Application('Script Editor');
もしくは
app = Application.currentApplication();
で取得できる。
試しに StandardAdditions の beep
関数を使ってOSの警告音を鳴らしてみる。
以下のようなコードになる。
AppleScript では beep
と一行書くだけでOK
保存ダイアログを表示する
保存ダイアログの表示には chooseFileName
関数を使う。
この関数にはいくつかオプションが容易されていて、ドキュメントによれば JavaScript for Automation ではこれらの名前付きパラメータ(named parameters)と呼ばれるパラメータをオブジェクト型で引数に渡してやるらしい。
例えば defaultName
オプションはダイアログでデフォルトで使用されるファイル名を指定できる。
app.chooseFileName({ defaultName: 'Untitled.txt' });
また、defaultLocation
オプションはデフォルト表示されるディレクトリパスを指定する事ができる。
app.chooseFileName({ defaultLocation: app.pathTo('desktop') });
pathTo
関数の引数に 'desktop'
'documents folder'
など規定の値を渡す事で特定のディレクトリのパスを取得する事ができる。
chooseFileName
及び pathTo
関数で利用可能なオプションと定数についてはリファレンスを参照の事。
chooseFileName
関数はユーザによって選択されたパスを返すので、以下のようにしてパスを取得する。
テキストをファイルに保存する
ファイル保存を行うには openForAccess
関数で書き込み権限付きのファイル番号を取得する必要がある。
openForAccess
関数は第1引数にダイレクトパラメータ (direct parameter)、第2引数に名前付きパラメータ (named parameters) を持つ形になっている。名前付きパラメータ(named parameters)はオブジェクト型で渡すので、writePermission
オプションを指定したファイル番号の取得は以下のようになる。
options = { writePermission: true }; fileReferenceNumber = app.openForAccess(filePath, options);
ファイル番号が取得できたら write
関数で書き込みを行う事ができる。
write
関数も第1引数にダイレクトパラメータ (direct parameter) を持ち、第2引数に名前付きパラメータ (named parameters) を持つ形になっている。
名前付きパラメータ (named parameters) にオプション以外に必須パラメータも含まれているのがこれまでの関数と少し異なる。
必須パラメータの to
を指定してテキストのファイル書き出しを行う処理は以下のようになる。
text = 'asdf'; options = { to: fileReferenceNumber }; app.write(text, options);
最後に、openForAccess
で利用したファイル番号は使い終わったら closeAccess
関数で閉じてやる必要がある。
app.closeAccess(fileReferenceNumber);
ファイルの読み書きが終わってから最後にこの処理を実行してやる。
まとめ
全体の処理をリファクタリングしてまとめたものが以下。
実行すると保存ダイアログが開き、ユーザが指定したパスにコード内で記述した文字列が書かれたテキストファイルが作成される。