最終更新日:2012/06/23

ServiceAppleScript - AppleScriptを実行するサービスメニュー項目を作るアプリケーション

AutomatorでAppleScriptを実行するサービスを作る場合に比べての利点

AutomatorでAppleScriptを実行するサービスを作る場合に比べての欠点

動作テスト環境

Mac OS X 10.6.8

基本ファイルダウンロード

  1. ServiceAppleScript1.1.zip(ファイルを対象にするサービスが「一般」ではなく「ファイルとフォルダ」に分類されるようになった。)
  2. ServiceAppleScript1.0.zip
  3. ServiceAppleScript0.9.zip

ServiceAppleScriptで作ったアプリケーションの配布について

ServiceAppleScriptで作ったアプリケーションは自由に配布することができます。許可や連絡等は必要ありません。

ここで公開しているアプリケーションを改造した物も自由に配布することができます。

ServiceAppleScript 0.9の仕様

ServiceAppleScript 1.0の新機能

使い方

概要

AppleScriptを実行するサービスメニュー呼び出し専用アプリケーションです。AppleScript毎にアプリケーションを作ります。

このアプリケーションで作ったサービスはデフォルトではオフになっているのでシステム環境設定のキーボードのキーボードショートカットのサービスでオンにする必要があります。

新しいサービスメニューの作り方

  1. アプリケーションをアプリケーションフォルダに入れます。サブフォルダでも大丈夫です。
  2. アプリケーションを複製します。
  3. 複製したアプリケーションをFinderでダブルクリックして実行します。 すると、ちょっとしてからサービス名設定ダイアログが表示されるので入力します。 入力するとアプリケーションの名前が入力した物に変わります。
  4. アプリケーションをスクリプトエディタにドラッグドロップします。 「スクリプトに対応していないので、以下略」といったダイアログが出ますが、OKを押すとスクリプトが表示されます。 これが実行するスクリプトになりますので編集、保存します。
  5. システム環境設定のサービスのチェックはデフォルトではオフになっているのでオンにします。 また、リストに表示されていない場合は「サービスメニュー更新.app」を実行します。 なかなか表示されない時もありますが、デスクトップに移動して戻したり、AppleScriptエディタで開いて編集したりしたあとに「サービスメニュー更新.app」を実行をすると表示されるようになると思います。
  6. サービスに表示されて実行できたらOKです。
  7. 実行しても何故かうまく動かない場合は、アプリケーションをデスクトップに移動して元の場所に戻すとうまく動くようになる場合があります。アプリケーション内部の構成を変えていますが、その変更をシステムがちゃんと認識できていない場合に起こって、前記のようにファイルを移動させるとちゃんと認識するようです。

サービス用AppleScriptをスクリプトメニューから実行する方法

「main.scptのエイリアス作成.app」にServiceAppleScript.appをドロップするとその内部あるmain.scptのエイリアスをアプリケーション名で作ります。 スクリプトメニューからも実行したい時などに。

これは検索用サービスをメニューから実行して、検索ワードを入力して検索したいと思ったので作りました。一つのスクリプトいろいろなところから実行できるのでスクリプトの管理が楽だと思います。

特殊な設定

URLからAppleScriptを実行

Info.plistでURLスキームを登録するとURLを開くとAppleScriptを実行できるようになります。

URLを開くとAppleScriptを実行できる利点としては、SafariのブックマークバーやUserScriptなどURLを開くことしかできないところからAppleScriptを実行できるようになる、というのがあります。特にUserScriptからAppleScriptを自由に実行できるようになると、SafariEverLogger.appとpixivNanikaHelper.appでやっているように、ブラウザのコンテンツとローカルのアプリケーションやデータを連携したものが手軽に作れます。

Info.plistに下記のテキストを追加します。実際のInfo.plistはSafariEverLoggerの中のInfo.plistを見て下さい。

この例の場合のURLは次のようになります。

safarieverlogger:hoge

	<key>CFBundleURLTypes</key>
	<array>
		<dict>
			<key>CFBundleURLName</key>
			<string>safarieverlogger</string>
			<key>CFBundleURLSchemes</key>
			<array>
				<string>safarieverlogger</string>
			</array>
		</dict>
	</array>

