
さてmiddlemanでbuildした記事は、どこかにdeployしないと公開されません。github pagesでもいいですし、herokuでも、Amazon S3でもいいでしょう。
ただ、僕はさくらのVPS上でh2oを動かしているので、それにそったdeployをする必要があります。
どのような方法でdeployするにしても、middleman-contrib/middleman-deployを使うことになると思います。これは便利です。
rsyncを用いてdeployしようと思い、このような設定をconfig.rbに書きました。
activate :deploy do |deploy|
  deploy.method       = :rsync
  deploy.host         = "blog.unasuke.com"
  deploy.path         = "/var/www"
  deploy.user         = ENV["MIDDLEMAN_USER"]
  deploy.port         = ENV["MIDDLEMAN_PORT"]
  deploy.flags        = '-rltgoDvzO --no-p --del'
  deploy.build_before = true
end
deploy.userとdeploy.portが環境変数になっているのは、一応このblogのリポジトリは公開になっていて、この設定も誰でも見られるようになっている状態で、sshが繋がるポートを明記するのが危険だからです。
この状態で、
$ bundle exec middleman deploy
を実行すると、buildされ、deployされます。
さて、これをいちいち手でやるのは面倒です。なので、CIサービスを使って自動化してやります。今回はCircleCIを選びました。理由は使い慣れているからです。
とはいっても、masterにmergeされたら自動でdeployくらいの設定なら、こんなにも書かなくてよく、多分、ただdeploymentの項目だけ書けばいいと思います。
machine:
  timezone: Asia/Tokyo
  ruby:
    version: 2.2.3
dependencies:
  pre:
    - gem install bundler -v 1.10.6
  override:
    - bundle install --jobs=4
test:
  override:
    - bundle exec middleman build
deployment:
  publish:
    branch: master
    commands:
      - bundle exec middleman deploy
ただ、よくわからないのは、この場合testとして何を実行すればいいのか、ということです。今はbundle exec middleman buildが成功することをテストのpassと見なしていますが、Circle CIではこの前段階にcompileとしてmiddleman buildが行われてしまうので、2重にmiddleman buildが走ってしまい、時間の無駄です。(さらに、deploy.build_before = trueなので、計3回のbuildが走り時間の無駄)