静的ページを動的に(SSIを代用するには)
永久運動機関は無理だけど……
『永久運動機関』というのは人類の見果てぬ夢であり、現在でも特許庁に毎年何件か「これこそ永久運動機関!」として出願がされるそうである。もちろん、実際には熱力学の第1法則のとおり、そんなものは存在しない。
しかしながら、自動化というのは人類のテーマであり(大きく出たな(^^;)日々の面倒な更新作業を少しでも減らしたいというのは万国共通のテーマであろう。
そのために元々は静的な情報であるHTML文書を表示するだけであったウェブの世界に様々な動的な情報生成機能が付け足されていって、現在に至っているわけである。
そうした手法のひとつにSSI(Server Side Include)というものがあることはご存知の方も多いだろう。
SSIが使えない場合
SSIはshtmlなどの拡張子で示されることが多いが、HTML中に<!--#exec cmd="実行命令" -->などのように記述しておくことで、HTML文書内でサーバサイドの実行結果を受けとることができるものだ。ウェブの初期のころからアクセスカウンターなどにこうした機能を活用する動きは多く見られた。
しかしながらセキュリティを重視する@homepageなどの多くのサーバーではこの機能が利用できない。
そのため代替手段としていろいろなことが考えられるわけだが、今回はその中でももっともポピュラーなJavaScriptを使ったCGI埋めこみを説明してみたい。この方法はすでに多くの人が知るところであり、なんら珍しいものではないし、実際当サイトでもあちらこちらで活用している方法である。
document.write ...
なにかを表示するCGIがあったとしても、その結果を表示したいのは既存のHTML文書の中であったような場合、SSIが使えれば一番簡単なんであるがそれもかなわない。こんなときに利用するJavaScriptはずばり"document.write"である。
出力結果(SSIとして埋めこみたかった内容)をすべてdocument.writeで表現してやれば、実際SSIと遜色ない結果を得ることができる。また、SSIの場合、サーバーをまたいだ利用について制約が起きることもあるが、
Java Scriptであればそれもあまり大きな制約にならない。
このページの右上あたりにフォーラムへのログイン情報を表示しているエリアがあるが、これがまさにそうした機能だ。埋めこみは<script
src="cgi等のURL"></script>とすることで呼び出しができる。そして呼び出し結果はcookiesの内容を評価しログインしている場合はハンドルとかメッセージ件数を、ログインしていなければログインを促す表示を行っている。
当フォーラムのトップページではニュースやフォーラムココログの更新状況、掲示板の新着情報などを表示するのにこの機能を活用している。
実際にどうなっているのかは、実はすでにソースまでご紹介したことがある。
[PHPでRSSアグリゲート] の回で最後の辺りで最終出力結果をJavaScriptを使うようにしている。これこそがまさにその機能である。これはRSSを読み込んで新着結果を表示する機能を、最終的にJavaScriptを使って表示しているのだ。
利用方法と注意事項
一度様々な表示機能を作成してあれば、こうしたJavaScriptへの変換さえ組み込めばいいので、それほど難しくはない。考え方としてはCGIでprintやechoしていた部分をすべてdocument.writeに置き換えればOKなのだから。
呼び出し方についても
<noscript></noscript>
</script>
のように埋めこむだけだ。
個々のサイトに簡単に取りつけられるものとしては
- フォーラムログイン情報: http://www.com.nifty.com/forum/comstatus.go
- FHPG掲示板新着情報: http://fhpg.net/php/rss/mesnew.php4
などがある。最近紹介した[ココログアフィリエイトリンク簡単作成]もこれと同じ機能だ。
Amazonのアフィリエイトなどでも使われる。
いろいろと便利なこのJava Script埋めこみであるが、注意としてはJavaScriptを無効にしている相手にはまったく利用できない。このため<noscript>などを使って、代替アクセス手段を提供すべきであろう。
また、document.writeで生成された部分は検索エンジンなどにも引っかかりにくい傾向があるようなので、そういった辺りは充分に注意して利用したい。