特定のアプリケーションのみメニューアイテムを表示

下記のようなテキストをInfo.plistに追加すると特定のアプリケーションのみでメニューに表示されるようになります。

実際のInfo.plistはFlashのキャッシュファイルを保存の中のInfo.plistを見て下さい。

<key>NSRequiredContext</key>
<dict>
	<key>NSApplicationIdentifier</key>
	<array>
		<string>org.mozilla.firefox</string>
		<string>com.google.Chrome</string>
		<string>com.apple.Safari</string>
	</array>
</dict>

作ってみたServiceAppleScript製アプリケーション

ネット一括検索

選択したテキストを指定したサイトで検索できます。こういうものは良くありますが、複数サイトを一括して検索できるのが特徴です。例えばアマゾン、ソフマップ、楽天で買い物を良くする人はこれらのサイトの検索結果を全部タブで表示することができます。こうすることによって検索を種類ごとにまとめることができます。自分は、買い物、辞書、ソフト、開発などで分けています。ブラウザの拡張でもよくありますが、ブラウザの拡張だとブラウザでしか使えませんがサービスでやるとブラウザ以外のMail、テキストエディタなどサービスに対応しているすべてのソフトで使えるので便利だと思います。

ダウンロード

  1. ServiceAppleScript_Kensaku_Kaimono1.2.zip(Safari5.1で動かないのを修正)
  2. ServiceAppleScript_Kensaku_Kaimono1.1.zip(-から始まるテキストを選択した場合にエラーになるのを修正)
  3. ServiceAppleScript_Kensaku_Kaimono1.0.zip

設定変更方法

AppleScriptエディタで開いてスクリプトを表示すると上の方に設定がありますのでお好みに合わせて修正してください。

「検索:」スクリプトの機能

デフォルトブラウザをOpenFileHelperなどSafari、Camino、Firefox以外にしている場合にデフォルトブラウザを一括設定する

defaults write com.yourcompany.ServiceAppleScript defaultBrowser 'Firefox'

他に使ってる検索用設定

設定だけ書いておきますので興味があったら作ってみてください

検索:開発

関数の使い方等がわからない時はこれでGoogleとGoogleソースコード検索をまとめて検索しています。

property searchURLRecordList : {{URL:"http://www.google.co.jp/search?complete=1&hl=ja&source=hp&q=", URLSuffix:"&lr=&aq=f&oq=", charCode:"UTF-8"}, {URL:"http://www.google.com/codesearch?q=", URLSuffix:"&hl=ja", charCode:"UTF-8"}, {URL:"http://developer.apple.com/search.php?q=", URLSuffix:"&num=10&site=default_collection&", charCode:"UTF-8"}}

ドットファイル操作

.から始まるFinderでは通常見えないファイルを開いたり、見えるようにリネームできます。

使い方

仕様

ダウンロード

  1. ServiceAppleScript_dotFileSousa1.0.zip

翻訳

翻訳結果をGrowlで表示します。Automatorでも作りましたが自分はこっちを使っています。

ExciteとLivedoorの翻訳結果を表示します。翻訳精度はあまり高くない場合がありますが二つあると一つよりはわかりやすいのではと思い、二つ表示しています。

改造版GrowlpureHTMLView.growlStylepureHTMLViewを使った通知を表示する設定が必要です。

ダウンロード

  1. ServiceAppleScript_honyaku1.0.zip

weblocをurlに変換

.weblocファイルを.urlファイルに変換します。また、.urlファイルにはFinderのコメントにURLを書き込み、FinderのアイコンをURLのfaviconにします。変換が終わった.weblocファイルはゴミ箱に移動します。

コメントとアイコンを付けると下記画像のように結構見やすくなります。

ダウンロード

  1. webloctourl.app.zip

Windows向けZip作成

Windowsで文字化けしないZipファイルを作成します。

Windowsで文字化けしないZipを作るアプリケーションはいくつかありますが、自分が見た物にはPerlを使っている物とRubyを使っているものがあったので、Pythonでできないか調べてみたらPythonで通常のZipファイルなら作成可能でファイル名を指定できたのでやってみました。

