
Automator は、Tiger の最も魅力的な機能の 1 つであり、神が私たちを愛していること (神を信じる人) または、至高の存在が指揮を執らなくても私たちはうまくやっている (神を信じない人) ことの明確な証拠です。
それでも、Automatorには限界があります。Automatorは直線的なプロセス、つまり予測可能なステップのリストに簡単に分解できるプロセスの自動化には驚くほど適しています。Automatorが機能しなくなるのは、実際に 思考を必要とする問題を投げかけた時です 。「ファイルが500KB未満なら、編集者にメールで送ってください。それより大きいなら、私の個人用FTPサーバーにアップロードし、ダウンロード方法を記載したメールを編集者に送ってください。」Automatorでは、そんなことはできません。
また、変数を使う必要のある操作は一切できません。プログラミング入門コースを受講した人なら、変数とは何かを知っています。20~30ステップのAutomatorワークフローがあると想像してみてください。「さて、20ステップ前、ステップ3で『Astronomy Picture of the Day』Webサイトにあるすべての写真のリストを取得するように指示したのを覚えていますか?同じリストを使って、もう一つ別の操作を実行してください」と指示できれば便利なワークフローはたくさんあります。しかし、Automatorの貧弱な知能では到底対応できません。 この制限は、場合によっては回避できます 。前の例では、AutomatorにWebサイトにアクセスしてリストを最初から作成するように指示するだけで済みます。
しかし、「本物の」プログラミング言語でなければ満足できない時もあります。そしてAppleScriptはまさに本物の言語です。非常に シンプルで 、 習得し やすく、ちょっとしたミスにも寛容です 。しかも、開発者が望むほぼすべての機能を備えているのです。Microsoft Officeに匹敵する新しいツールを開発するために必要なツールは除きますが。
結論から言うと、Automator を使い始めて、その機能を活用するよりも制限を回避することに時間を費やす時間の方が長くなってきたと感じたら、AppleScript を学び始めるべきです。
独自のスクリプトを作成する
ほぼすべてのアプリは、少なくとも 4 つの基本的な AppleScript コマンドをサポートしています。
それ以上のことは、開発者の意欲と熱意次第です。喜びと失望が交錯する、まさに運任せです。AppleScriptを使い続けるのは、優れたアプリのおかげです。中には、スクリプトを多用しすぎて、ユーザーインターフェースを使うこと自体が無駄に思えるほどのアプリもあります。
スクリプトエディター
|
スクリプト エディタでは、リフトに簡単なスクリプトをインストールして、ブレーキ パッドの問題を解決できます。 |
スクリプトエディタは、スクリプトの記録、既存のスクリプトの編集、独自の新しいスクリプトの作成、そしてアプリケーションを開いてスクリプトの適用性を確認できるアプリです。アプリケーションフォルダ内のAppleScriptフォルダ内にあります。右の図は、典型的なスクリプト編集ウィンドウを示しています。これがスクリプトエディタのインターフェースのほぼ全てです。「保存」「開く」「印刷」以外の操作は、メニューバーには一切触れません。さあ、試してみてください。
さあ、あなたもプログラマーになりました。もう肌が少し青白くなってるでしょうね。
「実行」をクリックした時のウィンドウをよく見ていれば、スクリプトの実行中に「停止」ボタンが勝手に有効になっていることに気づいたでしょう。このボタンをクリックすると、スクリプトが実行途中で終了します。これは、 ネットワークの状態に関するレポートを自動的に作成するように指示したはず のスクリプトが、実際には ショッピングモールでポーズをとったプライベート写真が詰まったフォルダを1,100人のアドレス帳に登録されている全員にメールで送信してしまうような場合に非常に便利な機能です。
より長く複雑なスクリプトを扱うようになると、おそらく「コンパイル」ボタンを頻繁に使うようになるでしょう。これは基本的に、スペルと文法を二重チェックしてくれるものです。入力した内容がAppleScriptとして意味をなさない場合は、自動的にフラグが立てられ、問題点が何なのかを可能な限り説明してくれます。問題がなければ、スクリプトは読みやすくするために、複雑なネストインデントと書体で再フォーマットされます。
ウィンドウのコードセクションの下には、小さな情報パネルがあります。その下にある3つのタブのうち、どれをクリックしたかによって、3つの異なる情報が表示されます。
結果とイベントを調べるためのリソースとして、もう一つ「結果ログ」ウィンドウと「イベントログ」ウィンドウがあります。これらはスクリプトエディタの「ウィンドウ」メニューから開くことができます。どちらも非常に便利です。スクリプトが期待通りに動作しない場合、墜落した飛行機の残骸から引き出された「ブラックボックス」のような役割を果たします。スクリプトが実行したすべての処理と、その中間結果がどのようなものであったか、その過程を段階的に詳細に記録します。これらのログを調べることで、1 + 1 が 12 になった原因となったコード行を正確に特定し、必要な修正を行うことが簡単になります。
ああ、そうそう、録画ボタンを忘れていたようです。さて、先に進みましょう。
スクリプトの記録
先ほども述べたように、スクリプトの記録はうまくいくかどうかが不確実です。アプリが記録可能かどうか、あるいは記録機能が実際にどれほど便利かは、実際に使ってみるまで分かりません。例として、Finderを挙げてみましょう。Finderは非常に記録しやすく、退屈で反復的な行動を行う環境として、中等教育にも匹敵するほどです。私はよく、ハードドライブの乱雑さを素早く整理するために、ウィンドウを特定の方法で整理しています。下のスクリーンショットをご覧ください。

