Jepack SDKがリリースされたので使ってみる

Mozilla Labs » jetpack » Blog Archive » Announcing the Jetpack SDK: First Milestone Release
http://mozillalabs.com/jetpack/2010/03/09/announcing-the-jetpack-sdk/

環境は、MacOS 10.5.8、python2.5(macportsで入れたやつ、もとから入ってるのでもいいと思う)

SDKをダウンロードして解凍

 % wget https://ftp.mozilla.org/pub/mozilla.org/labs/jetpack/jetpack-sdk-0.1.tar.gz
 % tar zxvf jetpack-sdk-0.1.tar.gz
 % cd jetpack-sdk-0.1

SDKの環境をロード

 % source bin/activate

ドキュメントの説明通りにパッケージをつくってみる

 (jetpack-sdk-0.1)% mkdir packages/my-first-package
 (jetpack-sdk-0.1)% cd packages/my-first-package
 (jetpack-sdk-0.1)% vim package.json
 {
   "description": "This is my first package, it's tiny.",
   "author": "Me (http://me.org)"
 }

モジュールをつくる。モジュールはCommonJSスタイル。exportのプロパティに追加しておくと、他のファイルからrequireしたときに呼び出せる。

 (jetpack-sdk-0.1)% mkdir lib
 (jetpack-sdk-0.1)% vim lib/my-module.js
 exports.add = function add(a, b) {
   return a + b;
 }

モジュールのテストを書く

 (jetpack-sdk-0.1)% mkdir tests
 (jetpack-sdk-0.1)% vim tests/test-my-module.js
 var myModule = require('my-module')
 exports.ensureAdditionWorks = function(test) {
     test.assertEqual(myModule.add(1, 1), 2, '1 + 1 = 2')
 }

テストの実行。

 (jetpack-sdk-0.1)% cfx test -v
 info: executing 'test-my-module.ensureAdditionWorks'
 info: pass: 1 + 1 = 2

 Malloc bytes allocated (in use by application): 6436928
 Malloc bytes mapped (not necessarily committed): 14262272
 Malloc bytes committed (r/w) in default zone: 6446624
 Malloc bytes allocated (in use) in default zone: 13213696
 Tracked memory objects in testing sandbox: 2

 1 of 1 tests passed.
 OK
 Total time: 1.215288 seconds
 Program terminated successfully.

ドキュメントを書く。Markdown形式。

 (jetpack-sdk-0.1)% vim README.md
 This is my *first* package. It contains:

 * A tiny module.
 * A tiny test suite.
 * Some meager documentation.

モジュールのドキュメントを書く。

 (jetpack-sdk-0.1)% mkdir docs
 (jetpack-sdk-0.1)% vim docs/my-module.md
 # my-module documentation!!

ドキュメントを開く

 (jetpack-sdk-0.1)% cfx docs

ブラウザにSDKのドキュメントが表示される。左下のへんを見ると、自分のパッケージも追加されていて、ドキュメントも表示される。

起動部分を書く

 (jetpack-sdk-0.1)% vim lib/main.js
 exports.main = function(options, callbacks) {
     console.log("Hello World!")
     callbacks.quit()
 }

動かしてみる

 (jetpack-sdk-0.1)% cfx run
 info: Hello World!
 OK
 Total time: 0.559730 seconds
 Program terminated successfully.

モジュールを使ってみる

 var myModule = require('my-module')
 
 exports.main = function(options, callbacks) {
     console.log("Hello World!")
     console.log(myModule.add(1,2))
     callbacks.quit()
 }
 (jetpack-sdk-0.1)% cfx run
 info: Hello World!
 info: 3
 OK
 Total time: 0.562395 seconds
 Program terminated successfully.

もうちょっと書いてみる

 exports.add = function add(a, b) {
     return a + b;
 }
 exports.notify = function notify(options) {
     Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService).
     showAlertNotification(options['icon'], options['title'], options['body'])
 }

CcやCiは定義されていて使える。(セキュリティ関係で扱い方がかわるかも。)

 var myModule = require('my-module')

 exports.main = function(options, callbacks) {
     myModule.notify({title: 'Run', body: 'This is my first Jetpack SDK app.'})
     callbacks.quit()
 }

xpiにしてみる

 (jetpack-sdk-0.1)% cfx xpi
 Exporting extension to my-first-package.xpi.

my-first-package.xpiをブラウザにドロップして、再起動。通知が出てきたら、成功

雑感

けっこう良い気がする。APIがそろってくれば、もっと書きやすくなるだろうし、APIが足りない部分はCcとかCi使って、ごりごり書けばなんとかなりそうだし。やっぱりそこが、Chromeの拡張に対するアドバンテージだろうなあ。
Jetpackから入るひとにCcとかCi使え、というのは酷だけど、もとから拡張書いてるひとが、そのへんをラップしたライブラリ書けばいいと思う。

今までだって、そういうラップしたライブラリは書こうと思えば書けたし、書いてるひとももちろんいるんだけど、そのへんが共有されてない感じがあって、結局、再発明したりMDCからコピペしたりとかになっちゃってたから、CPANとかGem的なライブラリを共有する仕組みがあるとJetpackはもう一歩先に進めるんじゃないかと思う。