静的サイトジェネレータを比較してみた


静的サイトジェネレータを使ってサイトを作ってみたかったけど、StaticGenを見ても違いがイマイチわからなかったので、自分の気になる点で比較してみました。

比較したプロダクト

  1. Middleman
  2. Hugo
  3. Metalsmith
  4. Pelican

上記の4プロダクトを比較しました。
StaticGenで人気がありそうなものを中心に選定しましたが、自分が作りたいサイトはブログではない普通のサイトなので、ブログ作成に特化1していると書いているものは外しました(Jeykll, Octopress, Hexo等)。

なお、比較はすべてドキュメントやサンプルプログラムから読み取れる内容で行ったので、実際の挙動が違っていたらごめんなさい。

基本項目

プロダクト名 開発言語 コンテンツ
Middleman Ruby (Sinatra) ERb or HAML
Hugo Golang Markdown
Metalsmith Node.js Markdown
Pelican Python Markdown

コンテンツは、実際にコンテンツを書くために使う言語です。
Middlemanはブログプラグイン2をインストールすると、ブログ記事だけはMarkdownで書ける機能があるようです。ひょっとしたら、これを工夫すれば普通のページもMarkdownで書けるのかもしれません。

デザイン

プロダクト名 テンプレート カタログ
Middleman ERb or HAML 公式サイト
(画像なし)
Hugo Go言語標準 公式サイト
Metalsmith Handlebars なし
Pelican Jinja github
(画像なし)

テンプレートは、レイアウト等を作るためのテンプレートエンジンです。
Metalsmithは、テンプレートエンジンもプラグインとなっているため、様々なテンプレートエンジンを使うことが可能です。公式サイトのサンプルコードではHandlebarsが利用されています。

カタログとは、すぐに使えるテンプレートの一覧が提供されているかどうかを表しています。
「画像なし」と書いたものは、カタログはあるもののスクリーンショットがないため、自分で実際に入れてみないと雰囲気がわからない残念なものです。

プラグイン

プロダクト名 プラグイン管理 カタログ
Middleman gem 公式サイト
Hugo なし なし
Metalsmith 設定ファイル
(json)
公式サイト
Pelican 設定ファイル
(python)
github

プラグイン管理は、プラグインのインストール方法を表しています。
Hugoにはそもそもプラグインの仕組みがないように見えました。ただ、標準で多機能なので、機能的に貧弱な印象は受けていません。

カタログとは、すぐに使えるプラグインの一覧が提供されているかどうかを表しています。
とは言え、いずれも詳しい説明を書いてくれているわけではないので、結局はひとつずつREADMEを読む必要がありそうです。

ドキュメント

プロダクト名 充実度 日本語対応
Middleman
Hugo ×
Metalsmith × ×
Pelican ×

充実度は、公式サイトのドキュメントの量と質を主観で3段階評価しました。
Metalsmithはほとんどの機能をプラグインで提供している事もあり、本体にドキュメントらしいドキュメントはありませんでした。READMEと、代わりに提供されているサンプルプログラムから読み解く必要がありそうです。

他はいずれもひと通り読めば分かるドキュメントがあり、読みやすさも同程度ですが、Hugoはサンプルコードや動画が充実していたため、他より1段階良いとしました。

その他所感

  • Middleman
    • あくまでSinatraでサイトを簡単に作る仕組み、というイメージです。
      • 他のプロダクトに比べると、静的サイトジェネレータとしての完成度はあまり高くないような。
    • SinatraやRailsを書ける人は、要素技術的にすんなり入りやすいと思います。
  • Hugo
    • プラグインがない分、本体機能の充実度は一番。
      • その分、他より覚えなくてはいけない事が多い気がしました。
      • 作成するソースコードのディレクトリ構造も他プロダクトより複雑。
  • Metalsmith
    • 使い方を見ての通り、必要な機能をプラグインでチェインしていく形。
      • 手はかかる分、一番拡張性が高いようです。
    • 作成するソースコードのディレクトリ構造がとてもシンプルです。
  • Pelican
    • デプロイにFabricを使う等、Pythonに慣れてる人には入りやすいはず。
    • 実はブログ的な使い方がメインらしく、ちょっと趣旨と合わないかもしれません。3

  1. Blogging frameworkや、blog-aware。 

  2. middleman-blog 

  3. ブログ以外の普通のページを作る機能もあったので比較対象に入れましたが、若干おまけっぽい扱われ方でした。