電書部技術班,電子書籍配信サーバーに挑む

第4回 電書用マークアップYDMLを使った原稿作成と,YDMLパーサ

この記事を読むのに必要な時間:およそ 6 分

EPUB/PDFへの変換を自前で行う

今回は,電書の原稿フォーマットとその中心になるマークアップ言語YDMLの概要,そしてそのパースについて説明します。

電書部では当初から,原稿からEPUB/PDFへの変換を自前で行う方針でした。したがって,原稿フォーマットの要件も自分たちで決めなくてはなりません。一つの原稿からPDF/EPUBの両方を自動的に生成できることの他に,何が必要でしょうか。

飲み会やSkypeチャットで検討や議論を行い,原稿フォーマット案を作り,実際に変換してみるなかで,だんだん見えてきました。そうして決まった,主な要件は次のとおりです。

  • ルールが簡単で,誰にでも書ける。
  • 技術班の助けをかりなくても,著者が見栄えを直接コントロールできる。
  • 見栄えは新書や文庫程度のレベルで十分で,雑誌のようなリッチなものは不要。

電書部の原稿フォーマット

これらの要件を満たす,原稿フォーマットの概要を説明します。

ディレクトリ構造

ディレクトリを一つ用意し,ルールに沿った名前とフォーマットのファイルをフラットに並べます。画像ファイルがあればそれも同じ場所におきます。このディレクトリが,一冊の電書に対応する原稿になります。

電書原稿の例

densho_sample/ # 任意のディレクトリ
  00_maegaki.txt  # 本文原稿
  01_genkou.txt
  02_genkou.txt
  03_atogaki.txt
  04_writers.txt
  cover.txt       # 表紙原稿
  cover.jpg       # 画像ファイル
  capture.jpg
  okuduke.txt     # 書籍情報
  toc.txt         # 目次情報

電書情報

著者・書名などの情報を,okuduke.txtというファイルに書きます。

okuduke.txtの例

<title>電書の作り方</title>
<short_name>densho_sample</short_name>
<persons>電子書籍部</persons>
<staff>
構成・テキスト:XXX
グラフィックス:XXX
写真:XXX
</staff>
<date>2010/04/30</date>
<publisher>電子書籍部(米光一成)</publisher>

short_nameは,サーバ内で電書を識別するために使われます。

本文ファイルの名前

本文になるファイルは先頭に連番をつけます。拡張子はtxtです。

ファイル名の例

00_maegaki.txt
01_genkou.txt
02_genkou.txt
03_atogaki.txt
04_writers.txt

表紙にしたいページがあれば,そのページはcover.txtと名付けます。本文や表紙の内容はプレーンテキストでもかまいませんし,後述のマークアップを含んでもかまいません。

目次情報

EPUBリーダで表示する目次は,各テキストの1行目から自動的につくります。でも,それでは困る場合もあります。そういうときは,目次情報を持つファイルtoc.txtを用意します。

toc.txtの例

00_maegaki.txt, 前書き
01_genkou.txt, この本に書かれていること
04_writers.txt, 執筆者プロフィール

一行にファイル名と対応する見出しをカンマで区切って並べます。対応する見出しがないファイルには,目次が作られません。

ファイルへのマークアップ

本文ファイルおよびcover.txtの中では,簡単なマークアップ言語を使うことができます。以下で説明します。

電書マークアップ言語「YDML」

電書マークアップの例を次に示します。

YDMLで書かれたテキスト(⁠電子書籍宣言』から引用。『マガジン航』に冒頭部分が掲載されている)

<bold>【世界初!?の電子書籍フリマ】</bold>
<center><img="01.jpg"></center>
<center>米光・小沢</center>

<bold>小沢 </bold>電子書籍フリマってのをやるんでしょ?
<bold>米光 </bold>今年(2010年)の夏と秋に。5/23に文学フリ
マで電子書籍の販売をやるので,その成果を発展させるつもり。「デジタルで
バーチャルな電書をアナログでリアルな対面販売で」ってお祭りをやろうと思
ってる。
<bold>小沢 </bold>「電子書籍フリマをやろう」というアイデ
アは,そもそもどこから?
<bold>米光 </bold>去年の10月にキンドルを手に入れてから,
これでいったいどんなことができるんだろう,何が変わるんだろう,っていう
のをずっと考えていて。

電書部技術班ではこのマークアップを「YDML(Yonemitsu Densho Markup Language)⁠と呼んでいます。

タグ一覧

YDMLのタグは<>で囲まれた文字列です。閉じタグはXMLやHTMLと同じように </ からはじまります。

YDMLのタグ一覧

タグ閉じタグ説明
<left>あり左寄せになる。
<center>ありセンタリングされる。
<right>あり左寄せになる。
<large>あり大きなフォントになる。
<small>あり小さなフォントになる。
<quote>あり引用扱いになる。
<bold>あり太字になる。
<sonomama>あり囲まれたテキスト内のYDMLタグが,そのまま表示される。
<ruby>ありルビをふる。たとえば,<ruby>蜻蛉/とんぼ</ruby>のように使う。
<bouten>あり傍点をふる。
<img>なしイメージを表示する。ファイル名は<img="1.jpg">のように指定。また,<img="1.jpg" size="80%">としたときは,リーダの表示幅に対して,指定した比率の幅でイメージを表示する。sizeを指定しない場合は,30%で表示する。
<hasen>なし破線を引く。

YDMLの考え方

YDMLはレイアウト指向で,文章の論理構造をマークアップするものではありません。そうなったのは,次のことが理由です。

レイアウトは,著者がみずから行いたい。
著者の意に反したレイアウトが自動的に決まるようにはしたくない,という考えです。かといって,cssのようなものを採用すると「誰にでも書ける」という目標から遠ざかります。
文章の要素は,すべて論理的に意味が決まるとは限らない。
「この章見出しっぽいものは,実は本文でもある」という表現だって,ありえます。

実は<quote>タグだけはレイアウト指向ではないマークアップになってしまっています。⁠字下げ」タグにすべきだったかもしれません。

著者プロフィール

小嶋智(こじまさとし)

電書部技術班EPUB係。東京都出身。ずっとプリンタやスキャナを制御するPCのソフトウェアをつくってきたが,今年になってからJavaでWebアプリをつくるのが仕事になった。よく使うGoFパターンはState。好きな飲み物はビール。twitterは@skoji

コメント

コメントの記入