静的HTML出力のメリット/デメリットとは?

#

静的HTML出力(HTML Exporter)とは?

concrete5 のリードデベロッパーを擁する開発元、PortlandLabs 社が提供する、concrete5 の拡張機能パッケージです。concrete5 は、アクセスのたびに PHP がデータベースからデータを取得し、動的に Web ページを表示します。静的HTML出力機能を使うと、concrete5 で構築したサイトを、丸ごと HTML ファイルに出力することができます。出力された HTML を Web サーバーにアップロードすることで、Web サーバー上に concrete5 がインストールされていなくても、concrete5 で作成したサイトを表示することができます。

通常の concrete5 のパッケージと同様、concrete5 の管理画面内からインストールできます。ただし、concrete5.org のマーケットプレイスには掲載されておりませんので、PortlandLabs 社から直接購入し、zipパッケージにて提供されるという流れになります。日本国内では、弊社コンクリートファイブジャパンが日本語での販売代理、および導入のサポートを行っております。

concrete5_Site____.png

静的HTML出力パッケージをインストールすると、自動実行ジョブに「サイト出力」ジョブが追加されます。このジョブを実行すると、concrete5 サイト全体が設定で指定されたパスに HTML ファイルとして出力される仕組みです。アップロードされたファイルや、テーマ等の関連ファイルも同時に指定されたパスにコピーされます。自動実行ジョブは cron 等を使って定期的に実行させることができますので、できるだけ常に最新の状態を反映させることができるようになっています。

concrete5_Site____.png

静的HTML出力のメリット

表示速度

PHPなどのプログラミング言語で Web ページを表示するのに比べて、HTML ファイルを表示するのは、高速に表示を行うことができます。また、メモリの消費量も少なくてすむため、多くのアクセスがあってもサーバーが落ちにくくなります。

 

セキュリティ

サーバー上に置かれた CMS は、常にバージョンアップを行い、パスワードの適切な管理を行わないと、既知の脆弱性を攻撃されたり、ありふれたパスワードによって不正ログインを受けたりする可能性があります。サーバー上に CMS を置かないことで、それらの可能性は排除できます。

 

データベースの分散化の難しさから解放される

Webサーバーの分散化は、ロードバランサーを置くことで比較的楽に実現できますが、データベースサーバーを分散化するのは大変です(技術的な理由についてはここでは割愛させていただきます)。

 

静的HTML出力のデメリット

リアルタイム性

すでに HTML に出力されたものをサーバーにおいて表示する方式だと、最新の状態ではなく、常に HTML 出力を行った時点のコンテンツが配信されることになります。新しいページを追加しても、HTML 出力ジョブを実行するまではサイト内のナビゲーション等に反映されませんし、concrete5 の特長でもある、ページやブロックの表示期間を設定できる詳細な権限機能を活用した期間限定指定も、タイムラグが発生してしまうことになります。

特に、サイト内のページ数が多い場合は、サイトの HTML 出力に時間がかかってしまいます。サイトの規模が大きくなればなるほど、タイムラグは大きくなってしまいます。

 

ユーザーごとに別のコンテンツを配信することはできない

例えば、ユーザーエージェントを元にモバイルとデスクトップで表示テーマを切り替えていたり、ショッピングカートなどユーザーごとに内容の違うコンテンツがあった場合、動的でないと対応できません。

また、concrete5 ではアップロードしたファイルごとにアクセス権限や公開期間を設定することが可能ですが、これも PHP でユーザーアカウントを元に判別していますので、静的 HTML に出力してしまうと対応できません。

 

動的なブロックは使えない

フォームブロック、検索ブロック、言語切り替えブロック、ページリストブロックのトピックや日付での絞り込みなど…。concrete5 では便利な機能を持ったブロックが多く提供されていますが、ユーザーのアクションに反応する動的なブロックは、すべて静的 HTML にしてしまうとその機能を失います。

 

構成が複雑になる

concrete5 は PHP と MySQL が使える Web サーバーにインストールすれば、コンテンツの編集からユーザーへの配信まで、1台のサーバーで行うことが可能です。静的 HTML 出力を使用する場合、多くは Web サーバー上では PHP を動かしたくないと言う用途になると思います。その場合、concrete5 が動作しているアプリケーションサーバーから、HTML を配信するコンテンツサーバーへどうやってアップロードするかを考える必要があります。通常、rsync を使ってミラーリングしたりしますが、そう言ったサーバーの知識が必要になります。

 

