2012年10月27日土曜日

Trema本をKindleで読む

友人のタカミヤさんが絶賛執筆中のTrema本こと「OpenFlow 実践入門」、かなり執筆が進んだようなのでKindleで読んでみる事にした。


Trema本は、執筆中の原稿データがgithub上で公開されており、ダウンロードした原稿データからPDFやepub形式の電子書籍データを自分でビルドできる。ビルドの手順も、有志がblogにアップしてくれているので簡単。Kindleはepubに対応してないので、epubからmobi形式に変換する。PDFでも読めるけど、フォントサイズが固定になってしまうのでmobi形式の方が良いでしょう。

まずは、Trema本をビルドする環境を整える。
自分はMac OSXを使ってるので、同じくMac OSXでTrema本をビルドした@q_megumi_p さんの記事を参考にした。
※Trema本の公式サイトではTexのインストールを要求しているけど、Texが無くてもepubのビルドはできるらしい。

次に、gitコマンドで原稿データをダウンロード。原稿データ一式がtrema-bookというディレクトリ配下にダウンロードされる。
takeruko@macmini:~/work$ git clone https://github.com/yasuhito/trema-book.git
Cloning into 'trema-book'...
remote: Counting objects: 2199, done.
remote: Compressing objects: 100% (940/940), done.
remote: Total 2199 (delta 1295), reused 2131 (delta 1227)
Receiving objects: 100% (2199/2199), 36.58 MiB | 481 KiB/s, done.
Resolving deltas: 100% (1295/1295), done.
takeruko@macmini:~/work$ ls
./  ../  trema-book/

trema-bookディレクトリ直下で「rake epub」を実行すれば、Trema本のepubファイルがビルドされる。
takeruko@macmini:~/work$ cd trema-book/
takeruko@macmini:~/work/trema-book$ rake epub
rm -f trema.epub
review-epubmaker trema.yaml
  adding: mimetype (stored 0%)
  adding: META-INF/container.xml (deflated 29%)

〜(中略)〜

  adding: OEBPS/whats_openflow.html (deflated 69%)
takeruko@macmini:~/work/trema-book$ ls trema.epub
trema.epub

epubをmobiに変換するには、Amazonで無料配布しているkindlegenを使えば良い。
Windows版・Mac OSX版・Linux版がそれぞれ用意されているので、Mac OSX版をダウンロードして、適当な場所に解凍する。
takeruko@macmini:~/work$ ls
./    KindleGen_Mac_i386_v2_7.zip
../    trema-book/
takeruko@macmini:~/work$ unzip KindleGen_Mac_i386_v2_7.zip -d kindlegen_2.7
Archive:  KindleGen_Mac_i386_v2_7.zip
   creating: kindlegen_2.7/docs/
   creating: kindlegen_2.7/docs/chinese/

〜(中略)〜

  inflating: kindlegen_2.7/manual.html  
takeruko@macmini:~/work$ ls
./    kindlegen_2.7/
../    trema-book/
KindleGen_Mac_i386_v2_7.zip
解凍したファイルのうちの「kindlegen」がmobi形式ファイルを作るツール。 実行権限を付けてから、引数にTrema本のepubファイルを指定して実行すれば、epubファイルと同じディレクトリにmobi形式のファイルが作成される。
akeruko@macmini:~/work$ ls kindlegen_2.7/
./
../
EULA.txt
EULA_Japanese.txt
KindleGen Legal Notices 2009-11-10 Mac.txt
docs/
kindlegen
manual.html
takeruko@macmini:~/work$ chmod +x kindlegen_2.7/kindlegen 
takeruko@macmini:~/work$ kindlegen_2.7/kindlegen trema-book/trema.epub

*********************************************************
* Amazon.com kindlegen(MAC OSX) V2.7 build 1019-d6e4792 *
* A command line e-book compiler                        *
* Copyright Amazon.com 2012                             *
*********************************************************

Info(prcgen):I1047: Added metadata dc:Title        "新ネットワーク制御技術 OpenFlow 実践入門"

〜(中略)〜

Info(prcgen):I1037: Mobi file built with WARNINGS!
takeruko@macmini:~/work$ ls trema-book/trema.mobi 
trema-book/trema.mobi
できたmobi形式のファイルをKindleのdocumentsフォルダ配下に入れれば、読むことができる。Kindleで表示すると、こんな感じ。

