これは使い勝手良さそう! 2014年は電子書籍が大いに羽ばたく年になるかも知れません。デバイスは各種揃い、そのためのハードウェア的土壌は整ってきました。サービスも数多く存在し、足りないのはコンテンツです。もっと誰でも簡単に電子書籍を作れる仕組みが必要でしょう。 特にePubを作るのは面倒なイメージがあります。そこで使ってみて欲しいのがbookShop、電子書籍作成フレームワークです。 bookShopはこれ一つでHTML/PDF/ePub/Mobiファイルの作成ができます。基本はHTML5で、PDFの場合はPrinceXMLを使って生成します。

インストールと準備

インストールは簡単でRubygemsを使って行えます。

$ gem install bookshop

インストールが終わったら電子書籍プロジェクトを作成します。

$ bookshop new my_new_book

そうすると以下のようなフォルダ、ファイルが自動生成されます。

生成されたファイル

bookフォルダ以下にファイルが作成されます。Ruby系とあってファイル形式はerbとなっています。素のHTMLはもちろん、プログラマブルなコンテンツも組み込めるでしょう。

ファイルの内容

電子書籍全体はbook.html.erbによります。以下のような内容となっています。

$ cat book.html.erb 
< !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">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>Cascading Style Sheets</title>
    <link rel="stylesheet" type="text/css" href="assets/css/stylesheet.<%= @output %>.css" />
    <link rel="stylesheet" type="application/vnd.adobe-page-template+xml" href="assets/css/page-template.xpgt"/>
  </link></head>
  <body>
    < % if @output == (:pdf or :html) %>
      < %= import('frontmatter/cover.html.erb')%>
    < % end %>
    < %= import('frontmatter/title.html.erb')%>
    < % if @output == (:pdf or :html) %>
      < %= import('frontmatter/toc.html.erb')%>
    < % end %>
    < %= import('frontmatter/preface.html.erb')%>
    <!-- Chapter 01 has additional imports included inside of it -->
    < %= import('bodymatter/ch01/ch01.html.erb')%>
    <!-- Chapter 02 has additional imports included inside of it -->
    < %= import('bodymatter/ch02/ch02.html.erb')%>
    < %= import('backmatter/index.html.erb')%>
  </body>
</html>

orを使って各ファイル形式によってコンテンツを分けているのが分かるかと思います。

ファイル生成

コンテンツを記述した後はbookshopコマンドで電子書籍を生成します。例えばHTMLの場合は、

$ bookshop build html
Deleting any old builds
rm -r 
Generating new html from erb
cp -r book/assets/ builds/html/

といった感じです。HTMLファイルは次のようになります。

このように生成されます。

さらにPDFは、

$ bookshop build pdf
Deleting any old builds
rm -r 
Generating new html from erb
cp -r book/assets/ builds/pdf/
Building new pdf at builds/pdf/book.pdf from new html build
prince: Loading document...
prince: loading XML input: builds/pdf/book.html
prince: Applying style sheets...
prince: loading style sheet: builds/pdf/assets/css/stylesheet.pdf.css
prince: Preparing document...
prince: loading image: builds/pdf/assets/images/canvas.jpg
prince: loading image: builds/pdf/assets/images/html-18.png
prince: Converting document...
prince: used font: Gill Sans, Regular
prince: used font: Gill Sans, Bold
prince: used font: Gill Sans, UltraBold
prince: used font: Gill Sans, Italic
prince: used font: Courier New, Regular
prince: Resolving cross-references...
prince: loading image: builds/pdf/assets/images/html-18.png
prince: loading image: builds/pdf/assets/images/canvas.jpg
prince: Finished: success

といったコマンド。つまりbookshop build [ファイル形式]でOKという訳です。

PDF生成例。表紙があります。

同じようにePubは、

$ bookshop build epub
Deleting any old builds
rm -r 
cp -r book/epub/META-INF builds/epub/
cp -r book/epub/mimetype builds/epub/
Generating new html from erb
Generating new cover.html from erb
Generating new toc.html from erb
Generating new content.opf from erb
Generating new toc.ncx from erb
cp -r book/assets builds/epub/OEBPS/assets/
Zipping up into epub
  adding: mimetype (stored 0%)
  adding: META-INF/container.xml (deflated 32%)
  adding: OEBPS/assets/css/page-template.xpgt (deflated 78%)
  adding: OEBPS/assets/css/stylesheet.epub.css (deflated 65%)
  adding: OEBPS/assets/images/canvas.jpg (deflated 0%)
  adding: OEBPS/assets/images/cover.png (deflated 0%)
  adding: OEBPS/assets/images/draft.png (deflated 6%)
  adding: OEBPS/assets/images/html-18.png (deflated 2%)
  adding: OEBPS/book.html (deflated 59%)
  adding: OEBPS/content.opf (deflated 60%)
  adding: OEBPS/cover.html (deflated 34%)
  adding: OEBPS/toc.html (deflated 61%)
  adding: OEBPS/toc.ncx (deflated 70%)
Validating with epubcheck
Epubcheck Version 1.2

No errors or warnings detected

になります。

ePubの作成例。iBooksでもちゃんと読めます。

気になる日本語は?

この手のツールとして気になるのはやはり日本語の取り扱いです。

ePub版は大丈夫です。

PDFでも大丈夫!

という訳でbookShopは日本語コンテンツにおいてもePub/PDFファイルの生成に対応していました。これで安心して利用できそうです。


コンテンツはスタイルシートで表示の制御ができますのでDTPに比べれば表現力は落ちるものの、電子書籍としては十分な見栄えで作成できるのではないでしょうか。何よりerbを使うことでプログラマブルなコンテンツにも対応できるのが利点と言えそうです。 bookShopはRuby製、New BSD License/MIT Licenseのオープンソース・ソフトウェアです。 blueheadpublishing/bookshop BlueHead Publishing :: tools for tomorrow