上部にハードドライブ全体のマスターカラムビューが表示され、下部にサブフォルダのウィンドウが3つ配置されています。しかし、これらのウィンドウを手動で作成して配置するのは面倒なので、次のページでは、それを自動的に行うスクリプトを記録します。


やったー!全部自分で入力しなきゃいけないなんて想像してみてください!録画スクリプト最高!
Skeezixさん、ちょっと待ってください。もっと簡単なこと、例えばFinderを使ってFTPサーバーに接続する手順をすべて記録してみるとか、そういうのを試してみてはどうですか? どうぞ。私はここで待っています。
ああ。下のスクリーンショットのようなものになりましたね。

実際に記録されたのは、FTPサーバーへのログインを終えてウィンドウの表示をアイコンからリストに変更した最後の部分だけでした。分かりますか? 不安定で予測不能です。スクリプトの記録は全く役に立たないわけではありませんが、スクリプト作成のスキルを習得すると、ほとんど使わなくなります。
まあ、Finderウィンドウの件はとにかくうまくいきました。後でそのスクリプトを実際に使いたいかもしれません。それで、うまく繋がって…
スクリプトの保存
スクリプトの保存は、他のアプリケーションでドキュメントファイルを保存する場合と比べて、いくつか癖があります。これは当然のことですが…ある意味、ここではソフトウェアを開発しているので、この新しいソフトウェアをどのように展開するかを決める必要がありますよね?下のスクリーンショットは、スクリプトエディタの標準の保存ダイアログです。
|
スクリプトエディタの保存オプション |
ファイル形式のオプションは次のとおりです。
* いや、本当は…バンドルについて知りたいんです 。バンドルとは何か、できるだけ簡単に説明しましょう。バンドルとは、Mac OSが実行可能ソフトウェアの価格とそのリソースを常にまとめて、一つのエンティティとして扱うための仕組みです。例えば、汎用的な既成の販売契約書(テキストエディットのドキュメントとして存在します)を受け取り、ユーザーにいくつか質問をした後、Judge Judyでさえ認めるような拘束力のある契約書を出力するAppleScriptを書いたとします。これはとても便利なので、誰かに配りたいですね。スクリプトをバンドルとして保存すれば、テンプレートファイルをスクリプトと同じパッケージに貼り付けることができます。スクリプトは常にこのファイルを見つけることができ、 この「本当に重要なファイル」がないと、誰かがこのスクリプトを受け取る可能性は ゼロです。要するに、バンドルは上級スクリプターになるにつれて扱うことになるものです。今は気にしないでください。あなたが探しているのは、バンドルではないのです。先に進みましょう。
次の 3 つのオプションも利用できます。
スクリプトに名前を付けて、「保存」をクリックすれば完了です。

