AppleScript 救急隊

The ForeSight Inc. AppleScript救急隊 ASQsについて Download (サンプル&デモ)


ビジネスで有効活用を目指す

われらがAppleScript救急隊


MacPower誌




Vol.6 Mac OS8でのFinder スクリプティング(1)

Mac OS 8は、Finderも新しくなってさまざまな変更が加えられている。
もちろんAppleScriptについても機能アップしており、多くの機能追加とバグフィクスを実現している。
今回は、Mac OS 8でのFinderスクリプティングを中心に解説する。


Mac OS 8で追加された機能

初めに、Mac OS 8のAppleScriptに関連する変更をいくつか挙げてみよう。
  • ラベルや表示フォントなど、コントロールパネルで設定していた項目の一部が「Finderの設定」としてFinder側に移された。これらの項目は、AppleScriptからも設定可能。
  • ポップアップウィンドウやウィンドウシェードなどをAppleScriptから制御できる。
  • 「ファイル共有」コントロールパネルがスクリプタブルになった。
  • 「利用者&グループ」コントロールパネルがスクリプタブルになった。
  • 新機能「デスクトップピクチャ」もAppleScriptから設定可能。

    などだ。
    ほかにもたくさんの細かいバグ修正や機能拡張がある。ただし、新たに生まれてしまったバグもあるようだ。
    日本語による詳細な情報がhttp://www.fsight.co.jp/asqs/にあるので、こちらも参照してほしい。
    ということで、今回はMac OS 8で新しく追加された機能を使って、スクリプトを作ってみる。


TOPへ

まずはOSのバージョンをチェック

Mac OS 8で作ったスクリプトをそれ以前のバージョンで動作させると、問題が発生する場合がある。特にMac OS 8固有の機能を使っているときには、最悪の事態も考えられる。
そこで、Mac OS 8以外の環境で動かす可能性があるときは、スクリプトの先頭でOSのバージョンチェックをしておこう。

-- OSのバージョンチェック
on CheckOSVer()
tell application "Finder"
set theFinderVer to (get the version) as text
character 1 of theFinderVer
if character 1 of theFinderVer is "J" then
set theFinderVer to (characters 4 thru -1 of theFinderVer) as string
end if
if theFinderVer is less than "8" then
display dialog "このスクリプトはMac OS 8以前のOSでは動作しません" buttons {"OK"} default button "OK"
error number -128
end if
end tell
end CheckOSVer

bFinderに対してget the versionとすることで、バージョンが返ってくる。
例えばMac OS 8の日本語版では、"J1-8.0.1"と返ってくるし、US版では、"8.0"が返ってくる。
ここでは、この文字列を使ってバージョンチェックをしている(図1)。


図1 漢字Talk(Mac OS)7.xでスクリプトを動かすと、このようなメッセージを表示して強制終了する

ウィンドウの表示オプションを設定する

Mac OS 8ではウィンドウの表示オプションの設定が変更された。これまでは、アイコン表示での「グリッドに沿う」やリスト表示での「表示項目」は、システム全体に対しての設定になっていたが、Mac OS 8ではこれらをウィンドウごとに設定できる。
これは便利である半面、自分の考えている設定とFinderの初期設定の内容が違うと、いちいち変更しなくてはならないので非常に面倒だ。そこで、今回はこの表示オプションを設定するスクリプトを作ってみた。このスクリプト「Arrangement Changer」はドロップレットになっているが、ダブルクリックで起動すると「基準となるフォルダーを指定しろ」と聞いてくる。ここで、フォルダーを選択すると、そのフォルダーを開いてウィンドウの設定をスクリプト自身が覚える。
表示形式がアイコンかボタンの場合は、アイコンやボタンの大きさ/配置条件(グリッドに沿う、名前順など)の2項目の表示オプションがある。リスト表示の場合は、アイコンの大きさ/表示項目/ソート項目/相対日時を使うか/フォルダー容量の計算をするか/の5項目だ。 表示オプションを設定したいフォルダーをArrangement Changerにドラッグ&ドロップするだけで、含まれるすべてのフォルダーを、基準のフォルダーと同じ表示オプションに設定していく。このスクリプトファイルを複製して、自分がよく使う表示オプションをいろいろ覚えさせておけば、ドラッグ&ドロップするだけで好みの設定ができる。


Arrangement Changerがしていること

AppleScriptでの表示オプションの設定方法について、簡単に説明しておく。
Mac OS 8でこれらの表示オプションを利用するためには、container windowという新しいクラスを使う。container windowクラスのプロパティーとして、アイコンやボタンのサイズ、配置条件などを扱える。ただし、これらのプロパティーを正しく取得/設定するためには、このcontainer windowをFinder上で開いておかなくてならない。
Arrangement Changerの処理中にウィンドウを順に開きながら表示オプションを設定しているのはこのためだ(図2,3)

