この記事は
2019年のはじめにApple Scriptで7年ぶりにアプリケーション開発をしたときの一部始終を書き起こした備忘録です。もっと良い実装あるよ、という人はコメントいただけると幸いです。Apple Scriptというマイナー言語がちょっとでも知られ広く使われるといいなと思いながら執筆しています。
開発したコードがやっていること
- カレントディレクトリ(AS/.app/.scptのありか)を取得
- ダイアログを表示
- 文字列結合
やったこと
開発環境
- macOS Mojave (10.14.2)
- スクリプトエディタ 2.11 / AppleScript 2.7
カレントディレクトリの値を取得する
実装したのは次のようなコードです。
続けてそれぞれのキーワードやブロックの解説をします。
Finderに尋ねる
tell application "Finder"
〜 end tell
でFinderとお話します。詳しいことは省略しますが、ないと as Unicode text
で実行終了します。
(ここで書く必要はない、変数を実際に使ときに書けばよい気も気もしますが)
変数に代入する
set
構文で代入しています。
というか英語そのままですね。AppleScriptのWEB情報はあまり多くない気がするのですが、英語ネイティブにとってはコードを読めばわかるからというのも一因なのだと思います。
パスを取得する
path to me
で「ファイル」のフルパスを取得できます。このとき取得できるパスはスラッシュ(/)で区切られたPOSIX表現ではなく、コロン(:)で区切られたHierarchical File System(HFS)表現です。
MacOSはHFSでファイル管理をしているようですが、現在ではFinderやTerminalを見てわかるようにユーザはそれを意識することなくPOSIX表現を使うことができるようになっています。AppleScriptではどちらも記述できます。
folder of
は指定したファイルが格納されているフォルダをフルパスで抜き出しています。結果的には、単にファイルのフルパスからファイル名を消したものが得られます。
Macintosh HD:Users:viktor:dvp:applescripts:
POSIX表現に変換する
POSIX path of
でHFS表現のパスをPOSIX表現のパスに変換しています。基本的にやっていることは、コロン(:)をスラッシュ(/)に置き換えですが、Macintosh HDがroot(/)に置き換わっています。
/Users/viktor/dvp/applescripts/
そのほか
as Unicode text
でunicodeの文字列として結果を扱うことを明示します。必ずunicode textである必要はないですが、アプリケーションと連携するときには適切に指定する必要がありそうです。ここに書くかどうかも含めて。
ダイアログに結果を表示する
はじめに書いたscriptは次のとおりです。
display dialog {"カレントディレクトリをPOSIX path形式で表現します。 ", aPosixCurrentPath} as Unicode text ¬ buttons {"OK", "All right"} default button "All right" with title "POSIX path expression"
では、解説を続けます。
ダイアログを表示させる
display dialog "本文"
で本文
をダイアログボックスに表示させることができます。
ここでas Unicode text
指定をしていますが、表示するだけならstring
やtext
でもよいようです。
ダイアログのボタン
特に何も指定しない場合、キャンセル
とOK
が提示され、OK
がデフォルトで選択された状態です。キャンセル
をクリックすると本当にその時点でスクリプトの処理はキャンセルされます。逆にOK
をクリックすると次の処理へ進みます。
buttons {"label"}
でボタンの数とラベルを指定できます。が、それぞれクリックされたときの処理(キャンセルするのか、処理継続するのか、それとも別な処理を噛ませるのか)も実装する必要がありそうです。今回は特にこだわりないので無難にデフォルトの挙動に従っておくのがよさそうでした。
default button "label"
は、デフォルトで選択されたボタンを指定します。buttons
のリストで定義したときにはそのラベルのいずれかを指定します。
ダイアログのタイトル
with title "タイトル"
で指定できます。なくてもダイアログは動作します。
文字列結合
結合演算子
結合演算子&
を使って文字列の結合ができます。
"カレントディレクトリをPOSIX path形式で表現します。" & "\n" & aPosixCurrentPath
実行した結果は次のとおりです。
カレントディレクトリをPOSIX path形式で表現します。 /Users/viktor/dvp/applescripts/
リストを文字列置換
複数要素を持つリストをas string
などとして文字列変換すると、要素が結合されます。
{"カレントディレクトリをPOSIX path形式で表現します。", "\n",aPosixCurrentPath} as Unicode text
実行した結果は次のとおりです。
カレントディレクトリをPOSIX path形式で表現します。 /Users/viktor/dvp/applescripts/
まとめ:開発したスクリプト
以上を踏まえて修正してみました。スクリプトエディタでコーディング後に一度実行しているので、\n
は改行に置き換わっています。
tell application "Finder" set aCurrentPath to folder of (path to me) as Unicode text set aPosixCurrentPath to get POSIX path of aCurrentPath end tell display dialog {"カレントディレクトリをHSF形式で表現します。 ",aCurrentPath} as Unicode text ¬ default button "OK" with title "HFS expression" display dialog {"カレントディレクトリをPOSIX path形式で表現します。 ", posixCurrentPath} as Unicode text ¬ buttons {"OK", "All right"} default button ¬ "All right" with title "POSIX path expression"
コメント