Home > Quicksilverプラグインのつくりかた

Quicksilverプラグインのつくりかた

Quicksilverでプラグインをつくる方法をチュートリアルにしてまとめました。

このチュートリアルを読むことで、以下のものがつくれるようになります。

  • 基本的なQuicksilverプラグイン
  • プラグイン用の設定画面
  • 設定画面からのデータ取得

目次

  • ここでの環境
  • 必要なもの
  • 準備
  • つくりはじめる
  • PreferencePaneをつくる
  • Actionのコードを書く
  • おわりに
  • 参照

ここでの環境

  • Mac OS X Leopard 10.5.1
  • Quicksilver B53 (3814)
  • Xcode 3.0

必要なもの

準備

ビルドできるようになるまでの準備をします。

1. ダウンロードしたXcodeのテンプレートをインストール

Xcode 3.0 からは、カスタムテンプレートを置く場所が /Developer/Library/Xcode/Project\ Templates/ になっています。 (VIRTUOSO VIRTUOSOのところでは、 /Library/Application Support/Apple/Developer Tools/Project Templates/ に置くよう書かれている)

ここでは、 /Developer/Library/Xcode/Project\ Templates/Bundle/Quicksilver\ Plug-in というパスになるように、zipを展開したディレクトリを置きます。

2. Xcode プロジェクトをつくる

1がうまくいっていれば、このように Quicksilver Plug-in が選択できます。

すすめると、こんな画面に。

このチュートリアルでは、設定画面 (PreferencePane) もつくるので、 QSInterface.frameworkにもチェックして、リンクされるようにしておきましょう。

3. Source Trees

プラグインをビルドするには、Quicksilverのフレームワークが必要です。 ダウンロードしておいたQuicksilver Developer版の中に、フレームワークがあるのでそこをXcodeに指定します。

XcodeのPreferencesを開き、Source Treesタブに移動して、画面のように設定します (Pathのところは、Quicksilver Developer版を置いた場所に読み替えてください。 例:/Applications/QS-dev.app/Contents/Frameworks)

つくりはじめる

フレームワークにのっかってビルドできるところまでいってみましょう。

4. Info.plist

さて、ここまでで準備が完了しました。 ここからは実際にプラグインをつくっていくことになります。

プラグインの情報のほとんどは、Info.plistに書くことになります。 .plistなファイルはXMLなので、Property List Editorで開くと編集にラクができます。

デフォルトのInfo.plistをProperty List Editorで開くと、次のような感じ。

個々のキー/値については、 Anatomy of a plugin - Info.plist Part 1Plist Specification が詳しいです。 ここでは、最小限の設定項目を埋めていきます。

5. QSPlugin

プラグインについてのメタ情報を書きます。

Before | After:

6. QSActions

実際にプラグインが何をするかについての情報を書きます。 まず、QSActionsTemplateからQSActionsに名前を変えておきます。

nameのところの値をタイプすることで、Quicksilverからこのプラグインが呼ばれるので、 それっぽい値を入れておくとよいでしょう。

directTypesのところで、受けつける入力の種類を判定するぽいです。 ここでは “*”を指定してなんでもこいにしてみました。

Before | After:

7. QSRegistration

いろいろ設定項目はありますが、ここではPreferencePaneについて。 まず、QSRegistrationTemplateからQSRegistrationに名前を変えておきます。

QSPreferencePanesの中に、classを指定できるところがあります。 ここには、後でつくるPreferencePane用のクラス名を指定します。

Before | After:

8. ビルド

そろそろこのページを見ながらちまちまと作業をするのにも飽きてきたことででしょう。 ここらでビルドして、実際に動いてるのを見ようではないですか。

Xcodeでふつうにビルドすると、*.qsplugin というファイルが生成されます。 これがQuicksilverのプラグインなのですね。

ダブルクリックすると、Quicksilverに “プラグインをインストールする? “みたいに聞かれるのでYesで進みましょう。

9. 動いてるのを見る

「.」でテキスト入力モードにして何かうちこみ、TABでActionに移りましょう。 6.で設定してある名前を入力すればほら、いまつくったプラグインが呼び出せるではないですか! (とはいえ、いまのところ何もActionを実装していないので、実行したところで何も起こりません)

次に、QuicksilverのPreferenceを開いてみます。 左のリストに、いまつくったプラグインがあると思います。やったね !

PreferencePaneをつくる

ここからがお楽しみです。

10. PreferencePaneのクラスをつくる

File→Newから、Objective-C class をつくります。 ファイル名は、7で指定してたクラス名にするとよいでしょう。

@interfaceを、QSPreferencePaneを継承するように書き換えます。

QSPluginTutorialPreferencePane.h:

#import <qsinterface/QSPreferencePane.h>
 
@interface QSPluginTutorialPreferencePane : QSPreferencePane {
}
 
@end

@implementationに、mainNibNameというメソッドを加えます。 このメソッドは、次につくるnibファイルの名前 (から.nibを除いたもの) を返すようにします。

QSPluginTutorialPreferencePane.m:

#import "QSPluginTutorialPreferencePane.h"
 
 
@implementation QSPluginTutorialPreferencePane
 
-(NSString *)mainNibName {
	return @"QSPluginTutorialPreference";
}
 
@end