図2 アイコン表示のオプション

 

図3 リストの表示のオプション


set theFolder to choose folder with prompt "基準としたいフォルダを選んでくだ さい"

tell application "Finder" activate set theContWindow to the container window of theFolder open theContWindow set theView to (the view of theContWindow) as integer if theView is in {0, 1, 15, 16} then set keep arranged of theContWindow to true set keep arranged by of theContWindow to 《class grid》 end if close theContWindow end tell

追記 注: 《class grid》は、OS8.1では「grid」と記述できる 様になっています。

こういった感じで、フォルダーを開いて表示オプションを設定し、フォルダーを閉じるという手順が基本となる。
表示オプション設定で気をつける点は、リスト表示になっているフォルダーウィンドウを処理する場合だ。
表示項目に入っていない項目で、AppleScriptから整列させようとするとハングアップすることがある。
例えばファイルの作成日を表示しない設定になっているにもかかわらず、作成日で整列させるスクリプトを実行させると
ハングアップしてしまう。必ず表示されている項目でソートすること(図4)。


図4 リスト表示の場合の注意点

例えば、修正日しか表示されていないのに、ラベルで並び替えるようなスクリプトを実行させると、フリーズなどの致命的な障害となる

また、Arrangement Changerでは階層下に含まれるフォルダーに対する処理を「再帰」という手法で実現している。1つのフォルダーウィンドウを開いて、表示オプションの設定をした後、そのフォルダー内に含まれるフォルダーをリストアップし、その中の1つのフォルダーウィンドウを開いてさらに表示オプションの設定をし……といった処理をする場合は、あるサブルーチン[*1]が、その中で自分自身を読み出すことで実現可能だ。これが「再帰」である。ただし、サブルーチンが、自分自身をサブルーチンとして呼び出し、そのまたサブルーチンとして自分自身を呼び出し……という繰り返しを延々とやっていると、それぞれの状態をすべて覚えておかなくてはならないため、それだけメモリー容量を使う。あまりに深い階層構造を含むフォルダーを処理するときは、メモリー不足になってしまうかもしれないので注意して使ってほしい。いろいろな設定のArrangement Changerを用意しておくと便利だ(図5)。

図5 Arrangement Changerの使用例


おまけのデスクトップピクチャー

Mac OS 8の新機能「デスクトップピクチャ」をランダムに選ぶスクリプト「Random Desktop Picture」も今回のおまけに付けた。このスクリプトを最初に起動するときに「デスクトップピクチャはどこにありますか」と聞いてくるので、
「デスクトップピクチャ」コントロールパネルを指定する。
このスクリプトもドロップレットで、ファイルかフォルダーを1つだけドラッグ&ドロップできる。フォルダーをドロップすると、そのフォルダーをデフォルトの画像フォルダーとして記憶する。PICTかJPEGの画像ファイルをドロップすると、まず一度デスクトップピクチャーとして表示する。「画像フォルダーにコピーするか」と確認してくるので、「はい」とすればコピーし、デスクトップピクチャーになる。この際、同じ名前のファイルは上書きされる。「いいえ」と答えれば、元の状態に戻る。
また、このスクリプトをダブルクリックすると、画像フォルダーが設定されていればその中から任意のPICTかJPEGファイルを選んで、デスクトップピクチャーを張り替える。前の画像と同じものを選んでしまうこともあるが、これが気になる人はぜひ改良にチャレンジしてみよう。また、「一定時間で自動的に変わる」とか「タイリングなどの表示位置に関する設定も自動で変更させる」などの機能を追加してみてほしい。
次回は、今回紹介しきれなかった、ファイル共有や共有ユーザー管理などのスクリプトを紹介する予定だ。お楽しみに!


[*1]
サブルーチン

意味的もしくは機能的にまとまった処理を行うルーチン(プログラムの1つの単位)。複雑なプログラムをサブルーチン化して意味単位/機能単位に分割することで、プログラムの構造を理解しやすくする。


TOP

AppleScript救急隊事務局(ASQs) info-asqs@fsight.co.jp

主催 株式会社フォーサイト   後援 アップルコンピュータ株式会社

(c)1996-2010 The ForeSight Inc. All rights reserved.
Appleは、米国アップルコンピュータ社の登録商標です。
AppleScriptは、米国アップルコンピュータ社の商標です。
その他記載の会社名・製品名・ソフトウェア名は一般にその会社の登録商標または商標です。