2013.03.12
静的サイト生成、DRY、システムの結合度
きのう、当サイトを静的サイト生成に切り替えたが、いろいろ変化を実感している。

静的サイト生成にすると、サーバ運用がラクになり、サイトのパフォーマンス(応答性能)や可用性(サイトが落ちないこと)も上がる。この点では、じつに気楽であり、気分がいい。

しかし、デメリットもある。コンテンツを更新したとき、HTMLの生成をいちいちやりなおさなければならないのだ。これは当然わかっていたことだが、実際にやってみて、このめんどくささを痛感している。

静的サイト生成というものが、そもそも何をやっているのかを考えれば、このメリットとデメリットが出てくることは、必然だといえる。

静的サイト生成では、テキストファイルやデータベースに入っているコンテンツの集まりを、ウェブサイトを構成するHTMLの集まりに、プログラムで一括変換する。このとき、もとのコンテンツはコピーされて、HTMLの中に埋め込まれる。

プログラミングでは、「DRY(同じことを繰り返さない)」という原則がよく知られている。この「DRY」の観点で見ると、静的サイト生成というのは、「DRY」を破っていることになる。コンテンツをHTMLに変換するとき、コンテンツをコピーしているからだ。

「DRY」を破って、コンテンツをコピーしているからこそ、コンテンツが2箇所にあることになり、手動でそれらの同期をとる(一致させる)必要が生じる。コンテンツを更新したとき、HTMLの生成をいちいちやりなおさなければならないのは、このためだ。

しかしいっぽうで、「DRY」を破り、コンテンツをコピーしているからこそ、システムの「結合度」が下がっている。もとのコンテンツがどこにあるか、それをどうやって作成・編集するか、といったCMS(コンテンツ管理システム)的な環境と、サイトを公開・配信する環境を、完全に切り分けられるわけだ。

「重複」と「密結合」は、トレードオフの関係にある。「DRY」は重複をなくすが、部品間に結合(依存関係)をもたらす。「DRY」を捨てて、重複を受け入れれば、同期の問題(重複しているものを一致させる)が発生するが、部品を結合させずに済む。

動的サイトは、「DRY」型である。コンテンツをコピーしないので、同期の問題も発生せず、コンテンツの更新がすぐにサイトに反映される。いっぽうで、CMS環境と、公開・配信環境のあいだに、システムの結合が生じる。よって、公開・配信環境が複雑になり、性能も落ちる。

静的サイト生成は、非「DRY」型である。コンテンツをコピーするので、同期の問題が発生し、コンテンツを更新するたびに、HTMLの生成をやりなおす必要がある。いっぽうで、CMS環境と、公開・配信環境のあいだに、システムの結合は生じない。よって、公開・配信環境を単純にできて、性能も上がる。


関連エントリ:
静的サイト生成に切り替え
http://mojix.org/2013/03/11/mojixorg-static
「DRY」はつねに正しいわけではない 重複と密結合のトレードオフ
http://mojix.org/2013/01/10/dry-duplication-coupling
静的サイト生成という「古くて新しい手法」の復活
http://mojix.org/2012/12/07/static-site-generation