PAST ARTICLE · Apple
O'Reilly の iPhone アプリから EPUB を抜いて iPad で読む

iPad を買おうか迷っていて、drikin.tv さんのところで iPad のレビューをされているのを観て買うことにした。Retina ディスプレイになって見開きでも本が読めると仰っていたのが決定的だった。早速、3月20日に Apple のオンラインストアで注文して、3月29日に手に入った。
もう一つの理由は、O'Reilly から iPhone / iPod touch 向けに電子書籍アプリがたくさん出ていて、価格が数百円と安いから!ただ、iPhone / iPod touch 向けなので EPUB だけ抜き出す必要がある。

早速、Version Control with Git を購入して試してみた。iTunes で購入すると下記ディレクトリに保存される。
$ ls ~/Music/iTunes/iTunes\ Media/Mobile\ Applications/ | grep 'Git'
VCwGit 1.0.ipaEPUB を作る主な流れは、
※OS X Lion の zip コマンドだと cpgz 形式になるので、ditto コマンドで zip 形式にしています。
*.ipaは、zip 形式で圧縮されているので解凍する。- iBooks の辞書で日本語が使えるように言語を変更する。
- EPUB を作る。
- iTunes に登録する。
まとめると、下記のスクリプトになる。
$ less ipa2epub.sh
#!/bin/sh
TMP=/tmp/
SRC=$1
PAYLOAD=${TMP}Payload/
MIMETYPE=mimetype
METAINF=META-INF/
OEBPS=OEBPS/
CONTENT="${OEBPS}"content.opf
ITUNES=/Applications/iTunes.app
BOOKS="${HOME}"/Music/iTunes/iTunes\ Media/
checkFileOrDirectory()
{
if [ ! -e "$1" ];
then
echo "$1" ': No such file or directory'
deleteFileOrDirectory "$2"
exit
fi
}
deleteFileOrDirectory()
{
if [ -f "$1" -o -d "$1" ];
then
rm -rf "$1"
fi
}
checkFileOrDirectory "$SRC"
DST=`basename "${SRC}" | sed -e "s/ipa$/epub/"`
unzip -oq "${SRC}" -d "${TMP}"
checkFileOrDirectory "${PAYLOAD}"
BOOK="${PAYLOAD}"`ls "${PAYLOAD}"`/book/
checkFileOrDirectory "${BOOK}" "${PAYLOAD}"
cd "${BOOK}"
cp "${CONTENT}" "${CONTENT}".tmp
sed -e "s/\(<\(dc\):\(language\)[^>]*>\)[^<]*\(<\/\2:\3>\)/\1ja\4/" "${CONTENT}".tmp > "${CONTENT}"
deleteFileOrDirectory "${CONTENT}".tmp
ditto -ck "${BOOK}" "${BOOKS}""${DST}"
checkFileOrDirectory "${BOOKS}""${DST}" "${PAYLOAD}"
open -a "${ITUNES}" "${BOOKS}""${DST}"
cd
deleteFileOrDirectory "${PAYLOAD}"
exitEPUB 生成のときは、*.ipa のパスを渡してあげれば自動でおkです。
$ chmod 755 ipa2epub.sh
$ ./ipa2epub.sh Music/iTunes/iTunes\ Media/Mobile\ Applications/VCwGit\ 1.0.ipaiTunes で iPad と同期すると、iPad の iBooks に表示されます。

辞書も引けるので、わからない単語はハイライトを付けて後で見直すことも可能です。

iBooks だとフォントのサイズがあまり小さくできないので残念・・・次はi文庫HDで観れるようにしてみようかと思います。
【追記5/12】github にソース追加しましたので、必要な方はどうぞ〜