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

2014/12/27

git, plugin, Python, Spotlight

Flashlight-website
Flashlight-website

1, Spotlightプラグインの概要

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

 

flashlight-gui
flashlight-gui

Flashlight

2,  Flashlightのインストール

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

方法1:〜Webサイトからインストール
flashlight-download
flashlight-download
  1. Flashlightで、右上にある「Download」のリンクをクリックしてください。
  2. ファイルを展開し、Applicationフォルダに移動してください。
  3. Flashlightを起動し、Spotlightプラグインを有効にするをクリックしてください。
flashlight-enable
flashlight-enable
方法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」です。

flashlight-bundle
flashlight-bundle

プラグインは.bundle拡張子となっています。一見すると扱うのが難しそうな拡張子に思えますが、実態は通常のフォルダをリネームしたものです。注意したいのは、jarファイルなどの多くの形式が圧縮ファイルだったりするのですが、このファイルは圧縮せずに拡張子を変えただけのものになっています。

 4. プラグインの開発

それでは、適当なbundleをコピーし、拡張子を変更してフォルダの中身を見てみましょう。

ファイルの中身を見る方法

  1. 「****.bundle」を選択し、複製する
  2. 複製した「****~コピー.bundle」を選択し、Enterキーを押す
  3. 「開発したいプラグイン名(英数字のみ、スペースなどを空けない)」に変更する

開発のプロセスは次の通りです。

  1. 構成ファイルの編集
  2. plugin.pyのコーディング
  3. plugin.pyのコンパイル
  4. プラグイン化:作業フォルダをコピー
  5. プラグイン化:コピーした作業フォルダに拡張子をつける
  6. プラグイン化:確認メッセージが出てくるので、「続行」をする
  7. Spotlightで動作確認
  8. プロセス2に戻り修正

私が作成したbashを実行するとコンパイル〜プラグイン化まで自動で行うことができます。

  1. 構成ファイルの編集
  2. plugin.pyのコーディング
  3. ターミナルで「./build」を実行
  4. Spotlightで動作確認
  5. [プロセス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のダウンロードシステムに追加してもらう方法

 

  1. folkする
  2. git clone https://git@github.com:your_account/Flashlight.git
  3. 開発したプラグイン(.baundleファイル)を「PluginDirectories/1」に追加する
  4. git add .
  5. git commit -m “add new plugin 開発したプラグイン”
  6. git push origin master:master
  7. 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

>

投稿者情報

vicugna

webエンジニアの卵。趣味:ガジェット触り、食べ歩き、作業効率化。普段は機械学習とJavaのフレームワークに触れている時間が多いです。技術ネタなどを書いていく予定です。

>> vicugnaが執筆した他の記事を読む

法人向け人気レンタルサーバー
法人向け人気専用サーバー
個人向け人気レンタルサーバー