AppleScriptにココアを少々加える

AppleScriptにココアを少々加える
AppleScriptにココアを少々加える

AppleScriptObjCフレームワークは、AppleScriptとObjective-C言語を融合させた興味深いスクリプトの作成を可能にします。Appleはこのフレームワークについて、具体的に次のように説明しています。

AppleScriptObjC は、AppleScript オブジェクトを Cocoa ランタイムで Objective-C オブジェクトとして機能させる。

つまり、AppleScriptでは、一見分かりやすいAppleScriptの構文を使って、シンプルなObjective-Cコードを使用できるということです。もしまだ理解できていないようでしたら、もう少しお待ちください。これから、通知センターに通知を送信して終了するだけのCocoa-AppleScriptサンプルアプリを作成する、非常に視覚的なチュートリアルで説明します。

AppleScriptObjCは目新しいものではありません。実際、Mac OS X 10.6 Snow Leopardで初めて導入されました。Appleはこのトピックに関するリリースノートを公開していますが、言語を組み合わせると可能性は無限に広がります。正直なところ、私はAppleScriptにそれほど興味はありませんが、最近のOS X 10.8 Mountain Lionオペレーティングシステムで導入された新しい機能である通知センターとやり取りするためにAppleScriptを使用するというアイデアを思いついたとき、とても興味をそそられました。そこで、以下ではAppleScript-Cocoaアプリケーションの作成方法だけでなく、通知センターをAppleScriptに統合する優れた例も紹介します。

AppleScript-Cocoaアプリケーションを作成する際の主な違いは、AppleScriptエディタを使わなくなることです。Mac App StoreからXcodeアプリケーションをダウンロードし、それを使ってAppleScriptコードを記述する必要があります。Xcodeは無料でダウンロードでき、AppleScriptアプリケーションの作成以外にも、アプリ開発に興味がある方はぜひ試してみる価値のある素晴らしいツールがいくつか付属しています。

Xcode をインストールしたら、アプリケーションを開いて新しいプロジェクトを開始します。

Xcodeには多くのプロジェクトテンプレートが用意されていますが、現時点で必要なのは「OS X > アプリケーション > Cocoa-AppleScript アプリケーション」にあるテンプレートだけです。プロジェクト名と保存先ディレクトリの選択も求められます。

プロジェクトが読み込まれると、Xcode によっていくつかのデフォルトファイルがあらかじめ用意されます。その中には、通常「AppDelegate.applescript」と呼ばれるメインの AppleScript ファイルも含まれています。この AppleScript ファイルにコードを記述します。

それでは、スクリプトから新しい通知センターに通知を送信する AppleScript 関数を記述するために必要な少量のコードについて詳しく見ていきましょう。

まず、通知の詳細を記述するプレースホルダとして使用するプロパティをAppleScriptに追加します。プロパティは定数を定義するための一般的なAppleScript機能なので、構文については既にご存知かもしれません。ただし、このAppleScript-Cocoaアプリでは、プロパティに不足している値を代入しています。これは一時的なもので、次のコードで通知情報を割り当てるためです。スクリーンショットに示すように、このプロパティはメインのスクリプト関数で定義されています。

property myNotification : missing value 

次に、実際の通知を作成して送信するために呼び出す関数を追加しましょう。この関数は、タイトルとメッセージの2つのパラメータを取ります。

このコードには、AppleScriptの熱心なユーザーでさえ馴染みのないような多くの処理が含まれています。ここからObjective-Cの要素が少し出てきますが、ここではObjective-Cのコード自体の説明に没頭するのではなく、AppleScriptがどのようにそれにアクセスできるのかだけを説明します。良い例として、通知が割り当てられている2行目が挙げられます。Objective-Cでは、これは単に次のように記述されます。

[[NSUserNotification alloc] init]; 

しかし、ご覧の通り、これをCocoa-AppleScriptアプリケーションで使用するには、Appleのリリースノート「AppleScriptObjC」で定義されている一般的なAppleScript構文のいずれかでコードを記述する必要があります。私はAppleがObject's Method()と呼ぶ構文を選択しました。結果として、同じコードは次のように記述されます。

NSUserNotification's alloc()'s init() 

これは、AppleScriptでObjective-Cを記述し、活用するための基本的なレッスンです。Appleはリリースノートで追加の構文例を提供しているので、そちらもぜひ読んでみてください。

AppDelegate.applescript に通知関数のコードを記述すると、次のようになります。

最後に、関数を呼び出してタイトルとメッセージを渡すコード行を追加するだけです。このテストプロジェクトでは、applicationWillFinishLaunching_()関数に1行追加しました。これにより、アプリケーションの起動時にすぐに通知が送信され、その後アプリケーションが終了します。これで、AppleScriptで通知センターを実装する方法の基本がお分かりいただけると思います。

AppDelegate.applescript ファイルは次のようになります。

プログラムを実行して通知をテストするには、ツールバーの左側にあるXcodeの「再生」ボタンをクリックするだけです。プログラムが実行されると通知が表示され、通知センターにも記録されます。この例では、通知の外観をパーソナライズするために、プロジェクトにMacStoriesアイコンを追加しました。また、Cocoa-AppleScriptアプリケーションの最終結果はスクリプトではなく、アプリケーション実行時にXcodeによってビルドされるバンドルパッケージであることも重要です。生成された.appファイルは、Xcodeの左側のサイドバーの下部にあるプロジェクトディレクトリツリーのProductsフォルダに保存されます。

このテストプロジェクトはダウンロード可能なzipファイルとして同梱されているので、ぜひ試してみてください!このチュートリアルが、このコードを使ってスクリプトをより高度なAppleScriptアプリケーションに拡張するのに十分なほどシンプルだったことを願っています。AppleScriptObjCフレームワークは、通知センター以外にも、Xcodeと付属ツールのInterface Builderを使ってインターフェース要素などの機能を追加するなど、非常に興味深い用途があります。皆さんがどのように活用されているか、ぜひお聞かせください!

クラブ・マックストーリーズ

追加コンテンツと特典にアクセスする

Club MacStories は 2015 年に設立され、ほぼ 10 年間にわたって毎週独占コンテンツを提供してきました。

毎週、毎月の電子メール ニュースレターから始まったものが、すべての MacStories ファン向けに設計されたメンバーシップ ファミリーに成長しました。

詳細については、こちらおよびクラブの FAQ をご覧ください。

Club MacStories : アプリ、ヒント、自動化ワークフロー、長​​文執筆、MacStories Unwind ポッドキャストへの早期アクセス、定期的な景品など、盛りだくさんの情報を満載した、電子メールと Web 経由の週刊および月刊ニュースレター。

Club MacStories+ : Club MacStories が提供するすべての機能に加え、アクティブな Discord コミュニティ、クラブの過去のカタログ全体を閲覧するための高度な検索機能とカスタム RSS 機能、ボーナス コラム、多数のアプリ割引などが含まれます。

Club Premier : 上記のすべてに加え、早期に、広告なしで、高ビットレートのオーディオで配信される当社の主力ポッドキャストの拡張バージョンである AppStories+ が含まれます。