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


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

## 比較したプロダクト

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

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

[^1]: Blogging frameworkや、blog-aware。

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

## 基本項目

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

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

[^2]: middleman-blog

## デザイン
| プロダクト名 | テンプレート | カタログ |
|:---------|:-------|:---------------|
| Middleman| ERb or HAML | [公式サイト](https://directory.middlemanapp.com/#/templates/all/)内<br>(画像なし) |
| Hugo     | Go言語標準 | [公式サイト](http://gohugo.io/showcase/)内 |
| Metalsmith| [Handlebars](http://handlebarsjs.com/) 他 | なし |
| Pelican     | [Jinja](http://jinja.pocoo.org/) | [github](https://github.com/getpelican/pelican-themes)<br>(画像なし) |

**テンプレート**は、レイアウト等を作るためのテンプレートエンジンです。
Metalsmithは、テンプレートエンジンもプラグインとなっているため、様々なテンプレートエンジンを使うことが可能です。[公式サイトのサンプルコード](http://www.metalsmith.io/#everything-is-a-plugin)ではHandlebarsが利用されています。

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

## プラグイン
| プロダクト名 | プラグイン管理 | カタログ |
|:---------|:-------|:---------------|
| Middleman| gem | [公式サイト](https://directory.middlemanapp.com/#/extensions/all/)内 |
| Hugo     | なし | なし |
| Metalsmith| 設定ファイル<br>(json) | [公式サイト](http://www.metalsmith.io/#the-plugins)内 | 
| Pelican     | 設定ファイル<br>(python) | [github](https://github.com/getpelican/pelican-plugins) |


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

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

## ドキュメント

| プロダクト名 | 充実度 | 日本語対応 |
|:---------|:-------|:---------------|
| Middleman| △ | ◯ |
| Hugo     | ◯ | × |
| Metalsmith| × | × |
| Pelican     | △ | × |

**充実度**は、公式サイトのドキュメントの量と質を主観で3段階評価しました。
Metalsmithはほとんどの機能をプラグインで提供している事もあり、本体にドキュメントらしいドキュメントはありませんでした。[README](https://github.com/segmentio/metalsmith/blob/master/Readme.md)と、代わりに提供されている[サンプルプログラム](https://github.com/segmentio/metalsmith/tree/master/examples)から読み解く必要がありそうです。

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

## その他所感
- Middleman
    - あくまでSinatraでサイトを簡単に作る仕組み、というイメージです。
        - 他のプロダクトに比べると、静的サイトジェネレータとしての完成度はあまり高くないような。
    - SinatraやRailsを書ける人は、要素技術的にすんなり入りやすいと思います。
- Hugo
    - プラグインがない分、本体機能の充実度は一番。
        - その分、他より覚えなくてはいけない事が多い気がしました。
        - 作成するソースコードの[ディレクトリ構造](http://gohugo.io/overview/source-directory/)も他プロダクトより複雑。
- Metalsmith
    - [使い方](http://www.metalsmith.io/#everything-is-a-plugin)を見ての通り、必要な機能をプラグインでチェインしていく形。
        - 手はかかる分、一番拡張性が高いようです。
    - 作成するソースコードの[ディレクトリ構造](https://github.com/segmentio/metalsmith/tree/master/examples/static-site)がとてもシンプルです。
- Pelican
    - デプロイにFabricを使う等、Pythonに慣れてる人には入りやすいはず。
    - 実はブログ的な使い方がメインらしく、ちょっと趣旨と合わないかもしれません。[^3]

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