CMSなしで本文を構造化する方法
ECM流に保管と配信のCMSを分離しようで取り上げた「ページ中に記述するJavaScriptやHTMLのサンプルコードをCMSには依存しない形で一元管理する方法」を実装してみました。
図:構造化されたコンテンツを管理する3つの方法:
一元管理のアプローチ
保管を分離
まず、コード自体をCMSとは別のサーバー上で一元管理することにします。
このSOA的な分離と疎結合によって、CMSの乗り換えや異なるCMSが混在する環境に容易に対応できるようになります。
取り出す手段
コードを取り出す手段としては、RESTやWebサービスよりもシンプルなJSONP(JavaScriptベース)を採用しました。
テキストコンテンツは汎用的なフォーマットに
取り出されたコードサンプルは、ページ本文中に特定の書式で記述するだけで、差し込みが行われるようにしました。
このように、特定のclassを指定したdivを使い、divで囲まれた部分で表示させたいコードのID(例の場合は12)を指定します。
Web用に整形(プレゼンテーション)
JSONPで配信されるテキストは、コードを見やすく整形するフォーマッター(今回はJavaScriptベースのSyntaxHighlighter)によって変換されてから表示されます。
この方法のメリット
- サイト全体で使われているコードを参考にしながら、サイト全体で一貫したスタイルでコードを記述できる
- 数年後にフォーマットや規格を最新化する場合に、漏れなく変更できる。
- 見た目を変更したい場合は、変換プログラムを書き換えればサイト全体に適用される
- 規模が大きくなった場合は、JSONPに加えてWebサービスに対応させたり、JavaScript側でHTMLに変換している部分をPHPなどサーバーサイドで行うようにするなど、貯め込んだコンテンツに手を加えずスケールさせることができる
無理にCMSで構造化すると
同じことを、CMSのみで行おうとすると、
- 本文を「通常テキスト」と「コード」というコンテンツタイプに分割する。
- コンテンツタイプを組み合わせてページをレイアウトできるCMSを選定する。
- コード言語(HTMLやJavaScript)や行番号の表示の有無、などのメタデータを定義する
- 「コード」の元コンテンツをHTMLへ変換するフィルタを開発する
時間とお金がかかる、けっこう大変な作業です。コンテンツがハコであるCMSに依存してしまうリスクもあります。
コンテンツは、アジャイルに管理・再利用しやすい状態にしておきたいものですね。