AppleScriptのゴミ箱アプリを作って機嫌良く使っていたのですが、たまにエラーが出るので改善し、完成形として仕上げました。
AppleScript で作るゴミ箱アプリ
ゴミ箱アプリをApplescriptで作った投稿があります。
次の機能を備えたApplescriptを書いてアプリとして保存、デスクトップにゴミ箱として置くという話でした。
- ドラッグしたアイテムがボリュームの場合はイジェクト
- ファイルやフォルダの場合はゴミ箱にポイ
- ダブルクリックすればFinderでゴミ箱を開く
概ね良い感じに使えていたのですが、ファイル共有でマウントしたボリュームやフォルダをイジェクトする時にエラーが出ていました。自分の力量を超えた部分なので改良の目処も立たず放置していましたが、AI に相談することで解決出来るかもしれないと、これまで何度も Chahttps://www.digitalboo.net/post/16146/eject-or-trashtGPT や Gemini に相談を持ちかけていました。
AI でも歯が立たず
しかし何度しつこくやりとりしてもスクリプトを修正することが出来なかったんですね。原因追及とそれに対処したスクリプトを幾度となく提案され、その都度「なるほど」と試すもののすべて撃沈。
エラーの原因やその対処についてのやりとりは有意義なものでしたが、最終的にまともに動かない出来損ないスクリプトしか出てこなくて、それなら最初に作ったやつのほうがましだと、共有のイジェクトエラーに我慢して以前のスクリプトを使っていました。
macOS の過剰なセキュリティによる限界
実はAI の提案は理屈では正しかったのですが、結局のところ macOS のセキュリティの問題だったようです。スクリプトエディタに書いてアプリとして保存するわけですが、この仕組み自体がちょっと古いせいか、新しいOSのセキュリティをクリアできないのではないか?という推測が AI からなされました。このような推測は AI のバージョンアップのおかげです。
で、じゃあ解決策はということですが、賢いAIが提案したのは Automator を使うことでした。
Automator で作るゴミ箱完成形
スクリプトエディタに書いてアプリとして保存したアプリはエラーで動かないけど、同じスクリプトを Automator に書いてアプリとして保存することで、それは正常に動作しました(スクリプトの内容は Automator に合わせて AI が多少修正しています)
作り方
Automator で「AppleScript を実行」を選ぶだけ。
以下のスクリプトをズバッとコピペします。
-- Automatorアプリケーション用の最終コード (カーソル処理削除)
on run {input, parameters}
-- 処理中にカーソルを変更するCocoaコードを削除
-- set busy_cursor to current application's NSCursor's operationNotAllowedCursor()
-- busy_cursor's push()
try
-- 項目がドロップされた場合 (inputにファイルパスが含まれる場合)
if (count of input) > 0 then
repeat with anItem in input
-- ドロップされた項目をHFSパス(テキスト)として取得
set itemPathHFS to anItem as text
-- HFSパスがコロンで終わるか確認 (ボリュームの判定)
if itemPathHFS ends with ":" then
-- 項目がボリュームの場合
my eject_volume_finder(anItem)
else
-- ファイルまたはフォルダをゴミ箱に移動
my move_to_trash_finder(anItem)
end if
end repeat
-- アプリケーションがダブルクリックされた場合 (inputが空の場合)
else
tell application "Finder"
activate
open the trash
end tell
end if
on error errMsg number errNum
display dialog "処理エラー (" & errNum & "): " & errMsg buttons {"OK"} default button "OK" with icon stop
end try
-- 処理完了後にカーソルを元に戻すCocoaコードを削除
-- busy_cursor's pop()
return input
end run
-- ファイルまたはフォルダをFinderでゴミ箱に移動するハンドラー
on move_to_trash_finder(the_item)
try
tell application "Finder"
delete the_item
end tell
on error errMsg
if errMsg does not contain "-128" then
display dialog "ゴミ箱への移動に失敗しました。" & return & "項目: " & (the_item as text) & return & "エラー: " & errMsg buttons {"OK"} with icon caution
end if
end try
end move_to_trash_finder
-- ボリュームをFinderでイジェクトするハンドラー
on eject_volume_finder(the_volume)
try
tell application "Finder"
eject the_volume
end tell
on error errMsg
if errMsg does not contain "-128" then
display dialog "ボリュームのイジェクトに失敗しました。" & return & "ボリューム: " & (the_volume as text) & return & "エラー: " & errMsg buttons {"OK"} with icon stop
end if
end try
end eject_volume_finder
度重なるAIとのやりとりの末のスクリプトでありまして、とっくに自分の理解できる範囲を超えています。ですのでこのスクリプトを詳細に解説したりできません🙇
これをアプリとして保存しデスクトップに置いて試用していますが、現在のところ正常に動作しています(このアプリのフルディスクアクセスを許可することは必要)
Download: ゴミ箱.app.zip
デスクトップにゴミ箱がほしい人はお試しを。









