いまからはじめるプログラミング②を書いていていろいろ新情報を見つけてしまいました。
すでにご存知の方もいるかもしれないので、「この俺がぁぁぁぁ、世界でぇぇぇぇ、一番に見つけたァァァァァァ!!!」と主張するわけではありません。「そういえばそうだよね」ぐらいの印象のものです。
長年deprecatedだと表示されてきたけど、そろそろそんな気がするinfo forコマンド
誰もがファイル情報の確認時に雑に使っているStandardAdditions.osax中の「info for」コマンド。長年「deprecated」扱いになっていました。
そんなにdeprecated感はなかったのですが、macOS 11上で使ってみるとその遅さにめまいがしました。
System Eventsでfileのpropertyを取得したほうがはるかに高速で、さすがにもうinfo forを用例で引き合いに出すのは無理があるなと感じました(②巻のリリース直前に気づいて書き直した次第です)。
ファイル処理は完全にCocoa系の機能を使ったほうが速くて強力なので、最近はまじめに深掘りしていなかったのですが、入門者向け本を書いてみて気になりました。入門者向け本にCocoaのコードはさすがに書けません、、、、
as alias listはないけれど……
Finderからまとめてfileを取得する際に、「as alias list」という用語が使えます。通常はfileなりdocumentなりのオブジェクトをlistで返してくるFinderですが、aliasで結果がほしい(ファイルパス情報だけほしい)というケースが多々あります。
それに応えるかたちで「as alias list」が、たしかMac OS X 10.4あたりで新設されました(selectionからファイルをとってくる処理が、えっらく簡単になった記憶があります)。
その後、Mac OS X 10.6あたりで(?)System Eventsにファイル関連のSuitesが新設され、「あー、こりゃFinderのないOS環境、ワンチャンくるかも?」と怯えていたのですが、さすがにFinderを廃止すると反発が大きいという判断をしたのでしょうか、「FinderレスMac OS X環境」という世界観はやってきませんでした(iOSあたりはそういう感じですけれども)。
で、System Eventsにファイル関連のSuitesができても「これ本気で使わせたり移行させたりするつもりがあるんか?」という雰囲気で、Finder上で行っていたファイル処理をそのまま移し替えられる様子ではなく、速度面でも腰が抜けるほど速いわけでもなく、Appleのエンジニアリングチームが何を考えているのか意図を測りかねていました。
指定フォルダ内のfile一覧をaliasで取得しようとして、
set aFol to choose folder tell application "Finder" set aRes to every file of aFol end tell
という処理を、
set aFol to choose folder tell application "System Events" set aRes to every file of aFol end tell
と、書き換えて、ふとaliasで欲しいと思って、
set aFol to choose folder tell application "System Events" set aRes to every file of aFol as alias list end tell
などと書いてみてもエラーに(知ってたけど)。そこで、冗談半分に、
set aFol to choose folder tell application "System Events" set aRes to every alias of aFol end tell
と、書いてみたら………期待どおりの動作に。aliasのlistで結果が返ってきます。
log on/log offってあったよね? ねえ、あったって言って
ログ(履歴)出力用のlogコマンド、そのログ出力を許可/禁止するlog on/log offコマンドがClassic Mac OSの時代には存在していま……
魔が差して、Classic Mac OSエミュレータ「SheepShaver」を起動してClassic Mac OS 8.6上で確認してみたら……
あっれえええええ???
log on/log offコマンドが存在していないよ?
現行のmacOSで確認されている(でも、AppleScript Language Guideに書かれていない)「start log」「stop log」を書いてみたら……通りますね。
当時流通していた何かのOSAXで提供されていたコマンドだったのか、ちょっとショックです。
駄目押しで、1999年に作成された「AppleScript Language Guide」で「logコマンド」まわりを確認してみたら「start log」「stop log」がある!!!
自分の「薄い資料集」を書き換える必要がありますね。
まー、気づいたのでヨシ!(よくない)
われながら、よくもまあこれだけド派手に間違ったもので。修正方法もいろいろ考えなくてはなりませんね。
なんといいますか、現在では現役ではないプラットフォーム(Classic MacOS)に関する言及の部分なので、しれっと「そんなことはなかったよ」という顔をして修正するのもアリなんですが、個人的にショックです(FileMaker選手権で落ちたときよりは大きくないですが)。
しばし放置しつつ、様子を見てみましょう、、、、
→ 相談したら、「誰も気にしてないので直せばいい」とのこと。直しておきました。すでに購入された方は再度購入ページからダウンロードしてください。
ygk says:
違っていたらすみません。
1番目の記述例について、
set aFol to choose folder
tell application “File”
set aRes to every file of aFol
end tell
となっていますが、
tell application “Finder”
でしょうか?
Takaaki Naganoya says:
ご指摘ありがとうございます。そのとおりです。修正しておきますー。