ライセンス費

静的 HTML 出力パッケージのライセンス費用を購入する必要があります。

 

静的HTML出力のメリットは、本当に動的のままで解決できないのか?

静的HTML出力にして得られるメリットは、工夫次第では動的なままでも解決することが可能です。

 

フルページキャッシュ

表示速度については、concrete5 のフルページキャッシュ機能を使うと大幅に改善します。フルページキャッシュが有効になっているページでは、データベースにアクセスせずにキャッシュに保存された HTML を配信するため、静的 HTML 出力に匹敵する速度で表示できます。一方、動的なブロックがあるページではフルページキャッシュが自動的にオフになるため、サイト全体を静的 HTML 出力してしまう場合に比べて、自由度が広がるというメリットもあります。ただし、フルページキャッシュの設定は柔軟な反面、経験も必要です。アクセスの多いページが実はフルページキャッシュが働いておらず、サーバーに負荷をかけているということもあります。

 

アップロードファイルを別サーバーから配信

Amazon S3を使うなど、ストレージサービスを使用してファイルを配信することで、 Web サーバーの負荷を下げることができます。concrete5 では、ファイルマネージャーから直接 Amazon S3 にファイルをアップロードするアドオンも用意されています。

https://www.concrete5.org/marketplace/addons/storage-for-amazon-s3/

 

PHPの中間キャッシュを用いて高速化

APCやOPcacheなど、PHP自体の実効速度を高速化する仕組みを使うことで、静的 HTML にしなくても高速に表示することが可能になります。また、concrete5 自体が持っている各種キャッシュも、メモリ上に保存することで高速化を図ることもできます。

 

セキュリティ対策は基本をきちんと。WAFを導入する選択肢も

活発な開発者コミュニティを擁するオープンソースである concrete5 は、脆弱性の報告があれば、都度修正され新しいバージョンとして提供されています。アップデートをきちんとする、アクセス権の管理をきちんとすることで、一般的な危険性には対処できます。

また、PHP アプリケーションの一つ上のレイヤーにWAF(Web Application Firewall)を設置するのも良い方法です。XSSやCSRFなど、Web アプリケーションに対して行われる攻撃を、アプリケーションに到達する前にブロックすることで、高いセキュリティを確保することができます。

https://www.incapsula.com/

https://aws.amazon.com/jp/waf/

 

初めから冗長性を備えたデータベース製品を使う

この記事を執筆している時点では、東京リージョンでの提供も始まった Amazon Aurora が最も期待される製品でしょう。クラウド時代にふさわしく、可用性と冗長性を兼ね備えた製品です。

http://aws.typepad.com/aws_japan/2015/10/amazon-aurora-is-available-in-tokyo.html

http://www.publickey1.jp/blog/15/amazon_aurora_dbms.html

 

静的 HTML 出力のデメリットをどのように解決するか?

静的 HTML 出力のデメリットも、工夫次第で低減することが可能です。

 

できるだけ短い間隔で出力する

リアルタイム性については、できるだけ短い間隔で出力するしかありませんが、これはサーバーのスペックやページ数にも依存します。通常の構成では、30分以下の間隔にすることは難しいと思います。

弊社では、静的 HTML 出力を導入されたお客様に、カスタマイズによって「現在見ているページのみ HTML に出力する」ボタンや、「特定の頻繁に更新するコンテンツのみ出力するジョブ」を開発して提供した実績もあります。これらの方法によりある程度の回避は可能ですが、rsyncによるミラーリング自体にもタイムラグがあるため、完全とは言えません。

 

サイト内検索を concrete5 を動かさずに実装する

検索ブロックについては、Google など別のサービスや製品を用いて行うことも可能ですし、検索精度はむしろ Google の方が高い場合もあるでしょう。

Google Custom Search
https://cse.google.jp/cse/

Apache Solr
http://lucene.apache.org/solr/

しかし、それ以外の動的なブロックについては、回避策はありません。

 

以上、静的HTML出力パッケージについての情報をまとめてみました。現在、静的HTML出力パッケージは、バージョン5.7系、5.6系ともに提供されています。ライセンスのご購入を希望される方は、コンクリートファイブジャパン株式会社までお問い合わせください。


コメント欄を読み込み中