動作環境

自分は特にPythonの環境をいじった記憶が無いのでMac OS X 10.6で動くと思います。

10.5はPythonの環境がどうなのかわからないので動くかどうか分かりません。

使用上の注意

  1. Windowsで使用できない文字は全角に変換します。使用できない文字以外にも使用できないファイル名のルールがありますが、それには対処しません。参考:Windowsでファイル名に使用できない名前 - 屋根裏部屋mkII改
  2. ユニコードにあってshift-jisに無い文字は■に置き換えます。
  3. テストファイルを見ると「/」は「:」に置き換わっています。「:」と「/」はOS X内で置換されますが自分もルールが良くわかっていないので、そのままです。
  4. テストファイル以外にはほとんどテストはしていないので、実際に使用する場合は予めテストしてから使うことをお勧めします。特に重要なファイルはApp StoreにあるZip圧縮アプリケーション等実績のあるソフトを使うのをお勧めします。
  5. 「.DS_Store」と「._」から始るファイルはZipに追加しません。「.」から始るファイルも迷ったのですが追加するようにしておきました。
  6. Pythonではパスワード付きZipは作成できないのでパスワードは付けられません。

使い方

サービスメニューに表示されるように設定します。

ファイルを選択してサービスから実行するとzipファイルを作り、作成が終わると音声で通知とFinderで出来上がったzipファイルを選択、表示します。

GUIでのプログレスバー、通知ダイアログ等はありません。

途中でキャンセルもできないので、間違って大量のファイルが入ったフォルダを選択したりしないように。

テスト結果

OS Xにあるテストファイル
Window7のエクスプローラーで解凍したテストファイル

ダウンロード

  1. WindowsMukeZipSakusei.app.zip

Flashのキャッシュファイルを保存

スクリプト自体はわざわざサービスで実行する意味は無いのですが、常に表示される「一般」のサービスメニュー項目をSafari,Chrome,Firefoxだけで表示されるようにしたもののテストを兼ねて作ってみました。

Flashで再生している動画のキャッシュファイルをムービーフォルダに移動します。見終わった動画をこれで保存するとキャッシュを移動するだけなので一瞬で終わるのが便利なところです。なお、Flashのキャッシュファイルはページを閉じたり、移動したら無くなるので気をつけて下さい。

機能、仕様

  1. サービスメニューの10.6以降の仕様を使っているので10.6以降が必要です。
  2. Flash バージョン 10.3.181.22で動作確認しました。ブラウザはSafari,Firefox4,Google Chromeでテストしました。
  3. YouTube、ニコニコ動画などFlashで再生している動画のキャッシュ(テンポラリファイル)をムービーフォルダに移動します。読み込み中に移動しても特に問題無かったのでコピーじゃなくて移動にしてあります。ページを閉じた時に移動したファイルが消えたり、ブラウザのFlashプレイヤーの方で問題が起きたりとかはありませんでした。ただ、バージョンが変わったら変わる可能性はあります。
  4. 保存ファイル名はブラウザのアクティブなウインドウの名前にファイルの拡張子を付けた物になります。同名のファイルがある場合は1,2...のように数字を追加します。
  5. 複数のキャッシュファイルがある場合はどれを移動したらいいのか分からないのでFinderでファイルを表示します。
  6. 移動後Finderでファイルを表示します。
  7. 上記仕様がいまいちな場合は、すべてAppleScriptで書いてあるので「Flashのキャッシュファイルを保存.app」をAppleScriptエディタで開いて修正することができます。

使い方

サービスメニューに表示されるように設定します。項目名は「Flashのキャッシュファイルを保存」です。

YouTubeやニコニコ動画で動画を表示中にサービスメニューから「Flashのキャッシュファイルを保存」を選択するとムービーフォルダにキャッシュファイルを移動して、Finderで表示します。

このサービスメニュー項目はSafari,Google Chrome,Firefoxでのみ表示されます。

ダウンロード

  1. SaveFlashTmpFile.app.zip

Mac App StoreとiTunes Storeで検索

