rcmdnk's blog
Last update

AppleScript In A Nutshell (édition française)

AppleScriptで何かエラーが出てるな、と思ったら スクリプト自身のあるディレクトリを取るために使っていた folderという値が取れなくなっていました。

(path to me)’s folder

自作のAppleScriptは $HOME/Library/Scriptsに置いています。

他のファイルをライブラリの様に読み込んで使いたい場合、 スクリプトのあるディレクトリを取得してスクリプトを呼ぶようなことをしています。

これに関して以前は

1
2
3
4
5
6
tell application "Finder"
  set scriptPath to (path to me)'s folder as text
end tell
set myLibScpt to scriptPath & "myLib.scpt"
set myLib to load script file myLibScpt
...

みたいなことをしていました。

path to meが現在実行しているファイル自身のパスを返しますが このオブジェクトのfolderという値がファイルのあるディレクトリを返すので それを使っています。

が、これが上手く動かなくなって、

スクリプトエラー
<<class cfol>> of alias "/Users/user/Library/Scripts/myfile.scpt"のタイプをtextに変換できません。

みたいなエラーが出るようになっていました。 ここではtextに変換できない、ということになってますが、 as textの部分を外すと

スクリプトエラー
folder of alias "/Users/user/Library/Scripts/myfile.scpt"を取り出すことは出来ません。

と出るのでfolderそのものが無くなってる感じです。 path to meは実行中のスクリプトへのパスのエイリアスを返すものと言うのは変わってないと思うので、 aliasが何か変わった様です。

このパスの取り方はよく使われていて色々な所で例として見ることが出来るものなのですが、 どうも何か変化があったみたいです。

App Store.appでの履歴を見ると10月7日に追加アップデートが入ってるのでそこでの変化? (でも昨日まで問題なく使えてたような気もする。。。)

macOS High Sierraにした時点でも1つ問題が起こってましたが さらに変更が入った模様です。

(path to me) & “::”

どうやってもfolderが使えないので別の方法にしてみることに。 最終的に以下の様な変更をしました。

1
2
3
4
-tell application "Finder"
- set scriptPath to (path to me)'s folder as text
-end tell
+set scriptPath to ((path to me as text) & "::")

macOSで以前まで使われていたHFS+というファイルシステムでは:を区切りとしてディレクトリを区切っています 1

High Sierraではこれに変わってAPFSというファイルシステムが採用されましたがその点は恐らく変わってないと思います。

パスのエイリアスではこのファイルシステムを反映して:を区切りとしてディレクトリを区切る様な値が入っています。

このパスの中で::は一つ上のディレクトリを表し、 ファイルの後にも付ける事ができます。

なので((path to me as text) & "::")は現在実行中のスクリプトのあるディレクトリを表すことになります。

上の様な置き換えをした所今使ってるスクリプトは動くようになりました。

こちらの方がすっきりするし、 恐らく以前から使えてた方法だと思うので最初からこれにしておけばよかったと思う所もあります。

追記: 2017/11/06

OSアップデートが来て10.13.1になりましたが、 上のfolderを試してみた所また動くようになりました。

この記事を書いた時にちょっとTwitterで@Piyomaruさんが色々と指摘してくれましたが、 その時にpath to meの返す値が私の環境ではちょっとおかしなことになっていました。

通常Machintosh HDから始まって:で区切りなエイリアスなパスになっています。 一方、おかしかった時の返り値はaliasとはついてるものの/Users/..とUnix的なパスになっています。

上の@Piyomaruさんのテストは10.13.1betaでのテスト、ということで 10.13がおかしいのか私の環境で何かが悪さをしているのか分かりませんでしたが、 10.13.1にしてみたところ、path to mealias "Machintosh HD:...を返す様になりました。

なので10.13.1だと前に使っていた方法がそのまま使えます。

結果的には新しい方法の方がシンプルで良いので新しい方を使いますが、 何がおかしかったのかは謎。 (同じ様な不具合の報告は見られないですが、他の10.13マシンではテスト出来てないので 10.13が悪かったのか、何か環境が悪かったのかは分からず終い。)

追記ここまで

Sponsored Links
Sponsored Links

« .bashrc/.zshrcでマシンローカルな設定等を外部ファイルから読み込む設定 BoseノイズキャンセリングイヤホンQC20が故障したので交換してもらった »

}