CMSなしで本文を構造化する方法

2009年10月08日 01:00

ECM流に保管と配信のCMSを分離しようで取り上げた「ページ中に記述するJavaScriptやHTMLのサンプルコードをCMSには依存しない形で一元管理する方法」を実装してみました。

図:構造化されたコンテンツを管理する3つの方法:

一元管理のアプローチ

保管を分離

まず、コード自体をCMSとは別のサーバー上で一元管理することにします。
このSOA的な分離と疎結合によって、CMSの乗り換えや異なるCMSが混在する環境に容易に対応できるようになります。

取り出す手段

コードを取り出す手段としては、RESTやWebサービスよりもシンプルなJSONP(JavaScriptベース)を採用しました。

テキストコンテンツは汎用的なフォーマットに

取り出されたコードサンプルは、ページ本文中に特定の書式で記述するだけで、差し込みが行われるようにしました。

サンプルコード:12

このように、特定のclassを指定したdivを使い、divで囲まれた部分で表示させたいコードのID(例の場合は12)を指定します。

Web用に整形(プレゼンテーション)

JSONPで配信されるテキストは、コードを見やすく整形するフォーマッター(今回はJavaScriptベースのSyntaxHighlighter)によって変換されてから表示されます。

この方法のメリット

  • サイト全体で使われているコードを参考にしながら、サイト全体で一貫したスタイルでコードを記述できる
  • 数年後にフォーマットや規格を最新化する場合に、漏れなく変更できる。
  • 見た目を変更したい場合は、変換プログラムを書き換えればサイト全体に適用される
  • 規模が大きくなった場合は、JSONPに加えてWebサービスに対応させたり、JavaScript側でHTMLに変換している部分をPHPなどサーバーサイドで行うようにするなど、貯め込んだコンテンツに手を加えずスケールさせることができる

無理にCMSで構造化すると

同じことを、CMSのみで行おうとすると、

  1. 本文を「通常テキスト」と「コード」というコンテンツタイプに分割する。
  2. コンテンツタイプを組み合わせてページをレイアウトできるCMSを選定する。
  3. コード言語(HTMLやJavaScript)や行番号の表示の有無、などのメタデータを定義する
  4. 「コード」の元コンテンツをHTMLへ変換するフィルタを開発する

時間とお金がかかる、けっこう大変な作業です。コンテンツがハコであるCMSに依存してしまうリスクもあります。

コンテンツは、アジャイルに管理・再利用しやすい状態にしておきたいものですね。