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はもう一歩先に進めるんじゃないかと思う。