宮川さんPodcast ep6、KDP での本の作り方
第6回は伊藤直也さん (@naoya_ito) をゲストに迎えて、Kindle 出版、GitHub、Google Reader などについて話しました。
ほぼ週一くらいで配信されている @miyagawa さんの Podcast、第6回目のゲストで出演しました。第1回目に続き、これで自分は2回目ですね。だんだん往年のいいともみたいになっていくのだろうか。
それはともかく、内容は先日だした Kindle の 入門 Chef Solo に絡めて KDP (Kindle Direct Publishing) の話、それから Google Reader にまつわる RSS の話に関して。二人とも KDP での出版経験があるのと、RSS に関しては昔二人で本を書いたりした当時のホットな話題でお互い良く知ってるしというので、面白く話せました。
Chef 本が実際 KDP でどのくらいダウンロードされているかとか、KDP の実際のところみたいな話も交えていますのでその辺りが気になる方も是非聴いてみてください。ちなみにいっとき Kindle 総合 (技術書じゃないですよ) ランキングで 2位になりました。
KDP で本を作るにあたっては、@miyagawa さんに Plack Handbook を作ったときのやり方を教えてもらったのですが、その際いっしょにもらった変換スクリプトを公開しても構わないと Podcast 内で許可をいただいたので、Podcast へのトラフィック誘導も含め以下 KDP How To を詳解いたします。
Kindle 向け書籍ができるまで
大まかな流れとしては
- Markdown で原稿を書く
- 変換スクリプトで html として出力する
- その html を入力に calibre についてくる ebook-convert で epub に変換する
- Sigil で html 目次を追加する
- 実機で確認した後、Kindle 管理画面からアップロード
という作業になります。
Markdown で原稿を書く
原稿は Markdown で書きました。最近は技術評論社向けの雑誌原稿なんかも Markdown で書いてます (Markdown to Inao - naoyaのはてなダイアリー とか参照) が、書籍や雑誌原稿のために使う記法は見出し、リスト、コードブロックとあとちょっとくらいなので Markdown で十分に事足りる。
## #0 はじめに 近頃のクラウドの本格的普及もあってか、サーバー管理の自動化に注目が集まっています。[Chef](http://www.opscode.com/chef/) はそのツール/フレームワークのひとつです。 Chef への注目が集まっているにも関わらず Chef に関するある程度まとまった体系的な情報はまだまだ不足している、というのが現状です。また Chef は実際には同類のツールに比べてシンプルで分かりやすいのですが、公式ドキュメントがあまりにしっかりと書かれすぎていることもあって「はじめの一歩」としてどの辺りを知ればいいのか、つまり「普通に使う分にはこの程度知っていればOK」というのがどの辺りなのかを掴むのが難しい・・・というのが筆者の個人的な印象です。
Markdown のプレビューには自分は marked という OSX のアプリを使ってます。作りがミニマムで、ファイルの更新を検知してリロードしてれたり、シンタックスハイライトがあったりと使い勝手がよろしい。
marked は有料アプリですが、フリーのがいいなという人は Kobito なんかもリアルタイムプレビューの機能を持っているのでいいと思われます。
作ったファイルはもちろん git で管理して、github に push。
自分は Plack Handbook に倣い章ごとにファイルを分割して管理しました。
変換スクリプトで html として出力する
できあがった原稿は Markdown を適当な Markdown パーサーで html にする。この html を calibre に渡して epub を作ります。ここは @miyagawa さんからもらったスクリプトをほぼそのまま使いました。Markdown parser の redcarpet が必要です。
#!/usr/bin/env ruby # -*- coding: utf-8 -*- # by Tatsuhiko Miyagawa require 'redcarpet' HEADER = <<HEAD <html> <head> <title>入門Chef Solo - Infrastructure as Code</title> <meta name="Author" content="Naoya Ito"> <meta name="DC.date.publication" content="2013-03"> <meta name="DC.rights" content="2013 Naoya Ito"> <link rel="stylesheet" href="styles/epub.css" type="text/css" class="horizontal" title="Horizontal Layout" /> </head> <body> HEAD def munge(html) html.gsub /<h2>/, '<h2 class="chapter">' end markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, :autolink => true, :space_after_headers => true) STDOUT.write HEADER STDOUT.write munge(markdown.render(ARGF.readlines.join '')) STDOUT.write "</body></html>\n"
h2 タグに class="chapter"
みたいなクラスが振ってあるのは calibre 向けに html を作る場合に html のタグで適当なメタデータを指定しておくと本のタイトルや目次を自動で出力してくれるそれを利用するため。
calibre で epub に変換
calibre は ebook management ツールだそうです。変換機能だけでなく、作成したファイルの管理 や Kindle デバイスへの転送なんかもやってくれる。
が、GUI でちまちまちファイルを入力してやるのは面倒。calibre についてくる ebook-convert という CUI 向けのコマンドがあるのでこれを使って rake でビルドします。ついでなので mobi ファイルも作っちゃう。
# Rakefile task :default => "book" task book: [:mobi, :epub] file html: Dir.glob('ja/*.md') do |task| sh "bin/export_html.rb #{task.prerequisites.join(' ')} > chef-solo-book.html" end task mobi: %w[html] do sh "ebook-convert chef-solo-book.html chef-solo-book.mobi" end task epub: %w[html] do sh "ebook-convert chef-solo-book.html chef-solo-book.epub --no-default-epub-cover" end task :clean do sh "rm -f chef-solo-book.html *.epub *.mobi" end
できあがったファイルは calibre の GUI なり Dropbox なりなんなりで Kindle や iPad なんかに転送すれば普通に電子書籍として読めるのでそれで実際の見た目や改ページが正しく行われてるかなんかを確認していきます。
Sigil で HTML 目次を作る
ここまでで epub は完成なのですが、Kindle for iPhone や Kindle for iPad は calibre が作った目次をなぜか無視してしまう。iOS 向けには html で目次を作るといいとのことだったので、Sigil という epub エディタを使って目次を生成してやる。これはメニューから選ぶだけ。
本当はここも自動化したいけどいまのところ、そこまではやれていない。
あとはできあがった epub ファイルを KDP にアップロードすれば OK。ちなみに KDP にアップロードすると確認用の mobi ファイルを生成してくれるので最後の最後の確認はそれを使ってやるといいです。
KDP バッドノウハウ
そのほか細かいのがいろいろとあったので思いついたことを列挙しておきます。
- KDP で出版するとどうやら KDP 独自のスタイルが当たるようで、インデントや行間なんかの幅が変わったりする。結構読みやすい。ebook-convert で直接生成したままのではちょっと行間詰まりすぎ、みたいな印象を抱くと思うけど KDP で mobi を作ると良い感じになる前提でいればよい
- Kindle Paperwhite で動作確認していると、更新したファイルのせいで端末内での記憶位置そのほかがぶっこわれるときがある。そういうときは一端端末から書籍を削除する
- 生成した epub が valid かどうかは https://code.google.com/p/epubcheck/ この辺を使うと良いと思う。書いてて思ったけどビルドフローに組み込んでしまえばいいかも
- Podcast 内でも触れたけど、ファイルの更新を頻繁にやる前提でいる場合、KDP はそういうものではないので注意。ファイルの更新は自動ではユーザーに通知されないし、自動で更新されたりもしない。
- またファイルをアップロードして実際にそれが反映されるまでに時間がかかる。その間、iOS版は Amazon.co.jp からの転送が不可になる
- 技術書という性格もあって実際に出してみると PDF にしたいとか他の形式で読みたいという声が結構多かった。DRM フリーにしておけばその辺の再利用はユーザーに任せることができるので良いと思う。もちろん選択は著作権者の自由ではありますけど。DRM フリーかどうかは KDP のアップロード画面で選べる
- epub の中にちゃんと思った通りにファイルが含まれているかどうか、なんてのは Sigil でも確認できるし Emacs (自分のは 24) の dired で epub を開くと中身をファイラで確認できた
- Unicode 未定義な文字とかを使うと KDP で iOS 版が生成されないという事故があったりするらしい。実際のところ、ビルドがエラーになっているのか先に述べたファイル更新中で iOS 版がダウンロードできないだけなのか・・・といった事情は確認の術がない。余計なことで悩まないように、特殊な文字は必要がないなら使わないようにするのが懸命
- 表紙は指定しないと KDP が自動で生成してくれるとあったけど、自分の場合書名が長かったのか何なのか、ずっと表紙がない状態だった。「画像はありません」のまま総合2位でランキングに居座るという胸熱な結果となりました。結局 @nagayama に作ってもらいました。
- 表紙があると、「人気」とか「新着」というアイコンが書影に添付されて Amazon.co.jp の検索結果に出るようになって目も引くので、売り上げ的にもあったほうがいいと思います
以上、KDP How To でした。Chef 本へのレビューもお待ちしてます!