読者です 読者をやめる 読者になる 読者になる

解き放たれしソフトウェア

GNU/LinuxなどFLOSSについて書いてみるつもり

static site generator のメリットとデメリット

インターネット

static site generator、 俗に「静的サイトジェネレーター」と訳されることが多いですが、つまりウェブサイトデータの完成版を生成するソフトウェアがあります。いわば、ウェブサイト生成器です。

有名なものには JekyllPelican などがあります。

ウェブサイトに載せたい文章や画像などはもちろん自力でつくりますが、 リンクやデザインは自動的に生成されます。

それと比べると、かつてHTMLを手書きするのが一般的な時代には、リンクやデザインなども自力で書き、共通のデザインにするために一枚一枚のHTMLファイルに同じコードをコピーペーストしていたものです。 そうした手間が省けて、「デザインをリニューアルしたのに更新し忘れのファイルがあった」ということも起こりません。

そうして生成されるデータは完成版で、それ自体がブラウザで読み出せる状態です。 管理者はアップロードするだけ。ウェブサーバは閲覧者にデータを送りつけるだけ。 MariaDB(MySQL)やPostgreSQLSQLiteのようなデータベースは使いません。 PHPのような、閲覧者からのリクエストを受けてオンデマンドリアルタイムにデータを生成する手法も用いません。 つまり、いまや一般的ないわゆる"CMS"*1、例えば MovableType(TypePad) や Wordpress などなど*2とは異なります。

手順としてみると、 1. 文章などを書く 2. プログラムの実行 3. アップロード です。

他方のCMSならば、 1. CMS のウェブサイトをブラウザで開く 2. フォームに記入する 3. 投稿完了処理 でしょう。

なぜこのようなソフトウェアが増えてきたのかというと、大きな理由は GitHub Pages (gh-pages。ドメインで言うと github.io ) の登場です。 github.io は、GitHub にウェブサイトのデータを push すると、そのデータをウェブ公開してくれるサービスです。 CMS の機能はありませんから、push するデータは完成形である必要があります。 しかし、とりわけ github.io で blog を公開したいと思った人にとっては、 blog のデータすべてを自力で書くのは面倒です。 そのため、投稿する文章自体を書けば、あとはリンクやデザインを生成してくれるソフトウェアが制作されたわけです。

GitHub Pages のウェブサイトでは真っ先に Jekyll が紹介されており、そのためまずは Jekyll を導入してしまう人が多いようです。

メリット

システムとしてはシンプル

ウェブサーバが要るだけです。 データベースサーバは要りません。 複数のサーバが連携するということもありません。

サーバの負担が少ない

データベースもなければ、コードを解釈する処理もありません。 言うまでもなく、HTMLやCSSなどは主にブラウザが解釈するものなので。

完成形のデータが手元にある

CMSと異なり、生成した完成形のデータが手元に保存されています。

CMSだと、CMSがアップグレードされたりするとデザインをそのまま引き継ぐのが難しくなることもありえます。 また、データベースをバックアップしていても、それは完成形のデータではなく、CMSに処理させる前の原材料の状態です。CMSが壊れたり、別のCMSに変えようとしたりしたときには、大概、困ります。

セキュリティバグが少ない

HTML や CSS、画像やせいぜい JavaScript を生成するくらいなので、セキュリティバグが生ずる余地はとても少ないです。 それに比べるとCMSはいわばウェブソフトウェアで、プログラム本体やデータベース処理部分にセキュリティバグがあることがよくあります。

コードをカスタマイズしやすい

プログラム自体のコードを改変しやすいです*3。 それに比べると CMS はソフトウェアとして肥大化し複雑なため、改変しにくいです。

デメリット

素人が管理するのは難しくなります。プログラミングや CLI の作業の能力がある人でないと厄介です。

それに比べ CMS だと、導入後は素人でも更新していけることが殆どで、導入・システム管理者と投稿者が異なっていてもなんとかなります。 もしも他人(特に素人)に提案するのであれば大概は、 Wordpress だとか*4、既存の CMS サービス*5を借りるとかいうことになってしまいますね。

直感的な制作が困難

ローカルにウェブサーバを立てる機能をもつものもありますが、それでも逐一プレビューしながら制作する作業は面倒です。

それに比べると CMS は、ソフトウェアとして完結しています。直感的だということは素人向きだということでもあります。ローカルマシン上のアプリケーションソフトウェアを操作するのと似たような感覚で作業可能です。

それで、制作が面倒くさいと、更新がおろそかになりがちです。

アップロード作業が要る

Git か SCP か FTP かはともかく、手元のマシンが即ウェブサーバであるということでなければ、アップロード作業を要します。 FTP でさえも往々にして、初心者には意味不明で手順の説明には苦慮されてきました。 ただ単にウェブサイトをつくりたいという目的があるだけの人にとっては、作業の習得は煩わしくて腹が立つでしょう。

作業工数が増えるということはまた面倒くさいので、やはり更新がおろそかになりがちな原因です。

ウェブサイトが動的でない、デザインが流行りのものでない

データが固定的なので、概ね動きのないウェブサイトになります。

また、WordpressMovableType 系のウェブサイトは掃いて棄てるほど存在していて、素人からすると「あんなサイトにしたい」という、まず結果ありきのことを希望していることが多いでしょう。そうした希望には応えられません。

見た目でしか価値を判断しない人、流行のものやどっかで見たのと同じのにして欲しいと思っている人には、全くもってアウトです。 つまり、自分で決裁して自己責任でやる自分のウェブサイトならいいんですが、他人(特に素人)に提案する状況ではまず通用しないでしょう。

(この記事は、静的サイトジェネレーター Advent Calendar 2016 - Qiitaの1日目に埋めました)

*1:Contents Management System

*2:MODX とか MediaWiki とか tDiary XOOPS, Drupal, baserCMS, PukiWiki など枚挙にいとまなし

*3:ちなみに、ライセンスも GPLBSD系が多いと思われます

*4:VPSとか借りて、そこに CMS を展開するという手法

*5:はてなブログもそうですし、アメブロとか。最近はLINEブログとかですか(いや、結果的にライブドアブログとおんなじ企業になっちまっているわけですが)