Hatena::Groupsubtech

#生存戦略 、それは

-> 09 { 09 / 25 }

Google Chrome 拡張のひな形作成するジェネレータ作った

16:23 | はてなブックマーク - Google Chrome 拡張のひな形作成するジェネレータ作った - #生存戦略 、それは

GoogleChrome 拡張のひな形と、パッケージ作成等を行える Rakefile を作成する、chrome-extension-starter を作った。windows/linux 環境で動作確認した。

Ruby と rubygems があれば

gem sources -a http://gems.github.com
gem install zipruby json Constellation-crxmake Constellation-jsonschema uuidtools
gem install hotchpotch-chrome-extension-starter

でインストールできる。あとは

chrome-extension-starter myextension
cd myextension

でテンプレートが作成される。構造は

|-- Rakefile
`-- src
    |-- background
    |   |-- background.html
    |   `-- background.js
    |-- lib
    |   `-- utils.js
    |-- manifest.json
    `-- toolstrips
        |-- toolstrip.html
        `-- toolstrip.js

な感じ。src ディレクトリを Load unpacked extension に指定すれば、そのまま拡張開発ができる。

f:id:secondlife:20090925162159p:image

rake package

で、crx パッケージや pem 鍵や update.xml がよしなに作成される。pem 鍵は

PEM=foo.pem rake package

と環境変数で指定もできる。通常の rake では、タスク manifest:validate が実行され、jsonschema によるバリデーションが実行される。このスキーマは os0x さんの http://gist.github.com/179669.txt の jsonschema を利用している。invalid な値が指定されると、その項目でエラーメッセージが出る。rake package 時には schema チェックは特に行っていない(invalid な値をセットすることが出てくるかも & gist が落ちてたら package 作れないのは嫌だから)。

Rakefile は特にタスクをライブラリに分離しておらず、適当に追加や削除ができるようにしている。ほんとは github のレポジトリに rake release で crx ファイルと update.xml アップロードも行いたかったけど、github s3 アップロードが難解だったのであきらめ…(net-github-uploader-perl 作った typo さんすごい)。

crx パッケージ作成には id:Constellation さん作の crxmake を、jsonschema の Ruby でのチェックにはこれまた Constellation さん作の jsonschema を利用している。またパッケージ作成の全般の流れはBig Sky :: 被はてなブックマーク数を表示するGoogle Chrome拡張書いた。が非常に参考になった。

他に自動で manifest.json を、ディレクトリやファイル構造にあわせて更新というのも作ろうと思ったけど、json に書いたコメントがパーサでパースして再びJSONにすると消えたりして嫌な感じだったのでヤメた。

ConstellationConstellation2009/09/27 01:11templateのmanifest.jsonの"permissions",
もしもすべてのページにXHRを許可するつもりで書いている場合なら,
"http://*/", "https://*/"
でなく,
"http://*/*", "https://*/*"
ですー. その意図で書いているのでなければすいません, スルーしてくださいー.

secondlifesecondlife2009/09/27 08:53ご指摘ありがとうございます。
XHR 許可したいので、その通りですね。次のバージョンで修正しますね。

トラックバック - http://subtech.g.hatena.ne.jp/secondlife/20090925