AppleScript辞書
AppleScriptの良い点は、非常に多くのアプリが意欲的にサポートしており、数十種類もの独自のAppleScriptコマンドをサポートしていることです。しかし、その 「多数」を「数十」と掛け合わせた時に、悪い 点が明らかになります。最終的には数千ものコマンドが存在し、AppleScriptで何かを行うにはそれらすべてを理解しなければならないのではないかという疑念が湧いてくるのです。
先ほど指摘したように、アプリのスクリプトサポートの強みと弱みは開発者次第です。アプリ固有の機能や機能は、アプリ側で提供する必要があります。また、AppleScriptプログラマーには、アプリ固有の機能やデータ型がどのようなものかを説明するドキュメントを提供する必要があります。
「ドキュメント」という言葉は、あまり厳密な意味では捉えられません。開発者は、アプリが認識・処理できるデータ型と実行可能な関数のリストを作成し、アプリに内蔵されたスクリプト辞書という形で、熱心な若き宇宙飛行士であるあなたにアプリ内で公開します。スクリプトエディタを使えば、これらの辞書を開いて、わかりやすく整理され、簡単に検索できる形式で表示できます。
アプリの辞書を開くには、スクリプトエディタの「ファイル」メニューから「辞書を開く」を選択し、表示されたリストからアプリを選択します。下のスクリーンショットは、iTunesのスクリプト辞書を示しています。

