SSGとperlさえあればウェブサイトなどサクッと作れてしまうんじゃないのか？ (perl side)

この記事は、[Perl Advent Calendar 2020](https://qiita.com/advent-calendar/2020/perl) 17日目の記事です。
同時に、[Static Site Generator Advent Calendar 2020](https://qiita.com/advent-calendar/2020/static-site-generator)の[17日目の記事](https://qiita.com/doikoji/private/d5a4a0ab1af7afed8b2d)の姉妹版でもあります。両記事の内容に一部重複があることをご了承ください。

# はじめに

2020年現在、ブログを公開して情報発信というとwordpressなどを使ったウェブコンテンツの動的な生成が主流のようです。しかし、これとは一線を画した静的コンテンツの構築というスタイルも健在です。ユーザに見せるべきHTMLデータをあらかじめ全て作り置いておくわけです。このために利用されるソフトが「静的サイトジェネレーター」です。

## perlと静的サイトジェネレーターは相性がいいはずなのに

静的サイトジェネレータ(SSG)の役目は、煎じ詰めれば、HTML形式で書かれた型紙ファイルに別ファイルから供給されたデータをあてはめて成熟HTMLファイルを生成することです。要は、ファイルへのデータ入出力、文字列データの置換・加工。本来ならperlこそSSGの世界を席巻していてもおかしくないところです。奇妙なことに、現実的にはそうなっているようには見えません。

今SSG界においてメジャーの位置にあるのは、Javascriptベースの幾つかと、Golangベースの某ソフト、次点クラスを見てもRubyベース、Pythonベースの製品がほとんどであるようです。

## perlで頑張っている人はいないのか？

 必ずしもそうではありません。

見どころのあるソフトを頑張って開発・公開している人たちは居ます。

そこで、perlベースの静的サイトジェネレータについてのレビューを、私が見出した範囲でまとめてみたいと思います。

# perlベース静的サイトジェネレータいろいろ

## Giblog

[Giblog公式サイト - Giblogのご紹介](https://giblog.perlclub.net/)

* スタイル -- ブログ、一般ページ
* マークアップ -- giblog記法, Markdown
* 主な依存モジュール -- 
* ライセンス -- Artistic License（2.0）

Perl総合研究所代表をつとめる木本裕紀氏が開発しているソフト。木本氏は「静的サイトジェネレータ」という言葉を使っていないようですが、目指しているものは正しくその範疇でしょう。

gitによるコンテンツ管理を前提として設計されており、Github Pagesでのサイト公開が簡単な手順で実現できます。具体的な方法は公式サイト内に記されています。

[Mojolicious](https://qiita.com/tags/mojolicious)と組み合わせることで、最終HTMLファイルの自動生成、ローカルウェブサーバでのプレビューが可能になるのがユニークです。

日本語ベースのGiblogフォーラムが用意されており、作者に直接問い合わせることができるようです。

## Dapper

[Dapper](https://jamstack.org/generators/dapper/)
> Dapper is a simple, flexible, and pragmatic static site generator written in Perl. Dapper takes your content (Markdown), combines with templates (based on the TT3 mini\-language), and creates a set of static files that you can upload to your favorite webhost.

* スタイル -- シンプルなウェブサイト
* マークアップ -- multiMarkdown
* 主な依存モジュール -- Template::Alloy, Text::Markdown, Text::MultiMarkdown
* ライセンス -- MIT

このソフトについては2020年初頭に紹介記事を書き、その後にもいくつか記事を書いています。

* [perlベースの静的サイトジェネレーター : Dapperを試してみませんか？](https://qiita.com/doikoji/items/fa7793aaab0224c31e7e)
* [Hugo - Dapper スピード勝負 - Qiita](https://qiita.com/doikoji/items/6f3af1174291bd2a52fb)
* [perlベースの静的サイトジェネレーターDapper入門： レイアウトファイル編集基礎編 - Qiita](https://qiita.com/doikoji/items/7ce1ce186b74bf9f4c75)
* [perlベースの静的サイトジェネレーターDapper入門： リストやハッシュを使ってデータを束ねる - Qiita](https://qiita.com/doikoji/items/6392573633de4781cda0)
* [静的サイトジェネレーターDapper入門： レイアウトファイル内のフロー制御 - Qiita](https://qiita.com/doikoji/items/8d72b0fc6c5796bf4924)

作りがシンプルなので、カスタマイズして自家用のユニークなSSGを作る土台として利用するのにも向いていると思います。

## Statocles

[Announcing Statocles Static Site Generator | preaction [blogs.perl.org]](http://blogs.perl.org/users/preaction/2015/03/announcing-statocles-static-site-generator.html)

* スタイル -- ブログ、シンプルなウェブサイト
* マークアップ -- markdown
* 主な依存モジュール -- Text::Markdown
* ライセンス -- perl5に準じる

公式ホームページではStatoclesの高機能ぶりがアピールされていますが、差し当たって特筆すべきは以下のような特徴でしょう。

* Gitリポジトリへのデプロイに対応
* タグ、RSS、Atomフィード、sitemap.xmlに対応

## templer

[templer - A static-site generator, written in perl. - metacpan.org](https://metacpan.org/pod/distribution/App-Templer/bin/templer)

* スタイル -- ウェブサイト全般
* マークアップ  -- markdown, textile。ただし、Text::MarkdownやThe Text::Textileの追加インストールが必要らしい。 
* 主な依存モジュール -- HTML::Template
* ライセンス -- GNU v2またはthe Perl "Artistic License".

筆者はこのソフトを触ってみたことはありません。残念ながら現時点でこれ以上コメントする材料を私は持ち合わせていません。

## Newcomen

[Newcomen • A Perl Static Website Generator • subtype.de](https://subtype.de/newcomen/index.html)

* スタイル -- ブログ、一般ページ
* マークアップ -- MultiMarkdown
* 主な依存モジュール -- TemplateToolkit
* ライセンス -- GNU GPLv3

筆者はこのソフトを触ってみたことはありません。以下は公式サイトの記述からの抜粋です。

> ディストリビューションに含まれているプラグインを使用すると、本格的な静的ブログジェネレーターになりますし、ブログ機能が必要ない場合は、単に静的ウェブサイトジェネレーターになります。

> newcomenのブログプラグインは非常に柔軟性が高く、基本的に生成されたウェブサイトのあらゆる面を自由に設定することができます。

> NewcomenはテンプレートエンジンとしてTemplate Toolkitを使用しており、記事ソースはMultiMarkdown形式で記述することができます。必要に応じて、他のテンプレートエンジンやマークアップフォーマットのサポートも簡単に実装できます。

## MovableType

かつてはデファクトスタンダードとしての隆盛を誇った[MovableType](https://www.movabletype.jp/)。これもperlで書かれています。基本的には動的にコンテンツを作って渡すウェブアプリですが、オプションの設定で静的サイト構築に使うことが出来ます。

ただ、ファイル構成が複雑すぎ、プラグインとの相性問題でハマりやすすぎといったことがあり、残念ながら使いやすいとは言い難いです。ソフト自体が有償版・無償版と複数入り乱れていて、どれが使える、使うべきなのか非常に紛らわしいのも辛い。個人ベースで使うにはオーバースペックで「無駄に難しい」印象が拭えません。

## 番外編：MDwiki

このMovableTypeとは究極的に対極的といえるSSGに[MDwiki](http://dynalon.github.io/mdwiki/#!index.md)があります。なにしろ本体はたった一つのhtmlファイルのみ。オプショナルなものを含めても、10に満たないファイルで完結しているシンプルなシステムです。markdownファイルをおいておけば、htmlファイル内に書かれているjavascriptによって、クライアント側のブラウザ内で都度コンテンツを作られる仕組みです。用意したmarkdownファイルについて1:1対応のhtmlデータが入手できるだけで、一覧ページやカテゴリページなどのサポートもありません。

割り切りが必要ですが、内輪向けのウェブでの情報共有ならこのレベルで過不足ないんじゃないかとも思えます。

perl関係ないだろって？ その通り。

で・す・が。逆に言えば、既存markdownファイル群を読んで、インデックスmdやカテゴリmdを自動生成できれば、俄然ブログっぽいサイトを構築することもできそう。そして、そういう作業こそperlの得意とするところです！　案外、これがある意味**本命なのではないか**、とも私には思えるのです。[姉妹版記事](https://qiita.com/doikoji/private/d5a4a0ab1af7afed8b2d
)の方に少し補足を書きました。

# まとめ

紹介してきたperlベースのSSGは、どれもそれなりの作者の気合が感じられ、機能性も十分に備えているように見受けられます。にもかかわらず、Next.jsやHugoに太刀打ちできるだけのインパクトがあるかと言われると、口ごもらずを得ないのも確かです。

しかし、MDwikiの項で述べたように、転換された発想でユニークなサイト構築を考えた時、perlの長所は大いに活かせるのではないでしょうか。テキストベースの仕事であれば、細かいことを気にせず超短期間で何とか動くものが作れてしまうのがperlの魅力。もっとみんなでゲリラ的にいろんなSSGを作って見せ合おうじゃありませんか。