AppleScriptでカレントディレクトリ情報を取得してGUI表示するまで

ソフトウェア技術
スポンサーリンク

この記事は

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指定をしていますが、表示するだけならstringtextでもよいようです。

ダイアログのボタン

特に何も指定しない場合、キャンセル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"

コメント

タイトルとURLをコピーしました