GO BACK

初心者のためのAppleScript教室


「フォルダアクションを使う」


■フォルダアクションのスクリプトの書き方


MacOS 8.5以降では、「フォルダアクション」という機能がFinderに追加されています。これは、フォルダにスクリプトを割り付ける機能で、これにより、フォルダに何か操作をした時に自動的にスクリプトを実行させることが可能です。

 フォルダアクションは、コンテクストメニューを使って設定します。フォルダを選択してControlキー+マウスプレスし、「フォルダアクションをつける」メニューを選んで、使用したいスクリプトを選べば、それがフォルダに設定されます。フォルダアクションを設定したフォルダは、アイコンの左下に小さなスクリプトマークがつくのですぐにわかります。

 利用可能なスクリプトは、スクリプトファイルとして保存されたものだけです。AppletやDropletなどアプリケーションかされたものは使えません。

 フォルダアクションとして使うスクリプトは、書き方が決まっています。MacOSには、フォルダアクションのための専用ハンドラが用意されていて、このハンドラを使ったスクリプトを用意してあげるのです。では、どんなハンドラが用意されているのか整理しておきましょう。


★フォルダを開いた時に実行するハンドラ★

on opening folder《変数》
	……実行する命令……
end opening folder

パラメータが1つあり、この《変数》には、開いたフォルダの参照が収められ渡されます。フォルダアクションのスクリプトは、1つのフォルダだけでなく、いくつものフォルダで共通のものを設定したりすることができます。ですから、「どのフォルダから呼び出されたか」がわかるように、フォルダの参照が渡されるのです。

 これを使ったサンプルを考えてみましょう。――例えば、フォルダを開くとその中にある全てのサブフォルダを開くスクリプトです。

on opening folder open_folder
	tell application "Finder"
		open every folder of open_folder
	end tell
end opening folder

 フォルダアクションで勘違いをしてしまうのは、「on opening folderなどのハンドラは、Finder上で実行されると決まっているわけではない」ということです。つまり、開いたフォルダを操作したければ、ハンドラの中でtell application "Finder"を使ってFinderに命令を送ってやる必要があります。これはよく忘れてしまいがちなので注意しましょう。


★フォルダを閉じた時に実行するハンドラ★

on closing folder window for《変数》
	……実行する命令……
end closing folder window for

これは反対に、フォルダを閉じた時のものです。ややハンドラの名前が長いのですが、使い方はopening folderと全く同じですからそう悩むことはないでしょう。では、これも先ほどと反対で「フォルダを閉じたら、その中にあるフォルダのウィンドウも全て閉じる」というスクリプトを書いてみます。

on closing folder window for open_folder
	tell application "Finder"
		close window of every folder of open_folder
	end tell
end closing folder window for

 ハンドラの名前が長いのでたくさんパラメータがあるような感じがしますが、送られるのはやっぱり1つだけです。やはり操作する場合はtellを使ってFinderに命令を送ります。


★フォルダを移動した時に実行するハンドラ★

on moving folder window for《変数》
	……実行する命令……
end moving folder window for

これは、フォルダのウィンドウをマウスでドラッグして移動したり、ウィンドウの大きさを変更した時に実行されるものです。やはり、1つだけパラメータがあり、これに開いたフォルダの参照が渡されます。ウィンドウの大きさ変更も移動と同じハンドラが呼び出され、両者を区別することはできないので注意して下さい。


★フォルダに項目を追加した時に実行するハンドラ★

on adding folder items to《変数1》after receiving《変数2》
	……実行する命令……
end adding folder items to

開いたフォルダウィンドウの中にファイルやフォルダを入れた時に実行されるものです。パラメータが2つあり、1つ目はそのフォルダの参照ですが、2つ目は入れた項目の参照となります。

 注意したいのは、2つ目のパラメータは、リストとして渡されるということです。一度に複数のファイルなどを入れた場合、1つしか渡されないのでは困りますから、入れた全ての項目をまとめたリストになるのですね。

 では、これも簡単な例として、フォルダに入れた項目の名前の最初に「*」を追加する、というサンプルを作ってみましょう。

on adding folder items to open_folder after receiving target_items
	tell application "Finder"
		repeat with obj in target_items
			set name of obj to "*" & name of obj
		end repeat
	end tell
end adding folder items to

 2つ目のパラメータはリストですから、repeat with 〜 in 〜などを使って、各項目ごとに処理をするようにして下さい。


★フォルダに項目を追加した時に実行するハンドラ★

on removing folder items from《変数1》after losing《変数2》
	……実行する命令……
end removing folder items from

これは、その反対で、フォルダ内にあるファイルやフォルダを他の場所に出した時に実行されるものです。ハンドラの名前が変わっていますが、基本的にはadding folder items toと使い方は同じですね。2つのパラメータで、フォルダ自身と、移動した項目のリストの参照が渡される点も全く同じです。

 以上の5つのハンドラが、フォルダアクション用に用意されているものです。ハンドラ名が長ったらしいのでなんだか難しそうですが、基本的な書き方はパラメータが1つのものと2つのものの2種類しかありません。いくつかスクリプトを書いて動かしてみれば、すぐに使いこなせるようになりますよ。



GO HOME