Markdownで書かれたブログ記事をRe:VIEWを使って「本」にしてみる
新年あけましておめでとうございます。お正月といえば書き初めですが自分は字が下手なのでブログを書くことにしました。
本記事のテーマは「ブログを本にする」です。去年の約1年間で38本もの記事を書きましたが、それらを本にしたらどういうことになるかを解説してみたいと思います。
はじめに
この記事は「Re:VIEW」を利用した同人誌作成の初心者向けの記事になります。ブログを印刷可能な本にしてみたい方、Markdownで書かれた記事を電子書籍にしてみたい方向けになります。
本作りの下準備
本を作るといってもまだ分からないことだらけなので、調べながら下準備を進めていきます。
まずは文字数を確認してみる
まずは単純に行数と文字数を数えてみたいと思います。本にする元ネタは本ブログの記事でMarkdownで書かれているのでそれらのファイルを一つのフォルダに集めて、wc
コマンドで数えます。
1 |
|
-l
は行数を表示するオプションで-m
は文字数(マルチバイトも一文字としてカウント)を表示します。結果は以下のとおりです。
1 |
|
最初この数字を見たとき目を疑いました。9000行、38万文字も書いた記憶がなかったからです。数え間違いかと思いましたが特に問題もなく・・・^1
一般的な新書では400字詰めの原稿用紙で200〜300枚と言われているらしいので8万〜12万文字程度です。つまりこの分量だと3冊も本を出版できてしまいます。しかも自分のブログは画像が多いので画像も含めるとさらに膨らむこと間違いなしです。
出版形態を決める
次に出版形態を決めます。といっても大まかに以下の4つの選択肢しかないのでお試しの今回は「同人出版」か「オンデマンド出版」になります。
- 商業出版
- 出版社を通して出版 (一般書店に流通)
- 自費出版
- 出版社を通して出版(一般書店には流通、費用は自費)
- 同人出版
- 出版社を通さず出版(一般書店には流通しない)
- 人によってはこれを「出版」とは呼ばない
- オンデマンド出版
媒体を決める
媒体を決めを簡単に言えば「紙の本」にするか、電子書籍(pdf、ePub、HTML)にするかです。一番楽なのは電子書籍Onlyですが、「紙の本はロマン」
なので今回は両方への対応を目指します。
流通経路を決める
媒体を決めた後はできた本をどのように配布するのかを考えます。販売する場合はさらにお金の回収も考える必要があります。同人誌の場合は「コミケ」等の同人誌即売会で販売するのが一般的ですが、技術書の場合は「技術書典」という選択肢もあります。自分はどちらも参加したことはありますが販売したことはありません。。。
インターネットでの販売は「BOOTH」を使うか、同人誌を扱っているショップに委託して販売するのが一般的なようです。Kindleなら「kindle direct publishing」で割と簡単に出版できるようです。もちろん販売せず自由にダウンロードしてもらってよいなら、ネットの適当な場所にアップロードするだけで済みます。
今回はとりあえずどこで頒布するかは決めていないです。とりあえず作ってみてから考えます・・・
ツールを決める
ようやくここまで決まったら、どのツールを使って制作するのかを考えます。とりあえず以下の3つの要件を満たすものです。
- お手軽
- これが一番重要
- ローカルのMarkdownファイルを変換できる
- Web上で変換はファイルが多いのでつらい
- 印刷用PDF、電子書籍用PDF、ePubの3つに対応できる
まず、MarkdownならPandocやGitBookがあるのですが、印刷用のPDFを作成するのに辛そうな印象があります。オンラインならFlightBooksやでんでんマークダウンがありますが、これはローカルファイルを変換する今回の趣旨には向いていないです。
ということで、すでにタイトルでネタバレしていますが、基本的にはRe:VIEWを使います。ただし、Re:VIEWはマークダウンの変換には対応してないのでmd2reviewを用いてMarkdownをRe:VIEW形式に変換します。
Re:VIEWとは?
メインで使うツールなので少し詳しく説明します。Re:VIEW^2は紙の本や電子書籍を作成するためのデジタル出版システムです。OSSとして開発されており主にRubyで記述されています^3。デジタル出版システムといっても基本的な動作はフォーマットを変換するソフトウェアで、オリジナルのマークアップ言語(.reファイル)とyamlの設定ファイルとスタイルファイル、画像ファイルから様々なフォーマットに変換できるようになっています。
上の図のとおりPDFだけは少し特殊でLaTeXフォーマットに変換後にPDFへ変換するようになっています。このためPDFの作成には面倒なLaTeX環境の構築が必要となります・・・もちろんDockerを使えば環境構築は避けられますがLaTexの呪いは避けられるべくもなく、後に苦しめられることになります・・・・
テンプレートを決める
ようやくツールが決まったと思いましたがまだ決めることは山程ありました・・・
以下にちょこっと書き出してみましたが、これらを全て適正に作るのは至難の技です。
- 本のサイズ
- B5が同人誌ではポピュラー。A5も使われる
- レイアウト
- 横書き
- 一行の文字数
- フォント、フォントサイズ
- 余白
- デザイン
- 表紙、裏表紙
- 章と節のデザイン
- コードの表示
- 大扉、奥付
さらに紙の印刷では以下のように細かいレイアウトの指定が必要になります。
そこでテンプレートを使うことにしました。とりあえず有名なテンプレートは以下の2つです。
結局はReVIEW-Templateを使うことにしました。決め手はRe:VIEW 4.0に対応していたことです。Re:VIEW 2.0からRe:VIEW 3.0への移行は大変そうなのでとりあえず最新の環境に追随している方を選択しました。
実際に本を作ってみる
ここまで調べたり決めたりすることが多くて疲れましたが、ようやくここからが本番です。
環境の構築
環境の構築で必要なのは主に以下の3つです。MacでLaTeX環境を維持するのは面倒だったのでDockerビルドを選択しました。RubyとNode.jsの環境はanyenvを使えば簡単に手に入るのでおすすめです。
- Ruby
- anyenv経由でrbenvを入れてインストール
- md2reviewを利用するのに必要
- Node.js
- anyenv経由でndenvを入れてインストール
- ReVIEW-Templateを利用するのに必要
- Docker
- Docker for Macでインストール
変換の流れ
変換の流れは以下のとおりです。本ブログはHexoを用いて構築しており、Markdownを拡張してHexoのマクロを利用しているのとHexo独自のYaml Front Matterを取り除いて一般的なMarkdownに自力で変換する必要がありました。それ以外はそれほど難しくないはず・・・とおもっていましたがいろいろとハマリました(泣)。
- マークダウンからHexoのマクロを取り除く(自前Rubyスクリプト)
- Hexoのマクロは{% マクロ名 引数... %}のような形をしている
- md2reviewでマークダウンをRe:VIEW形式に変換(.md → .re)
- Re:VIEW形式をPDFに変換
- config.ymlに基本設定を書く。catalog.ymlに章構成を書く。
- あとは
./build-in-docker.sh
を実行してpdfファイルを出力させるだけ- Re:VIEW内部では一旦LaTeXに変換されてPDFとして出力される
変換で嵌った点
とりあえずいろいろ嵌った点をメモっておきます。TeXコワイ・・
- 取り消し線が引けない
- ソース上何も問題ないはずなのに,Text line contains an invalid character. ^^H や Package inputenc Error: Keyboard character used is undefined (inputenc) in inputencoding utf8 というエラーが出てコンパイルできない
- TeXShop FAQ - TeX Wiki
- Macの日本語変換のバグだと・・・ まじかよ・・・日本語入力中に制御コードが入力されてしまうことがあるとか罠でしかない・・・
- この問題は2019/2/15から2019/9/11までの記事で合計15回観測されています。最近の記事では起こっていないのでもしかしたら修正されたのかもしれません・・・
- エラーでLaTeXの行数が出力された・・・
- config.ymlでdebugをtrueにすると出力されたLaTeXが削除されない
- 記法が入れ子になるところで所々エラーになる
- 例えば太字のなかでURL参照とか
- どちらかを諦める
- 出力場所(article)配下のpdfやhtmlファイルは次回実行時に問答無用で消される
- 必要なpdfやhtmlファイルはarticleディレクトリから退避させましょう
印刷用原稿の完成
以下が印刷用の原稿の見開きの様子です。上下左右や角に付いているラインは「トンボ」と呼ばれていて裁断ラインを表しています^2。内側にある小さい数字は「ノンブル」といって印刷する全てのページに必要な通し番号です。これは印刷所が乱丁・落丁の確認に用いるもので必ず裁断ラインの内側に印刷する必要があります^3。印刷原稿にはこのトンボとノンブルが必要で、更に言えば偶数ページにする必要があったりフォントをPDFに埋め込まなければいけない等、様々な制約があります。
表紙、裏表紙の作成
印刷用原稿はできましたが、表紙と裏表紙は原稿とは別に作成します。一般的には表紙と原稿は紙質やカラー/モノクロかの違いがあるのでファイルとしても別になります。
今回は表紙と裏表紙の作成にはMac標準のKeynoteを使いました。といっても適当にiPhoneで撮った写真を加工しただけです。
注意すべきはサイズと解像度です。表紙は全面になるので本のサイズより少し大きい実寸で作成します。今回はB5なので595.28 x 841.89ポイントになります。ちなみに1ポイント0.3528mmなので覚えておくと便利です。KeynoteはそのままPDF出力ができるので最初にスライドの大きさをポイントで指定してPDFで出力するだけでOKです。
また印刷時のフルカラーの推奨解像度は350dpiぐらいです。推奨解像度は印刷所によって多少の差異はありますが、基本的に推奨解像度以上で入稿しても原稿が重くなるだけで印刷品質は変わらず、推奨解像度以下だと粗く印刷されます。350dpiのときのB5サイズのピクセル数は2591×3624になるのでまずはそれを基準に画像を作成します。今回のようにiPhoneのカメラで撮った写真を使う場合には4032 x 3024なのでエクスポートするときに少しサイズ減らす調整をしてください。電子書籍用はそこまでの画質を要求されないので印刷用の表紙からさらにサイズを落として利用します。
そして以下が完成した表紙と裏表紙です。表紙ができるだけで一気にテンションがあがるので、原稿に詰まったら表紙の作成をすることをおすすめします(笑)。
完成(仮)
なんとか画像や埋め込まれたオブジェクトを抜きにして完成(仮)しました。以下は電子書籍用に出力したPDFファイルです。2章まで公開しました。
目次をご覧頂ければ分かりますが300ページを超えています。画像抜きでこのページ数だと紙の本にはしづらいですね。とりあえず分冊を考えます・・・
まとめ
意外と簡単・・・とはいかなかったですが、すでに先人がいろいろ切り開いてくれていたので挫けずに念願の「自分の本」を作成することができました。正直言って一人で一冊の本を書くのは漠然と難しいと思っていましたが、蓋を開けてみれば1年間で300ページを超える長編小説並みの文章を生産していました。また目次を見ても意外と読み応えのある本になっていそうだったのでこれも驚きでした。
そして実際に本としても読んで見ましたが、エッセイっぽくて意外といけるなと思いました。確かに章ごとの繋がりはありませんが、章単位である記事がしっかりしていれば本としてもそれほど違和感なく読めました。少なくとも一般的な同人誌では章ごとに執筆者が違うことも多々あるのでそれと同じ感覚です。
最初はブログを繋げただけだと本にはならないだろうとなんとなくイメージをしていましたが、特に編集をしなくても記事単体がしっかりしていれば本としても読めるレベルになるというのが今回分かったことです。まぁよくよく考えれば一人で雑誌を書いたようなものなので一応「本」にはなりましたが、「ストーリーのある本」への道のりはまだまだです。
本とブログの違いで気になった点を一つ上げるとすれば、リンクやブログカードの扱いです。電子書籍はそのままリンクが機能しますが紙ではリンク先に飛べないので別途表示方法を考える必要があると感じました。あと画像やオブジェクト(地図や動画やスライド)の埋め込みは今回できなかったのでそれをどのように扱うかは今後の課題です。
最後にフォーマットの観点から言うとMarkdownから書籍を執筆するための環境は発展途上だと感じました。もともとのMarkdownの記述が弱いというのとHTMLの埋め込みができるというのがいろいろと問題を起こして汎用的なアプローチが難しいのかもしれません。それとMarkdownとは関係ありませんが、PDF化するためにはLaTeXを経由するのは胃が痛くなりそうです。CSS組版がもう少し成熟すればこの辺が解消されるのではないかと個人的には期待しております。
「本」だけではなくて本記事も長くなって来たので、とりあえず書き初めはここまでにして次回は(仮)を外して少なくとも自分が満足のいく本を出版できるように精進したいと思います。
本記事がブログで「本」を作成してみたい方の一助となれば幸いです。