15分で出来る!Spotlightプラグインの作り方
2014/12/27

git, plugin, Python, Spotlight
1, Spotlightプラグインの概要
今回、作り方を紹介するSpotlightプラグインは、Flashlightというサードパティのアプリケーションを介して提供されます。このアプリケーションをお手持ちのMacOS X Yosemiteにインストールするとこで、Spotlightに様々な機能を追加することができます。一例として、Spotlight(Ctr+Space)で「weather tokyo」と打つと、洗練されたデザインで東京の天気情報が表示されます。このプラグインはPythonとHTMLと周辺技術で実装されており、Pythonを触ったことがない私でも簡単にプラグイン開発ができました。

2, Flashlightのインストール
まだFlashlightアプリケーションをインストールしていない方は、はじめにFlashlightプラグインをインストールしてください。インストールが終わったらFlashlightアプリケーションを起動し、適当にプラグインをインストールして使用感を確認してください。
方法1:〜Webサイトからインストール

- Flashlightで、右上にある「Download」のリンクをクリックしてください。
- ファイルを展開し、Applicationフォルダに移動してください。
- Flashlightを起動し、Spotlightプラグインを有効にするをクリックしてください。

方法2:〜Webサイトからインストール
Homebrewの環境が整っている方は次のコマンドをターミナルで打ってインストールする方法をお勧めします。
> brew cask install flashlight
「方法1」と同様にFlashlightを起動し、Spotlightプラグインを有効にするをクリックしてください。
3. プラグイン開発の準備
開発で使う主なアプリケーションは次のようになっています。
- 適当なエディタ:JSONファイル(.json)やPythonファイル (.py)などの編集に使用します。例:Sublime Text3(http://www.sublimetext.com/3)
- ターミナル:Pythonプログラムのコンパイル時などに使用します。
- 画像編集ソフト:プラグインにアイコンを設定したいとき必要です。例:Gimp【無料】(http://www.gimp.org)、Pixelmator【有料】(http://www.pixelmator.com/mac/)
プラグインが保存されているファルダは「/Users/あなたのユーザディレクトリ/Library/FlashlightPlugins」です。

プラグインは.bundle拡張子となっています。一見すると扱うのが難しそうな拡張子に思えますが、実態は通常のフォルダをリネームしたものです。注意したいのは、jarファイルなどの多くの形式が圧縮ファイルだったりするのですが、このファイルは圧縮せずに拡張子を変えただけのものになっています。
4. プラグインの開発
それでは、適当なbundleをコピーし、拡張子を変更してフォルダの中身を見てみましょう。
ファイルの中身を見る方法
- 「****.bundle」を選択し、複製する
- 複製した「****~コピー.bundle」を選択し、Enterキーを押す
- 「開発したいプラグイン名(英数字のみ、スペースなどを空けない)」に変更する
開発のプロセスは次の通りです。
- 構成ファイルの編集
- plugin.pyのコーディング
- plugin.pyのコンパイル
- プラグイン化:作業フォルダをコピー
- プラグイン化:コピーした作業フォルダに拡張子をつける
- プラグイン化:確認メッセージが出てくるので、「続行」をする
- Spotlightで動作確認
- プロセス2に戻り修正
私が作成したbashを実行するとコンパイル〜プラグイン化まで自動で行うことができます。
- 構成ファイルの編集
- plugin.pyのコーディング
- ターミナルで「./build」を実行
- Spotlightで動作確認
- [プロセス2]に戻り修正
# build
python -m py_compile plugin.py
rm -fr ../${PWD##*/}build.bundle/
cp -ir ../${PWD##*/}/ ../${PWD##*/}build/
rm ../${PWD##*/}build/build
rm ../${PWD##*/}build/.DS_Store
mv ../${PWD##*/}build/ ../${PWD##*/}build.bundle/#使用手順1:「/Users/あなたのユーザディレクトリ/Library/FlashlightPlugins/開発したいプラグイン名/」に「build」という名前で保存してください
# 使用手順2:上記階層に移動しターミナルで「chmod a+x ./build」を実行
# 使用手順3:上記階層に移動しターミナルで「./build」を実行
最後に、pluginを構成するファイルの説明をします。なお、ここで説明していないファイルは、英語以外の言語に対応させるためのファイル、その他リソースファイルになります。
info.json
プラグインダウンロードシステムに登録するための情報ファイルです。Flashlight開発者から頂いた情報によるとnameは開発したプラグインディレクトリにしないと将来的に動かなくなるということです。
examle.text
Spotlightでのプラグインの動作仕様を記述する部分です。動作は複数のパターンを記述できますが、plugin本体に渡すパラメータ(~*****)の数は揃えないとうまくいかないようです。
plugin.py
プラグイン本体です。プラグインを構成する2つの関数は、取得値の加工を行うresults関数と、results関数で生成されたパラメータを受け取りプラグインの動作を担うrun関数に分かれています。パラメータは日本語などのマルチバイト言語のエンコーディングを確実に行わないとプラグイン自体が動作しなくなるので注意が必要です。次に一部のパラメータの説明をします。
@return title
Spotlight入力時のナビゲーションです。
@return run_args
プラグイン動作部であるrun関数に渡すパラメータです。
plugin.pyc
プラグイン本体をコンパイルしたときに生成されるファイルです。
icon.png
プラグインにアイコンを設定したいとき必要なファイルです。最大で512*512のサイズになっています。背景は透過処理をさせると良いと思います。
5. プラグイン開発の参考になるサイト
Flashlight公式の開発ドキュメント【英語】
https://github.com/nate-parrott/Flashlight/blob/master/Docs/Tutorial.markdown
6. 【番外編】プラグインをFlashlightのダウンロードシステムに追加してもらう方法
- folkする
- git clone https://git@github.com:your_account/Flashlight.git
- 開発したプラグイン(.baundleファイル)を「PluginDirectories/1」に追加する
- git add .
- git commit -m “add new plugin 開発したプラグイン”
- git push origin master:master
- pull requestをする
参考になるサイト
初めてのpull request @ GitHub
http://rcmdnk.github.io/blog/2013/05/19/computer-git-github/
Flashlight公式のプラグインリスト【英語】
https://github.com/nate-parrott/Flashlight/tree/master/PluginDirectories/1
>