読者です 読者をやめる 読者になる 読者になる

Fuzoku実践入門ブログ

Amazon で好評発売中の『Fuzoku実践入門』に関するエピソードなどを紹介するブログです。

Rakeを利用した電子書籍ビルドの自動化

環境

はじめての電子書籍執筆を支えたソフトウェアで紹介した通り、 Re:VIEWkindlegenmd2reviewを導入することで、Markdownで執筆を行ないながら、コマンドを実行するだけで、MarkdownファイルからEPUB, PDF, MOBI(以下、これらを総称して電子書籍ファイルと呼びます)を生成することが可能となりました。

ゲラの執筆段階では、たまに電子書籍ファイルを生成するだけですが、校正段階に入ると、表示確認のために頻繁に電子書籍ファイルを生成するようになりました。

MarkdownファイルからEPUB, MOBI, PDFを生成するために必要なコマンドは次のようになります。

$ md2review d2review chapter1.md > ./chapter1.re # .md を .re に変換
$ review-epubmaker config.yml                    # EPUB作成
$ kindlegen book.epub                            # MOBI作成
$ review-pdfmaker config.yml                     # PDF作成

これらを随時実行するのは、なかなか手間です。そこで、RubyのビルドツールであるRakeを利用するのが鉄板のようです。

好みがあるため、Rakefileの書き方は人それぞれあるのですが、ここでは、私が実際に利用したRakefileを紹介します。

Fuzoku実践入門で利用したRakefile

執筆と平行して必要に応じて改良をほどこしていたのですが、現時点での最終形は以下になっています。

なお、Re:VIEWやmd2reviewなどのGemはbundle installを使ってインストールしているため、それぞれのコマンド実行にはbundle execが付いています。

require 'rake'

desc 'create all books (.epub, .pdf, .mobi)'
task all: [:epub, :pdf, :mobi]

desc 'create .epub'
task :epub do
  sh 'bundle exec review-epubmaker config.yml'
end

desc 'create .pdf'
task :pdf do
  sh 'rm -rf *pdf'
  sh 'bundle exec review-pdfmaker config.yml'
end

desc 'create .mobi'
task :mobi do
  sh 'rm -f *.mobi'
  sh 'kindlegen learning-fuzoku-sample.epub || true'
end

desc 'send to kindle'
task :send_to_kindle do
  sh 'bundle exec kindlemail -f learning-fuzoku-sample.mobi'
end

desc 'convert ./src/*.md to ./*.re'
task :md2review do
  Dir.glob('./src/*.md') do |md|
    re = File.basename(md).sub(/\.md$/, '.re')
    sh "bundle exec md2review #{md} > ./#{re}"
  end
end

desc 'clean working files'
task :clean do
  sh 'rm -rf learning-fuzoku-sample-*'
  sh 'rm -f *.epub'
  sh 'rm -f *.pdf'
  sh 'rm -f *.mobi'
end

task default: :all

rake -T で表示されるタスクは次の通りです。

rake all             # create all books (.epub, .pdf, .mobi)
rake clean           # clean working files
rake epub            # create .epub
rake md2review       # convert ./src/*.md to ./*.re
rake mobi            # create .mobi
rake pdf             # create .pdf
rake send_to_kindle  # send to kindle

タスクの説明

それでは、これらのタスクの説明をしていきます。

MarkdownをRe:VEIW形式に変換する:rake md2review

ゲラを執筆するMarkdownファイルは、./src/chapter1.md のような形で、srcディレクトリ以下に保存しています。

rake md2reviewは、srcディレクトリの中にある .md ファイルを全て .re に変換して、トップディレクトリに配置してくれます。

電子書籍ファイルを作成する:rake epub, rake mobi, rake pdf, そして rake all

rake epub, rake mobi, rake pdfは、それぞれEPUB, MOBI, PDFを生成するコマンドを実行してくれます。

MOBI は EPUBから変換しているため、EPUBファイルがなければエラーになります。そこで、もしEPUBがない状態でMOBIを作成したい場合は、rake epub mobiと実行します。

rake allは、EPUB, MOBI, PDFの電子書籍ファイルを一気に生成してくれるコマンドです。処理速度が気にならない場合は、これを実行するのが一番楽で、私はこれを多用していました。

作業ファイルを削除する:rake clean

電子書籍ファイルを生成すると、次のようなファイルやディレクトリが作成されます。

  • /book-yyyymmdd-foo-bar
  • /book-epub
  • /book-pdf
  • book.epub
  • book.pdf
  • book.mobi

これらを自動的に削除してくれるのがrake cleanです。

Kindle へ送信する:rake send_to_kindle

kidlemailを使ってコマンドラインからKindleへファイルを送るで紹介した機能をRakeから実行できるようにしています。

これにより、EPUBを作成してKindleへ送るという作業が、rake epub send_to_kindleというコマンドだけで自動的に完了できます。

まとめ

というわけで、本記事では、私が実際に執筆で利用したRakefileを紹介してみました。

この記事で紹介したRakefile及び、該当するリポジトリは、GitHubで公開していますので、興味がある方はご欄下さい。

なお、EPUBを生成と同時に開きたい場合、MacであればopenコマンドにEPUBファイル指定してあげると開くことができるので、私はまれに次のようなコマンドも使っていました。

$ rake epub && open learning-fuzoku-sample.epub

頻繁に利用する方は、こちらもrakeコマンド化しておくのも良いかもしれません。