でも、スクリプトを書き始めたいのに、何百ものアプリのリストをスクロールする時間なんてあるでしょうか? スクリプトエディタには、ライブラリウィンドウという便利な整理ツールがあります。スクリプトエディタのウィンドウメニューから開くことができます。右下のスクリーンショットをご覧ください。
|
スクリプトエディタのライブラリで、お気に入りのスクリプト可能なアプリを便利に活用できます |
これは、スクリプト対応アプリの「お気に入り」リストのようなものです。AppleはTigerで最も人気のあるスクリプト対応アプリをライブラリウィンドウにプリロードしています。ウィンドウのツールバーにある「プラス」ボタン(+)をクリックするだけで、独自のスクリプト対応アプリを追加できます。マイナス記号をクリックすると、そのアプリは地獄へ飛ばされます。本が束になったようなボタンをクリックすると、選択したアプリのスクリプト辞書が開き、AppleScriptアイコンをクリックすると、そのアプリにAppleScriptを送信するための設定がされた新しいスクリプトファイルが作成されます。
各辞書には コマンド と オブジェクトが含まれています 。コマンドは実際に何かを実行します。例えばiTunesでは、「再生」は再生を開始または再開します。オブジェクトは、まさにオブジェクトです。コマンドが操作する対象です。iTunesのスクリプト辞書には、トラック、プレイリスト、音楽ソースなどがあり、これらはすべてオブジェクトです。
これらのオブジェクトをクリックして、それぞれのプロパティを確認してみましょう 。「はい、トラックを聴いています。ありがとうございます。でも、どのアルバムに収録されているのでしょうか?アーティストは誰でしょうか?最後に再生されたのはいつでしょうか?」これらはそれぞれ、トラックオブジェクトの個別のプロパティです。iTunesに「最初のトラックのアーティスト」と尋ねると、すぐに答えが得られます(例えば「They Might Be Giants」など)。
アプリの機能について理解を深める必要がある場合は、スクリプト辞書を調べます。自分で辞書をスクロールするか、辞書ビューアの Spotlight 検索ボックスをクリックして、お気に入りのオブジェクトを検索できます。ミュージックライブラリをアルバムごとに処理する iTunes スクリプトを記述したいと考えています。その辞書には Album オブジェクトがありますか? 検索フィールドに「Album」と入力しても、見つかりません。Spotlight が見つけられるのは、「Album」が「Track」のプロパティであるということだけです。つまり、トラックが手元にあれば、iTunes はそのトラックがどのアルバムのものかを教えてくれます。しかし、たとえばプレイリストの最初のアルバム名を尋ねることはできません。
編集ツール
さて、先ほどスクリプトエディタはスクリプトの作成とデバッグにはあまり役に立たないと書きました。Late Night SoftwareのScript Debuggerのようなサードパーティ製のスクリプトエディタと比べると、やはり物足りないです。とはいえ、先ほど述べたイベントログと結果ログに加えて、スクリプトエディタにはいくつか便利な機能があります。
|
目に見えない手が墓場から話しかけてきて、次に何を入力したいのか教えてくれる |
|
あらかじめ用意されたAppleScriptコードスニペットが詰まったコンテキストメニュー |
AppleScriptの学習: リソース
時間とスペースの関係で、AppleScript 言語の完全な入門書を書くことはできません。(ここで言う時間とスペースとは、もちろんお金のことです。これは単純なアインシュタインの物理学です。アインシュタインは時間と空間は単に物質の振動の現れであると言いましたが、私にとってお金より重要なものはないのです。あと 3 ドルくれれば、この入門書のことなら何でも知りますが、そうでなければ何もしません)。そこで、代わりに他のリソースを紹介します。AppleScript を学ぶ最良の方法は、(a) 既に存在し、(b) 動作するスクリプトを調べることです。時間が経つにつれて、Apple がスクリプト メニューに用意しているサンプル スクリプトをすべて試すことになるでしょう。何か面白そうなスクリプトが見つかるまでスクロールし、スクリプト エディタでスクリプト ファイルを開いて、コードを操作してみてください。
冗談じゃない。Mailを使ってメールを作成して送信するAppleScriptはたくさん書いたことがあるけど、そのコードの中心となるのは、いつもAppleのスクリプトメニューのサンプルで見つけたコードだ。みんな、覚えておいてね。後になって罪悪感を感じた時だけ、それは盗みになるんだよ。
冗談です。Appleのスクリプトには、これらのサンプルを自由に再利用してよいと明記されています。しかも、これはまさにAppleScriptの開発者が当初意図していたこと、つまり「例から学ぶ」ことなのです。
Tigerインストールディスクを放り込んだ場所に戻って、Developer Toolsフォルダを開き、そこに隠された情報リソースをくまなく探し回ったくなるはずです。このディスクには、ハードコアなスーパーギーク向けのリソースと参考資料が満載で、今でも読むだけで興奮しすぎて神経細胞にカルシウムが沈着してしまうほどです。これは単なる防御反応です。しかし、このディスクにはAppleScriptの完全なドキュメントと参考資料が隠されており、AppleScriptの書き方の基礎から中間段階までを網羅的に解説しています。
他にも行くべき場所がいくつかあります:
AppleScriptユーザーメーリングリスト:これは、熟練したスクリプトのエキスパートから、まだ最初のtellブロックを書いたことのない初心者まで、あらゆる人が集まる公開メーリングリストです。皆が質問をしたり、テクニックを交換したりしています。AppleScriptには地雷が山ほどあり、狂気の沙汰、素晴らしい成果、あるいは毎年の連邦税法改正につながるような水平思考が必要になります。AppleScriptの仕組みを説明できるのは、経験者だけ…そしてもっと重要なのは、なぜうまくいかないことがあるのかを説明できるのです。
Appleのスクリプト対応アプリケーションページ:ユーザーリソースとして、またAppleScriptのパワーを訴求するために、AppleはAppleScriptをサポートするすべてのPanther内蔵アプリケーションとiLifeアプリケーションをまとめたウェブページを運営しています。各項目には、解説付きのサンプルスクリプトが多数掲載されています。Safariのスクリプト作成方法を学び始めたい方は、ここから始めるのがよいでしょう。
MacScripter.net:Apple以外では、AppleScriptに関する情報と教育リソースとしては文句なしに最高です。Appleも入れておけばいいのに。この記事の執筆時点で、MacScripterにはあらゆるカテゴリの1,300以上のサンプルスクリプトが掲載されており、読者の皆さんの役に立ち、啓発にも役立ちます。主要なMacアプリのスクリプト作成レベルをすべて網羅するという、不可能とも思える課題に挑戦しています。初心者からの質問も大歓迎で、非常に活発な掲示板も運営されており、MacScripterは真のコミュニティを築くことに成功しています。
Doug's AppleScripts for iTunes:このサイトの目的はただ一つ、iLifeのミュージックプレーヤーのスクリプト作成に特化しています。スクリプトスキルを磨き始めるには最適な場所です。ダウンロード可能なスクリプトは、5行で終わるシンプルなものから、「英雄的」と言わざるを得ないほどのスケールと野心を持つものまで、多岐にわたります。
スクリプトゥス・アノタトゥス
とはいえ、まずは簡単なスクリプトをお見せします。そして、あなたはこの素晴らしい特典を利用した最初の500名のうちの一人なので、後でハイライトをいくつか注釈しておきます。
無料のワードプロセッサとしては、TextEdit はかなり優秀です。豊富な機能に加え、Microsoft Word と互換性があるので、本格的な生産性向上アプリとしても使えます。ただし、文字数カウント機能のないワードプロセッサは使えません。文字数カウント機能を追加するのは簡単です。以下のコードを含む新しいスクリプトファイルを作成し、Scripts フォルダに保存するだけです。
アプリケーションに「TextEdit」と伝える
theTextを文書1のテキストに設定する
終わりを伝える
theLengthをtheTextの単語数に設定する
ダイアログを表示します。「テキストには「 &theLength & 」個の単語があります。」
このスクリプトを実行すると、最前面のテキストエディット文書の単語数が返されます。また、3回ほど長々と書き込む機会も得られます。
theLengthを文書1のtheTextの単語数に設定する…そして、その後に続くスクリプト行は不要だったでしょう。実行自体は問題なく完了したはずですが、結果が間違っています。AppleScriptがtellブロックの外側の単語数を数えると、すべてはうまくいきます。
テキスト(この場合は)をデータで置き換えます。AppleScriptはこの文に遭遇すると、その後に続くすべてのもの(数学的な計算、情報を取得する操作(ここで行っているように)、あるいは他の操作の結果など)を評価します。事前にtheTextを宣言したり、AppleScriptにテキストを格納するように指示したりする必要はありません。AppleScriptは動的にそれを判断します。
ダイアログを表示結果も生成します。もし私が線を引いたとしたら
ダイアログなどを表示するために someContainerName を設定します、
コンテナ名ユーザーがクリックしたボタンの名前が保持されます。
ダイアログのテキストをリアルタイムで構築することで、手間を省くことができます。アンパサンドは、AppleScriptに、すべての項目を1つの文字列にまとめるという指示を与える信号です。
アンディ ・イナトコは、最も著名なMacintoshの達人の一人です。1988年からMacintoshに関する記事を執筆しています。Macworldの月刊誌裏表紙のコラムニストを務め 、 現在は シカゴ・サンタイムズ のコラムニストも務めています。また、 Playboy 、 CNN.com 、そして数え切れないほど多くのオンラインメディア にも頻繁に寄稿しています 。