AppleScriptの知識だけでメニューバーアプリを作ることができる『MenuBarAppleScript』

2012年9月4日

AppleScriptの知識だけでメニューバーアプリを作ることができるアプリです。

XcodeやCocoaの知識は必要なく「AppleScript エディタ」でスクリプトファイルを編集するだけ。

既存のAppleScriptでアプリを作る方法と比べ以下の利点があります。

  • 指定したアプリがアクティブな時だけ表示することができメニューバーがごちゃごちゃしない
  • OS X側からの通知(iTunesの曲変更、アプリの起動の有無、ファイル変更)を受け取ってアクションを起こせるので、待機中にCPUやメモリを浪費しない
  • ホットキーに対応したアプリが作れる

ではどのようなアプリが作れるのかサンプルアプリを見ていきましょう。

LyricsStarTunes

MenuBarAppleScript1

メニューバーにiTunes再生中の曲のアートワークとレーティンの数字を表示、メニューを開くとさらに詳しい情報と歌詞が表示されレーティングの変更も可能。

iTunesが再生されていない時は隠れます。

MoveFileMenu

MenuBarAppleScript2

Finderウィンドウで選択されているファイルを指定したフォルダへ移動するアプリ。

LyricsStariTunesと同様にFinderがアクティブではない時にはメニューバーアイコンが隠れます。

新しくアプリを作るにはサンプルアプリを「AppleScript エディタ」にドラッグ&ドロップ。

表示されるスクリプトファイルを編集して作成します。

MenuBarAppleScript3

on doInit(theModifierKeyList, theActiveAppRecord)
-- 起動時にだけ実行される
return {|MenuBarItemTitle|:"メニューバータイトル", |MenuItemList|:{"メニュー1", "メニュー2"}, EventList:{"selectMenuItem"}}
end doInit
on doSelectMenuItem(theTitle, theTag, theModifierKeyList, theActiveAppRecord)
-- メニューを選択した時に実行されます
-- メニュー選択に設定するメニューバーの情報を返します
return {|MenuBarItemTitle|:theTitle}
end doSelectMenuItem

上記のAppleScirptをエディタで開く

メニューバー項目をクリックするとメニューバーに表示される文字その文字に変わるというもの凄く簡易的なアプリを書いてみました。

ユーザー操作によって引き起されるイベント(メニューバー項目をクリックした・ホットキーを押したなど)やOS X側からの通知(iTunesで曲が変わった・アクティブなアプリが変わったなど)を受け取って、それに対応するハンドラ内でアクションを起こすという仕組みです。

「doInit」ハンドラは起動時に実行され、設定なども行なうので必ず必要。

ハンドラの最後に決まった書式のレコードのキーを返し、メニューバーの状態を変更します。

イベントや通知はdoInitハンドラ内のレコードのキーに記述しておかないとイベントや通知を認識してくれないので注意が必要。

最初は難しく感じますが、AppleScriptをある程度書けてハンドラの概念も理解していれば使いこなすことは不可能ではありません。