電子書籍執筆環境にCIを導入、EPUBをビルドしてDropboxに送る
最近、次の作品の執筆をしているのですが、慣れとは恐しいもので、Rakeを利用した自動ビルドですら面倒になってきてしまい、CIが欲しいと思うようになりました。
複数人のプロジェクトならいざしらず、自分一人の執筆のためにCI環境を整えるのは、どうもやり過ぎな気がしていたのですが、CircleCIが1コンテナまで無料になったとを聞き、気になっていたため、執筆の息抜きにCI環境を簡単に整えてみました。
CircleCIでEPUBをビルドする
既にRakefileを書いているため、CircleCIを利用してEPUBをビルドするのは、とても簡単でした。
test: override: - rake md2review epub
上記のようなcircle.yml
ファイルをコミットしてGitHubへpushしておき、後はCircleCIにログインして、GitHubのリポジトリを選択するだけです。
無事にビルドが通れば、Status Successになります。
ビルドしたEPUBファイルをDropboxに送る
これだけでは少し面白くありません。どうせなら、ビルドしたEPUBファイルを何かしらの方法で受け取りたいものです。そこで、方法を考えてみた結果、Dropboxにファイルを送るという方法が手軽そうだと感じたので試してみました(他にはGoogleDriveに送るというのも考えました)。
Dropboxが提供しているAPIを調べてみると、Rubyによるドキュメントがあったため、こちらを参考にして、Rakefileに組み込んでみることにしました。
まず、dropbox_sdkのGemをインストールしておく必要がありますので、Gemfileにgem "dropbox-sdk"
を追記して、bundle install しておきます。
その上で、Rakefileに次のような内容を追記しました。
require 'bundler/setup' require 'dropbox_sdk' desc 'send to dropbox' task :send_to_dropbox do client = DropboxClient.new(oauth2_access_token) now = Time.now.strftime("%Y%m%d%H%M%S") response = client.put_file("/#{bookname}_#{now}.epub", open("#{bookname}.epub")) puts "uploaded:", response.inspect end
oauth2_access_token
にはApp Consoleで作成したアプリの、Settingsタブ「OAuth 2」の項目にあるGenerated access token下のGenerateボタンを押して取得できるトークンを記入します。
そしてローカルマシンで、
$ rake md2review epub send_to_dropbox
上記のコマンドを実行すると、無事に~/Dropbox/アプリ/アプリ名
ディレクトリに、EPUBファイルが作成されることを確認できました。
そこで、circle.yml
の内容も、
test: override: - rake md2review epub send_to_dropbox
上記のように書き換えてRakefileと併せてコミットし、GitHubへpushすると、CircleCIが動作してDropboxにEPUBファイルが送られてきました。
まとめ
Re:VIEWによる電子書籍執筆環境を整えていた私にとって、CircleCIの導入は拍子抜けするほど簡単であり、またDropboxによるファイル共有もAPIが整備されているため数行のコードで実現でき、とても便利な時代になったと痛感しました。
個人で電子書籍を公開している人であれば、CircleCIが動けばそのままデプロイもできますので、非常に便利だと思います。なお、PDFを作成したい場合はTeX環境が必要なため、おそらく専用マシンを用意することになるかと思います。
これから電子書籍を執筆される方は、ぜひ参考にしてみて下さい。
追記
Fuzoku実践入門のサンプルリポジトリにCirlceCIを導入して、ついでにステータスバッジもつけてみました。
ステータスバッジについては、公式ドキュメントを参照下さい。