ここまでのプロジェクトはこんな感じになるでしょう。

11. NIBをつくる

File→Newから、Window NIB をつくります。

12. File’s OwnerのクラスをPreferencePaneのクラスにする

このへんを 参考にして、File’s Ownerのクラスを、10でつくったクラスにします。

まず、QSPreferencePane.hと10でつくったクラスのヘッダファイルを、 NIBのウィンドウにドラッグ&ドロップします。

次に、File’s Ownerのオブジェクトを選択した状態でObject Identityの設定ウィンドウに行き、 Classを10でつくったクラス名にします。

13. File’s OwnerとWindowをつなげる

File’s OwnerのオブジェクトからCtrl+ドラッグしてWindowにドロップすると、 オブジェクトをつなげることができます。 Outlets _windowと出るので、_windowを選択しましょう。

14. コントロールを配置

好きなコントロールをWindowにつけましょう。 ここでは、シンプルなText Fieldコントロールをつけました。

15. 動かす

ふたたびXcodeでビルドし、.qspluginをつくり、インストールします。 QuicksilverのPreference→つくっているプラグインを選ぶと、ちゃんと右側にいまつくったText Fieldが 表示されることでしょう。やった !

16. バインドする

しかしこのままでは、設定画面で入力した値をどうやって使うのか分かりませんよね。 ここで、Cocoa Binding というテクニックをつかいます。

14で配置したコントロールを選択してBindngs設定ウィンドウに行き、次のように設定します。

  • Bind to: Shared User Defaults
  • Controller key: values
  • Model Key Path: 好きな文字列 (他のところからこの値を参照するときに使うキー)

ここでは、Model Key Path を QSPluginTutorial.someKey という値にしました。

Actionのコードを書く

したいことを何でも書くところ。

17. 入力 + 設定から得た値 => 出力

Actionのクラスの実装を書きます。 ここでは、入力された文字列に、PreferencePaneから得た値を組合せて、出力にすることにしました。 コードは以下のようになります。

QSPluginTutorialAction.m:

@implementation QSPluginTutorialAction
 
- (QSObject *)performActionOnObject:(QSObject *)dObject{
    // get value from Preference Pane
    id values = [[NSUserDefaultsController sharedUserDefaultsController] values];
    NSString *value = [values valueForKey:@"QSPluginTutorial.someKey"];
 
    QSObject *ret = [QSObject objectWithString:
      [NSString stringWithFormat:@"%@ hello, %@",[dObject stringValue], value]];
 
    return ret;
}
@end

18. 完成 !!!

長い道のりでしたが、ついにこれで終わりです。

ビルドし、インストールして、PreferencePaneから値を入れておきます。

テキストを入力し、Actionを選択して実行します。

もういちどQuicksilverを起動すると、入力のところに結果が入っています。やったね !

おわりに

Quicksilverでプラグインをつくる方法をチュートリアルにしてまとめました。

Quicksilver Twitter Plugin (日本語) で、Quicksilverのプラグインをつくっているとき、まとまった情報がない、情報が古い、日本語の情報が見当たらない、と何かと苦労してました。 このチュートリアルでQuicksilver野良プラグインを書く人が増えればいいなあと。 (そして素晴しいプラグインが増えて僕も幸せになれればいいなぁとw)

Catalogの扱い方とかまだ調べてみたいところがたくさんあるので、情報持ってる方いればぜひご連絡ください。

参照

Vacuous Virtuoso: ほぼ唯一のQuicksilverプラグインづくりの情報源。 基本はここを以下の順に読むとよいです。

docs.blacktree.com: 本家。でもドキュメントが散逸してます…

Comments:5

keizo 07-12-15 (Sat) 17:59

凄い。いつかプログラムが書けるようになった時の参考にします。来るのかそんな日が・・・。 どんどん面白いプラグイン期待してます。お疲れさまでした。

mootoh 07-12-15 (Sat) 18:25

keizo:

ありがとうございます!

感じ通信のひとですよね。Quicksilevr使い始めた頃に、すごい参考にさせてもらいました。Shelfのあたりとか。

これからのエントリも読ませてもらいますー。

stewie 08-01-12 (Sat) 15:13

最近、自分用にSafari SIMBLプラグインを作っている初心者です。 hetimaさん経由でこちらにきました。 Mac界隈のプログラミングの新しい日本語での情報が少なくて困っていました。 こちら情報も参考にさせていただきます。

mootoh 08-01-12 (Sat) 23:26

stewie: 僕もSafari SIMBL プラグインつくってるとこです! よろしければ情報交換しませんか?

stewie 08-02-02 (Sat) 15:25

うわぁ すいません。 コメントしておきながらその後をチェックするのを忘れていました。 申し訳ありません。

>情報交換しませんか? こちらこそお願いします。 ただ、僕は相当レベルの低い初心者なので僕から提供できるような情報はない可能性が大ですが、それでもよろしければお願いします。

あと、twitterをfollowさせていただきます。

レスが遅くて申し訳ありませんでした。

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://blog.deadbeaf.org/2007/12/15/howto-write-quicksilver-plugin-ja/trackback/
Listed below are links to weblogs that reference
Quicksilverプラグインのつくりかた from mootoh.log

Home > Quicksilverプラグインのつくりかた

Feeds

Return to page top