うーん?なんだか見た目がイマイチ。画像が小さいし、表は罫線が消えてるし。
目次(table of contents)も使えないみたいだし。
※【2012/10/27 22:29 追記】見栄えの悪さは、後述の修正方法をタカミヤさんが速攻で取り込んでくれたので、すでに直ってます。仕事が速いぜ!タカミヤさん!

でも、PDF形式はちゃんとした見た目。

Kindleかkindlegenがヘボいのかな?と思ったのだけど、念のためepubをepubリーダーのCalibreで見てみたら、Kindleと同じ見た目。どうやらビルドしたepubに問題があるみたい。

原因を調べるために、epubの中身を覗いて見る。epubの実体は、HTMLと定義ファイルをzipで固めたファイル。unzipで解凍してHTMLやCSSを見てみる。
takeruko@macmini:~/work$ unzip trema-book/trema.epub -d ./trema_epub
Archive:  trema-book/trema.epub
 extracting: ./trema_epub/mimetype   
  inflating: ./trema_epub/META-INF/container.xml  

〜(中略)〜
 
  inflating: ./trema_epub/OEBPS/whats_openflow.html 
解凍すると、こんな感じにHTMLファイルやCSSファイル、画像ファイルを見ることができる。

試しに、第1章が書かれているwhats_openflow.htmlを見てみると、CSSファイルのtrema.cssがepubに含まれてなかったり(ダウンロードした原稿データには含まれてる)、画像サイズが小さめに指定されていたり(PDF用の設定?)、epubのビルドが上手くいってないみたい。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ops="http://www.idpf.org/2007/ops" xml:lang="ja">
<head>
  <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
  <meta http-equiv="Content-Style-Type" content="text/css" />
  <link rel="stylesheet" type="text/css" href="trema.css" />
  <meta name="generator" content="ReVIEW" />
  <title>OpenFlow って何?</title>
</head>
<body>
<h1><a id="h1" />第1章 OpenFlow って何?</h1>
<div class="lead">
<p>ネットニュースをにぎわせている OpenFlow って何でしょうか?一体どんな仕組みで何がうれしいのでしょうか?本章を読むと、難しいネットワーク用語を知らなくても、身近なたとえ話ですっきりと理解できます。</p>
</div>
<div class="image">
<img src="images/whats_openflow/incredible_machine.png" alt="" width="20%" />
</div>

〜(以下略)〜
epubのビルドの設定はtrema.yamlで行う。見るとCSSファイルの指定が漏れているので、trema.yamlの設定でtrema.cssを指定する。
takeruko@macmini:~/work$ vi trema-book/trema.yaml 
# review-epubmaker向けの設定ファイルの例。
# yamlファイルをReVIEWファイルのある場所に置き、
# 「review-epubmaker yamlファイル」を実行すると、.epubファイルが
# 生成されます。
# このファイルはUTF-8エンコーディングで記述してください。

〜(中略)〜

# CSSファイル (yamlファイルおよびReVIEWファイルを置いたディレクトリにあること)
# stylesheet: book.css
stylesheet: trema.css

〜(以下略)〜

ちなみに、kindleではncxファイルで定義した目次はtable of contentsに使われないらしい。 table of contentsを使えるようにするためには、目次ページをHTMLで作成して、opfファイルのguide要素で指定するだとか何とか難しいことをする必要があるらしいんだけど、trema.yamlで以下のように指定すれば良いらしい。
# EPUB標準の目次以外に目次を作成するか
mytoc: true
あと、画像ファイルのサイズや表の罫線の見栄えを良くするためにtrema.cssを編集。
とりあえず画像サイズは70%、表はborderを指定するようにしてみた。
takeruko@macmini:~/work$ vi trema-book/trema.css
img {
    width: 70%;
    text-align: center;
}

table {
    border: solid 1px #000000;
    width: 90%;
    margin-bottom: 1em;
    border-collapse: collapse;
}

th {
    border: solid 1px #000000;
    background: #800000;
    color: #ffffff;
}

td {
    border: solid 1px #000000;
}
trema.yamlとtrema.cssを編集し終えたら、再度epubをビルドしてからmobi形式に変換。 Kindleで表示してみると、こんな感じ。
見栄えが良くなった!

table of contentsも有効になってる。

これで心置きなくKindleでTrema本を読める。
Trema本をあらためて読んでみると、コミカルな文調かつ分かりやすい説明でありながらも、要所要所にタカミヤさんのプログラマとしての美学・哲学が随所に主張されており、かなり骨太な内容。特に若い技術者はいい勉強になるので絶対に読むべき。

「OpenFlow 実践入門」の発売は2013年初旬とか。
楽しみです。

0 件のコメント:

コメントを投稿