JekyllからMiddlemanへ

何かで見掛けたMiddlemanが少しばかり気になっていたので、ちょろちょろっといじってみてたのだけど、この手のものはそれなりにちゃんと使わないと分からないよなーと思い、自分のサイトで移行してみることにした。

Typo→Octopressのときは、Octopressがテンプレートをがっつり持っていたこともあり、記事の移行以外で自分でどうにかするのはマクロなどをどうにかすることくらいだった。Octopress→Jekyllのときにはテンプレートがなかったが、OctopressがJekyllをベースにしていたこともあり、Octopressのものをベースに調整することでなんとかなった。

Jekyll→Middelmanの移行ではその点ちょっと困った。Middlemanもテンプレートを提供する仕組みがあるのだが、わりと大枠というか、テンプレートっていうより雛型っていう感じだった。

$ bundle exec middleman init --help
Usage:
  middleman init NAME [options]

Options:
  -T, [--template=TEMPLATE]                  # Use a project template: default, html5, mobile, smacss, empty, blog
                                             # Default: default
[...]

このようにblog機能向けのテンプレートというのもあるのだけど、機能(blog)とデザイン(html5、smacssなど)が同じ仕組みの中で提供されるのも少し戸惑った。ただ、この辺は割り切りなのかもしれない。

で、まあ、テンプレートをなんかしなければならないのだけど、Jekyllとは考え方が違うものでトライ&エラーを繰り返した。というのも、チュートリアル的なドキュメントはしっかりそろっているのだが、リファレンスとなると急にAPIドキュメントになってしまうため。一ユーザとして使おうとしたときに、あれこれやってみるほかないこともあった。(結局、コード読んだりもしたんだけど。)

Jekyllと比べると、SprocketsやTiltなどwebまわりでよく使われるソフトウェアを最初から使っていることで、ある面でのやりやすさを感じた。特にTiltはテンプレート処理の流れをスッキリさせていて、JekyllにあるLiquid中心のもどかしがない。いっしょに使うgem(たとえばsitemap生成)も全体的こなれたものが多い印象で、使いやすかったり機能がそろっていたりと便利である。

そんなようなわけで、移行という事情があったためにそれなりにめんどうではなあったけども、ものとしてはなかなか扱いやすいのではないかと思う。

JekyllがLiquidべったりで拡張を書く気がだんだんなくなったりもしていたこともあり、また、そうしたちまちましたコードを書きにくいためにサイトそのものの運営がおっくうになってもいたので、ちょっとお試しのつもりで始めた部分もあったのだが、割によい機会となったように思う。

最後に参考までにGemfileとgemのリストを載せておく。基本的にチュートリアルにあるものの中から選択しただけなのもの。Middlemanがどんなものかっていうのは、おそらくこのリストを見てもらうとてっとり早いと思う。

source 'https://rubygems.org'
gem "middleman", "~>3.3.7"
gem "middleman-livereload", "~> 3.1.0"
gem "wdm", "~> 0.1.0", :platforms => [:mswin, :mingw]
gem "tzinfo-data", platforms: [:mswin, :mingw]
# ここ(↑)までmiddleman initによるgem
# ここ(↓)から追加したgem
gem 'bootstrap-sass', require: false
gem 'middleman-disqus'
gem 'middleman-google-analytics'
gem 'middleman-blog'
gem 'builder'
gem 'middleman-pry'
gem 'redcarpet'
gem 'middleman-search_engine_sitemap'
gem 'therubyracer'
gem 'middleman-minify-html'
  • activesupport (4.1.8)
  • addressable (2.3.6)
  • bootstrap-sass (3.3.1.0)
  • builder (3.2.2)
  • bundler (1.7.7)
  • celluloid (0.16.0)
  • chunky_png (1.3.3)
  • coderay (1.1.0)
  • coffee-script (2.3.0)
  • coffee-script-source (1.8.0)
  • compass (1.0.1)
  • compass-core (1.0.1)
  • compass-import-once (1.0.5)
  • em-websocket (0.5.1)
  • erubis (2.7.0)
  • eventmachine (1.0.3)
  • execjs (2.2.2)
  • ffi (1.9.6)
  • haml (4.0.6)
  • hike (1.2.3)
  • hitimes (1.2.2)
  • hooks (0.4.0)
  • htmlcompressor (0.1.2)
  • http_parser.rb (0.6.0)
  • i18n (0.6.11)
  • json (1.8.1)
  • kramdown (1.5.0)
  • libv8 (3.16.14.7)
  • listen (2.8.4)
  • method_source (0.8.2)
  • middleman (3.3.7)
  • middleman-blog (3.5.3)
  • middleman-core (3.3.7)
  • middleman-disqus (1.0.0)
  • middleman-google-analytics (1.0.2)
  • middleman-livereload (3.1.1)
  • middleman-minify-html (3.4.0)
  • middleman-pry (0.0.4)
  • middleman-search_engine_sitemap (1.3.0)
  • middleman-sprockets (3.4.1)
  • minitest (5.5.0)
  • multi_json (1.10.1)
  • padrino-helpers (0.12.4)
  • padrino-support (0.12.4)
  • pry (0.10.1)
  • rack (1.6.0)
  • rack-livereload (0.3.15)
  • rack-test (0.6.2)
  • rb-fsevent (0.9.4)
  • rb-inotify (0.9.5)
  • redcarpet (3.2.2)
  • ref (1.0.5)
  • sass (3.4.9)
  • slop (3.6.0)
  • sprockets (2.12.3)
  • sprockets-helpers (1.1.0)
  • sprockets-sass (1.3.0)
  • therubyracer (0.12.1)
  • thor (0.19.1)
  • thread_safe (0.3.4)
  • tilt (1.4.1)
  • timers (4.0.1)
  • tzinfo (1.2.2)
  • uber (0.0.11)
  • uglifier (2.6.0)