Firefoxの拡張機能をハックするにはatoolが便利

Firefox拡張機能(アドオン)は *.xpi と言う名前のzip形式で圧縮されたファイルになっている。で、その中にはたいてい *.jar という、これまたzip形式の圧縮ファイルが入っている。

というわけで拡張機能をハックするにはzipファイルを展開することが多くなる。でもUnix系OSではzip形式はあんまり使わないので、unzipコマンドとかよく分かんない。使いたくない。

そこで役に立つのがatoolというツールだ。こいつはいろんな圧縮ファイルの形式を自動判定して、一つのコマンドで扱えるようにしてくれる。使い方はこんな感じ。

基本的な使い方

atool -x でファイルを展開できる。

% ls
vimperator-2.0-fx.xpi

% atool -x vimperator-2.0-fx.xpi  # vimperatorのxpiファイルをatoolで ...
vimperator-2.0-fx.xpi: extracted to `vimperator-2.0-fx' (multiple files in root)

% ls  # 展開できた
vimperator-2.0-fx/  vimperator-2.0-fx.xpi

代わりに aunpack という名前で起動しても同じように展開できる。

% ls  
vimperator.jar

% aunpack vimperator.jar # jarファイルも同じコマンドで
vimperator.jar: extracted to `vimperator' (multiple files in root)

% ls  # 展開できる
vimperator/  vimperator.jar

aunpack コマンドで tar.gz, tar.bz2, zip, deb その他よく使うものはたいてい展開できて、これがメインの使い方になる。使ってみると分かるが、圧縮形式を意識しなくてもいい楽さは異常。というか tar xzf とかって、常識で考えてめんどくさいよね。

その他に出来ること

他にもこんなコマンドが使えるようになる。

atool -l または als

圧縮ファイルの中に含まれているファイルを一覧表示する。

% als vimperator-2.0-fx.xpi
  Length     Date   Time    Name
 --------    ----   ----    ----
     1452  03-29-09 07:48   AUTHORS
     1365  03-29-09 07:48   License.txt
    22217  03-29-09 07:48   NEWS
     5970  03-29-09 07:48   TODO
# 以下略 ...
atool -c または acat

ファイルを展開して標準出力に出力する。

% acat vimperator-2.0-fx.xpi TODO
Priority list:
1-9 as in Vim (9 = required for next release, 5 = would be nice, 1 = probably not)

BUGS:
- add window resize support to hints
# 以下略 ...

もちろん圧縮ファイルの形式は意識しなくてもいい。便利。

過去のバグ

実は、こうやって快適に展開できるようになったのは version 0.36.0 になってからの話。それまでは圧縮形式の判定にバグがあって、xipとかはうまく展開できなかった(参考 atoolのリリースノート)。そのバグはもう修正されたので安心して使っていい。やったね。

最後に

というわけで、アドオンをハックする人もそうでない人も atoolを使ってみるといいよ。SourceForge.JP Magazine の解説記事も参考にして試してみよう。