ファイルメーカーで商用ウェブサイトを構築する
第4回 ZDNetファイルメーカーシステム「BeforeCMS」の構造(4/4)
前のページ
HTMLスクリプトの分割・モジュール化
では、記事ファイルの書き出しをどうするかという問題に移ります。これにはいくつかの方法があると思います。
- (1) あらかじめ用意したHTMLテンプレートをグローバルフィールドに入力しておき、そのなかに、タイトル、本文、著者名などのタグを埋め込んでおく。それらのフィールドとタグを、ファイルメーカーProのSubstitute関数を使い、そのレコードの値に置き換える。
- (2) HTMLをいくつかのモジュールに分け、それをグローバルフィールドとして保持し、それらを組み合わせた計算フィールドをもうけ、そのフィールドを書き出す。
- (3) HTMLをいくつかのモジュールに分け、それをサブスクリプトにしておく。HTML書き出し用のグローバルフィールドを用意しておき、そこに、HTMLモジュールの最初から順番に追加していく。最後まで終わったら、そのフィールド全体を書き出す。
ZDNetのサイトを構築するときに、最大の障害となったのは、相次ぐ仕様変更です。これは、「生きた」サイトを作るには必要不可欠で、メインの要素以外のあらゆるものが変わっていきます。そのなかで、制作システムの変更を最小限に抑えるために、BeforeCMSでは最後の方法 (3) をとりました。スクリプトの徹底的なモジュール化です。HTMLモジュールは、主要なものだけ挙げても、これだけあります(本当は、この10倍くらいあります):
- HTML開始
- HEAD
- METAタグ
- スタイルシート
- チャンネルロゴ画像の選択
- 主要チャンネルへのリンク
- タブ1列目
- タブ2列目(テキストタブ)
- 広告1
- 左カラム開始
- 記事検索
- 広告2
- 著者別インデックス
- 特集インデックス
- 広告3
- 今日のニュースインデックス
- フィードバック用メールアドレス
- 左カラム終了
- 中央カラム開始
- 日付け、記事分野
- タイトル
- 概要
- ページナビゲーション(前ページへのリンクのみ)
- 広告4
- 本文
- 翻訳原文へのリンク
- クレジット
- ページナビゲーション
- 本文下インデックス
- 中央カラム終了
- 右カラム開始
- トピックス
- 広告5
- 他チャンネルインデックス
- 右カラム終了
- 下パート開始
- フッタリンク
- コピーライト
- フッタ終了
- HTML終了
ふう、っていう感じですね。まあ、最初にこれらのモジュールに分離するのは大変ですが、この大部分が各チャンネルで流用できるため、開発の工数は大幅に削減できました。HTMLが完全にフィックスした状態であれば、 (1) の方法でもいいと思います。
FMスクリプトによるHTML吐き出しから、FTP、プレビューまで
ファイルメーカーProのスクリプトを使って、上で使ったHTMLモジュールを順番に書き出すわけですが、そのためには、次のような順序で行います。
- 一時的な保存場所として、「HTMLグローバル」という、グローバルフィールドを設定します
- HTMLモジュールを次々に、この「HTMLグローバル」に追加していきます
- 最後まで終わったら、「HTMLグローバル」を、Troi File Plug-inを使い、共有ボリュームに保存します
- 保存したHTMLファイルを、ステージングサーバにFTP(Interarchyを使う)
- ステージングサーバ上で、ブラウザを使ったプレビューを行います
本文、タイトルなどを入力したら、チェックの後、HTML書き出しからプレビューまでを一気に行います。以前は共有サーバ上でもプレビューしていたのですが、今ではステージングサーバまでアップしてからプレビューを行っています。本来ならば完全な状態にしたうえでFTPしていたのですが、SSI (Server Side Include) を多用するようになったことと、広告サーバが、ステージングサーバ上でした動かないため、このような形になりました。
Webサーバへの分配、記事アップの通知
確認がすんだら、いよいよ、ウェブサーバへのアップ作業です。以前は、この作業をコマンドラインで行っていました。手動アップする人は、
macwireupate /0210/08/nj00_filemaker.html
というようなコマンドを、手作業で行っていたわけで、その作業がいやなわれわれは、ここをAppleScriptで制御するスクリプトをファイルメーカーProに仕込み、AppleScript対応のターミナルソフトで動かしていたのです。Better Telnet、MacSSH、MacTelnetはいずれも、フルにスクリプタブルで、Mac OS Xのターミナル機能と違って、ターミナルに特定の文字列が表示されたら、この文字列を送信するといったことが可能で、対話的なやりとりを要求するコマンドにも、十分に対応できたのです。その際、毎回ログインしてID、パスワードを入れる手間も省くことができたので、大幅に時間を節約できたのです。
いまは、先にも述べたように、この部分は完全にcgi化されており、URLに引数を渡すだけで、ちゃんと処理をしてくれます。ファイルをまとめてアップするときにも対応しているので、この外部アプリケーションは不要となりました。ただし、サーバ担当者がそこまで作り込んでくれるとは限らないので、いざというときにコマンドラインをいじる解決法があるというのは、非常に心強いです。
ウェブサーバへの分配が終わると、記事を新規にアップしたという通知を、社内のメーリングリストに流します。編集部内では、常にチャットをしながら情報のやりとりをしているのですが、チャットをしていない部署の人たちには、メールで記事更新の通知がいくようになっています。
この処理には、UVJ MailerとOMEを使っています。両者の使い分けですが、下記のスクリプトのように、システムバージョンでMac OS Xかどうかを判断し、OS Xであれば、OMEを、そうでなければUVJ Mailerを選択するようにしています。

メール送信スクリプトのモジュールを選択するには、OSのバージョンを取得して判断します
Oracleとの同期
Oracleを用いたバックエンドサーバとのデータ同期も、1つの記事をアップするたびに実行しています。ウェブサーバへの分配を行うタイミングで、別のディレクトリに、同期用のデータをFTPします。このデータも、計算フィールドで作り、Troi File Plug-inを使い、保存したうえでFTPします。この部分が、ファイルメーカーProの新バージョンであるVer. 6.0のXML機能で何とかならないかと、いま、Oracleの担当者と話をしているところです。
現在のところ、BeforeCMSを使った記事はすべて、Oracleとデータ同期していますが、もうひとつの大仕事として、ZDNet Productsの製品データベースを同じようにOracleと同期させるという仕事があります。そうすれば、ファイルメーカーProで作っている記事のほとんどすべてがバックエンドと同期することになり、いざというときのバックアップも作られます(もちろん、ファイルメーカー Serverで、データのバックアップは毎日保存していますが)。ファイルメーカーProで実行している外部アプリケーションのコントロールをバックエンドで行うということも可能です。その分、BeforeCMSでほかの新しい機能を追加することができます。
以上、ファイルメーカーProを使ったBeforeCMSの構造について解説しましたが、次回は、導入に当たり、起きるさまざまな問題への対処方法について述べていきます。
[松尾公也, ITmedia
]
Copyright © ITmedia, Inc. All Rights Reserved.
前のページ
| 4/4 | 最初のページ