読者です 読者をやめる 読者になる 読者になる

SublimeのPackage Controlへ自作packageを登録する方法+α

さてSublime TextというとEmacserやvimmerも黙る(?)モダンな大人気エディタですが、その人気の結構な部分はPackage Controlにあるでしょう。
というのも、だいたいの紹介記事では「まずPackage Controlを入れましょう」と書いてありますし、見かけたpackageのREADMEに「まずgit cloneして、hoge.tmPreferencesをふがふがにコピーして・・・」とか書いてあると大抵は「まぁ今すぐには要らないか・・・」といってそのまま忘れてしまうことが多いです(特にWindows使用時)。

というわけで、自分で何かpackageを書いた場合、package controlからインストールできるようになるとユーザーも増えるしいろいろ捗りそうです。この記事ではpackage controlへThriftSyntaxというちっちゃなpackageを登録してみたときに調べたことを書いておきます。

Packageのつくり方

・・・については説明しないので、適当に既存の似たようなpackageを見るなり、チュートリアルを探すなりしてみてください。

Package Controlとは?

wbondさん(http://wbond.net/)が提供しているパッケージと運営しているサービスの対で、こんな感じ↓で動作します。

Package ControlがSTにインストールされると、デフォルトのchannelとしてhttps://sublime.wbond.net/channel.jsonが登録された状態になります。
Package Controlでpackgeのインストールをしようとすると一覧が表示されますが、このときにchannel.jsonを読んで全packageのメタデータを得ます。このメタデータには各packageのURLが含まれているので、Package Control(クライアント)がそれを持ってきてインストールします。

Package Control公式のchannelでは、登録するpackageの管理にgithubのリポジトリを持っていて、ここには全てのpacakgeのリポジトリへのリンクが含まれています。Package Control(サーバー)はこのリポジトリをだいたい1時間に一回ぐらい調べて、全pacakgeの各バージョンに対するメタデータを作成してpackage.jsonを更新します。

まぁ毎日80GBのjsonをserveしてる(https://sublime.wbond.net/stats)とか、そういうどえらいシステムです。package作者にとっては、2点ほど役に立つかもしれないことが分かります。

Channelは自分で作れる

クライアント側サーバー側ソースコードは公開されていますし、クライアント側でchannel追加は簡単に(Ctrl+Shift+P > Add Channel)できます。

これを使うと、組織内で(非公開の)packageのリポジトリを作ってPackage Controlから便利に使うということが比較的簡単にできると思います。

Package Control(公式)へのpackage登録方法

packageを登録してもらうには https://github.com/wbond/package_control_channel にpull requestを送るといいということが分かります。これについて以下で詳しく書きます。

Package Controlへの登録の仕方

Package Controlにもとから入っているchannelでは、packageの受け入れ用のリポジトリもあって(https://github.com/wbond/package_control_channel/tree/master/repository)、基本的には

  1. packageを作る (github or bitbucket)
  2. https://github.com/wbond/package_control_channelをforkして、自分のpackageを追記
  3. pull requestを送る
  4. mergeを待つ (なんか問題を指摘されたら修正する)

という感じになります。

一旦mergeされると、新しいバージョンをリリースするときは自分のリポジトリにtagを付ければ自動的に拾ってくれるので楽です。

より詳細な手順やpackage名に関するガイドラインなどは https://sublime.wbond.net/docs/submitting_a_package に書いてあるので、目を通しておきましょう。

今回私はThriftSyntaxというのを作ったんですが、mergeされるまでに1日もかかりませんでした。受け入れ時のチェックは既存のpackageと機能が重複していないか、jsonが壊れていないか、などを見ているようです。*1

まとめ

というわけで、わりと簡単にpackageを登録できるということと、channel自体を作るのもそこそこ簡単かもしれないので、みなさんも機会があれば是非やってみてください。

*1:とはいえ、Pull Requestを見てmergeしてるのはどこかのボランティアの人なので、身内ネタとかのpackageをどんどん送りつけるのはやめましょう。そういうことがしたい場合channelを自分で作ると良さそうです。