b2eの書き方…ケース・スタディ編

0.前書き

論理編の書き方に従えばB2Eは書けるのですが、「難しい」と感じることでしょう。
ここでは、実際にb2eを書いていく手順に沿って、説明していきます。

#マニュアルが英語であることが多いため簡単な英語がわかることがある程度前提になるかもしれません。

1.load部

たとえば7zというアーカイバを見つけてきたとします。
その中には、7za.exeという、コマンドライン型のも含まれていました。
このコマンドライン型のほうは、Noahで使うことができます。
GUI型(WinAceやWinRarなど)は無理です。
コマンドライン型のexe(Ace32.exeとか、Rar.exeは扱える)を準備してください。
以下、ここでは7za.exeを例にとって説明していきます。

とりあえず扱う拡張子は7zなので、7z.b2eを書くことになります。
まず、何はともあれどんなexeを使うのかをb2eに書かなくてはなりません。
それがload:部。

load:
(name 7za.exe)
(type 7-zip 7z)

まずは一つの圧縮方式だけにしよう、と決めてこんな感じで書きます。
7zaは英語のアーカイバだし、一応usモードで実行してほしい、という気分のときは、

load:
(name 7za.exe us)
(type 7-zip 7z)

と、exe名の後にusと入れてやります。後で色々試していくうちに、入れても入れなくても変わらないようなら入れなくていいです。とりあえずここでは気分次第。

2.decode部

次は解凍。圧縮より解凍が先に来るのは、解凍だけする人のほうが多いだろうから、というのと、圧縮より解凍のほうが簡単だから、でもあります。
解凍はdecode:部を書き加えます。
ここで一度7zのほうのマニュアルを見て、解凍のコマンドは何か?ということを確認する必要があります。まあ、最近のアーカイバはまずx(エックス)にしておいて間違いないです。eよりxにしてください。eだとディレクトリ構造が無視されます。多分。
そんなわけで、

decode:
(cmd x (arc))

と、こんな感じになります。(arc)というところには、Noahが実行時に書庫の名前に置き換えます。といいますか、最近のアーカイバならこれでほぼ解凍できます。もちろん、exeがあっていれば、の話ですが。
あとは味付けに表示を詳しくしたりするオプションとかがあればつけてやってもいいでしょう。

と、ここまで書いた段階で、既に解凍だけはできるb2eが出来上がっています。
解凍だけするというのならば、下のように

load:
(name 7za.exe us)

decode:
(cmd x (arc))

四行でいいです。

3.encode部

次。圧縮について。ここでまた7zのほうのマニュアルを見て、圧縮のコマンドは何か?ということを確認する必要があります。と、ここも大体決まっていて、大概 a か c です。
Add to archive か、 Create archive。だから a か c 。
面倒なオプションのことを色々考えず、とりあえず解凍のときと同じように書きます。
今度はencodeです。

encode:
(cmd a (arc.7z) (list\*))

はい。これだけでいいです。これで何か不具合があったら (list\*) のところを (list\*.*) とかにいじってみたりします。

で、今b2eはこんな感じになっています。

load:
(name 7za.exe us)
(type 7-zip 7z)

decode:
(cmd x (arc))

encode:
(cmd a (arc.7z) (list\*))

これで圧縮も解凍もできます。

4.圧縮形式をもうひとつ

ここから、ちょっとオプションを増やした圧縮形式をもうひとつ付け加えたい、とします。
改造を加えるのは、次の部分です。

load:
(name 7za.exe us)
(type 7-zip 7z *LZMA) ←ここと

decode:
(cmd x (arc))

encode:
(if (method 1) (cmd a (arc.7z) (list\*)))
(if (method 2) (cmd a -t7z -m0=LZMA (arc.7z) (list\*)))←この二行

二行に変更を加え、一行書き加えます。

(type 7-zip 7z *LZMA)
ここに二つ目の圧縮形式の名前を書き込んでおきます。
ここではLZMAとしています。
そして、標準でこれを使いたい、すなわちNoahで7-zipを選択したときに、一番最初にLZMAが表示されるようにするために、*をつけています。
7zのほうを最初に表示したければ、
(type 7-zip *7z LZMA)
となります。

(if (method 1) (cmd a (arc.7z) (list\*)))
(if (method 2) (cmd a -t7z -m0=LZMA (arc.7z) (list\*)))
こっちのほうは、とにかく最初に(if (method〜〜というのをつける、と考えればいいです。
括弧の数に気をつけてください。ちゃんと閉じる数を合わせてください。
以下、(if (method 3) (cmd…))とかどんどん増やせます。

で、今のb2eはこんな感じに。

load:
(name 7za.exe us)
(type 7-zip 7z *LZMA)

decode:
(cmd x (arc))

encode:
(if (method 1) (cmd a (arc.7z) (list\*)))
(if (method 2) (cmd a -t7z -m0=LZMA (arc.7z) (list\*)))

あとは色々試して見ましょう。
できなかったら、論理編のほうを見て修正を加えていきましょう。

5.自己解凍書庫で圧縮できるようにしてみる

次は自己解凍書庫です。
実は自己解凍書庫を作るときの方法が、世の中には大きく分けて二種類あります。
(i)元のファイルから直接自己解凍書庫を作る形式と、
(ii)一度圧縮したのを自己解凍書庫に変換する形式です。
まあどっちでもいいです。

(i)のときは、sfxd:部を作ることに、(ii)のときはsfx:部を作ることになりますが、大きな違いはありません。

また7zを例に。7zは(i)元のファイルから直接自己解凍書庫を作る形式 です。
またマニュアルを読んで自己解凍書庫の作成を参考にして…

sfxd:
(if (method 1) (cmd a -sfx7zWin.sfx (arc.exe) (list\*)))
(if (method 2) (cmd a -t7z -m0=LZMA -sfx7zWin.sfx (arc.exe) (list\*)))

とこんな感じに。キーは (arc.exe) となっている点。
あとは圧縮のときとほぼ同じ。

6.確認作業

b2eを作るうえで一番面倒なのがこの作業。
きちんと圧縮できているかどうかを確認していきます。

よくあるのが、
・下位フォルダが無視されてしまう
・下位フォルダの同名ファイルまで圧縮されてしまう
の二点です。
これらは大体 -r オプションがらみです。-r オプションというのは、 大体再帰検索をどのように行うか、というものです。その辺を色々マニュアルを見つつ、試行錯誤してみましょう。自分が満足できるようになったらそこで完成です。