スクリプト的には「検索:」の簡易版でURLをブラウザで開くのではなく、openコマンドで開きます。適切なアプリケーションで直接開きます。

ダウンロード

  1. Kensaku_iTunesStore_MacAppStore.zip

MediaInfoで調べた情報を表示

MediaInfoで調べた動画等の情報を表示します。

MediaInfoへのリンク

使い方

  1. 上記リンクからダウンロードしたCUI版MediaInfoをインストールします。
  2. サービスメニューに表示されるように設定します。項目名は「MediaInfoで調べた情報を表示」です。
  3. Finderでファイルを選んでサービスメニューから実行します。
  4. コマンドキーを押しながらメニューを選ぶと、情報をブラウザで表示します。情報をコピーしたい場合に。

仕様、バグ

  1. 調べるファイル数は初期値で最大100個までとなっています。変更するにはスクリプトをいじって下さい。
  2. mp3のタグなどファイルに含まれる情報の文字コードがUnicodeじゃない場合、文字化けします。
  3. mediainfoにフォルダを渡すとフォルダ内のファイルが調べられるのですが、このスクリプトでやると何故かできないこともあるので、全部調べないようにしておきました。間違えて、すごいいっぱいファイルが入ったフォルダを選択した場合にキャンセルできないのでそういうことにならないようにする為、ってのもあります。

ダウンロード

  1. MediaInfodeShirabeta0.1.2.app.zip(情報を表示するデザインを調整、その他修正)
  2. MediaInfodeShirabeta0.1.1.app.zip
  3. MediaInfodeShirabeta0.1.app.zip

選択したテキストをEvernoteの「名前がウインドウ名のノート」に追加

選択したテキストをEvernoteの「名前がウインドウ名のノート」に追加します。

追加時にEvernoteがアクティブになったり、作成したノートを表示したりしません。

例えば、掲示板の一部をクリップする時に、連続して実行するだけで、同じノートにどんどん追加していくことができます。

いちいち確認は必要無い場合、さくっとクリップしたい場合に。

使い方

  1. サービスメニューに表示されるように設定します。項目名は「Append Selection to Evernote」です。
  2. テキストを選択して実行すると選択したテキストを「名前がウインドウ名のノート」に追加します。
  3. 作成するノートの保存先はAppend Selection to Evernote.appをAppleScriptエディタで開いて変更して下さい。デフォルトでは "Append Clip" という適当な名前になっています。

仕様、注意点

種類

Append Selection to 1stLine Note.app
選択したテキストの1行目と同じ名前のノートに追加
Append Selection to App Name Note.app
現在のアプリケーションと同じ名前のノートに追加
Append Selection to Default Note.app
ウインドウ名→ドメイン名→セカンドレベルドメイン名の順にノートを探して最初に見つかったものに追加。無ければコンテキストメニューでノートの種類を選択。
Safariからクリップする場合でどのノートに保存しているか分からない場合に、既にあるものから最適だと思われるものに追加。
Append Selection to Domain Note.app
ノート名がドメインのノートに追加
SafariなどWebViewからのみ
ブログや掲示板のクリップを個別のノートじゃなくて、そのサイトのノートにまとめたい場合に。
Append Selection to SecondLevelDomain Note.app
ノート名がセカンドレベルドメインのノートに追加
SafariなどWebViewからのみ
セカンドレベルドメインはwww.apple.com、store.apple.comがapple.comになります。
上記のようにドメインが分かれているサイトのクリップを一つのノートにしたい場合に。
Append Selection to Window Name Note.app
ノート名が現在のウインドウ名のノートに追加

ダウンロード

  1. Append_Selection_to_Evernote0.3.0.zip(RTFのスタイルが消えていたのを修正。その他改良)
  2. Append_Selection_to_Evernote0.2.0.zip(保存するノート名をウインドウタイトル、アプリケーション名、URLのドメイン、URLのセカンドレベルドメインをノート名とする4種類セット。WebViewから追加する場合は画像も取り込めるようになった。ただし、取り込めないのもあるかもしれません。)
  3. Append Selection to Evernote0.1.0.zip(10.7で動いたと報告を頂きました)