Re:VIEWで技術書を書いているときにファイルを変更したら自動でビルドする

ファイルの変更を検知して、Re:VIEWのビルドを自動化したら便利だったのでブログに書いておく。

設定方法

vvakame/docker-reviewのdockerイメージを使ってビルドするスクリプト{project_root}/bin/build として作成しておきます。

#!/bin/sh

SHELL_PATH=$(cd $(dirname $0)/;pwd)
ROOT_PATH="${SHELL_PATH}/.."
IMAGE="vvakame/review:3.2"

docker run --rm -v ${ROOT_PATH}:/work -w /work ${IMAGE} /bin/sh -c "rake clean preproc pdf"

次にGemfileに以下の行を追加して、bundle install を実行する。

 source 'https://rubygems.org'
 
 gem 'rake'
 gem 'review', '3.2.0'
+
+ group :development do
+   gem 'listen', '~> 3.0'
+ end

あとはファイルの変更を検知して自動ビルドする {project_root}/bin/auto-build を作る。

#!ruby

require 'listen'

root_path = File.expand_path('..', __dir__)
patterns = [/\.re$/, /\.yml$/]

listener = Listen.to(root_path, only: patterns) do |modified, _added, _removed|
  next if modified.size.zero?

  result = system("#{__dir__}/build")
  # Macの人は以下をコメントアウトするとビルド後に通知できる
  # status = result ? 'success' : 'failed'
  # system("osascript -e 'display notification \"#{status}\" with title \"Re:VIEW build\"'")
end
listener.start
sleep

bin/auto-build を実行した後に xxx.re のファイルを変更すると自動でビルドされて、pdfが更新されます。

自動ビルドの前に原稿を書こう

現実逃避をしてる場合ではない。