ここでは、サーバサイドでDOM操作を行って「Hello Jaxer!」という文字を追加するサンプルを紹介します。まずは、「hello.jaxer」ファイルのソースコードを見てください。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> |
ほぼ見慣れたHTMLとJavaScriptだと思いますが、2カ所注意する点があります。
<script>タグのrunat属性は、Aptana Jaxerサーバに、そのJavaScriptプログラムがどのタイミングで実行されるべきかを示すものです。
runatには、次のバリエーションがあります。
Aptanaのサイト上にあるこちらの図はAptana JaxerのJavaScript実行タイミングをイメージするのに有用です。
「Hello Jaxer!」のサンプルでは、<body>タグに、「<body onserverload="hello_jaxer();">」と書かれています。これは、「<body onload="hello_jaxer();">」と似たような指定で、onserverloadの記述を利用することでサーバサイドでAptana Jaxerにページが読み込まれたときに実行させたいハンドラを指定できます。
この「hello.jaxer」ファイルをJaxerがインストールされたサーバにアップロードして、そのURLを表示すれば、実行結果を確認できます。
Aptana Jaxerのインストールに関しては今回は割愛します。Linuxの既存のApacheにAptana Jaxerをインストールする手順は「Jaxer Installation Guide (Linux Standalone) | Aptana」を参考にしてください。
アップロードしたファイルにWebブラウザでアクセスし、右クリックなどでHTMLソースを見ると、次のように表示されます。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> |
「runat="server"」ですので、HTMLファイル内に書いておいたJavaScriptのプログラムの記述は消えています。また、<body>タグのonserverloadの記述も消えています。<div id="hello">の中に、DOM操作によって「Hello Jaxer!」の文字が埋め込まれていることが確認できます。
非常に簡単ですが、Aptana Jaxerの基本的な解説は以上にします。Aptana Jaxerには以下のような、非常に魅力的な特徴がたくさんあり、ここでは到底紹介し切れません。ぜひAptana Jaxerのサイト上を見てみてください。
ここからは、今回のSEO対応のサンプルの解説をしていきます。
まず、SWFAddress以外を「runat="both"」としました(SWFAddressは、記事の最後の「Aptana Jaxerの現状、今後に要注目」に挙げた問題があり、読み込みに失敗するため)。
<script runat="both" type="text/javascript" |
下記のように、タブのアクティブ状態や、タブに対応するコンテンツはサーバ側で動的に設定されるので、設定する必要はなくなりました。また、JavaScriptがOFF時の状態ごとのURLはクエリストリングを使って表すようにしています。
<a href="?path=/tab-a/#/tab-a/" class="tab active" id="tab-a"> |
以下の2つの処理を行う関数を作成しました。
下記のように、サーバサイドでonserverloadのイベントが発生した際に、この関数が呼び出されるようにしました。
<script runat="server" type="text/javascript"> |
swfaddress.jsはクライアントサイドでのみ読み込まれますので、SWFAddressはサーバサイドでは定義されていません。コントローラーのコードはクライアントとサーバで同じものを使用しますので、次のような判定で、定義があればリスナ登録をするようにし、未定義なクラスのメソッドを呼び出すことによるエラーが発生しないようにしました。
if (window.SWFAddress != null) { |
また、下記のように、コントローラーのインスタンスを変数にセットするようにしました。
ajaxrecipe.controller = new ajaxrecipe.SmoSeoSampleController(); |
サーバサイドでの実行の際、onserverloadイベントから、onChangeTabメソッドが以下のように呼び出せるように修正しました。
ajaxrecipe.controller.onChangeTab(event); |
以上の修正だけで、サンプル3のコードをAptana Jaxerを使ってSEO対応させることができました。
今回は、Ajaxの弱点であるSMO、SEOに対する対応策を紹介しましたが、いかがだったでしょうか。いずれもリッチなサイト構築が一般的になりつつある最近ではよく直面する問題だと思います。SEOに対応したAjaxアプリケーションは必然的にアクセシビリティも向上しますので、今後もニーズは増えていくと思われます。
Aptana Jaxerはまだ2008年1月にリリースされたばかりの新しいプロジェクトです。このため、共用ホスティングで気軽に利用できるような状況ではありません。利用するためには自分自身でサーバにインストールしなければなりません。
また、著者もまだ試し始めたばかりですが、以下のように必ずしもクライアント上のコードがそのままの形でサーバサイドでも実行できるようになるわけではないケースがあるようですので、導入の際は、プログラムの調整が必要になります。
また、JavaScriptコード内に、文字列として、「</script>」といった記述があると、サーバサイドでのJavaScriptのパースが失敗してしまうなど、細かなバグもあるようです。
また、大規模サイトに導入するには、パフォーマンスなどの検証も十分に行う必要があるでしょう。以上のような不安要素はいくつか残されている現状ではありますが、Aptana Jaxerの導入のメリットは今回の記事で紹介したとおり非常に大きいので、導入のケースは増えていくものと思われます。今後のAptana Jaxerの動向は要注目です。
このように、Aptana Jaxerはまだ不安要素も多少ありますが、それでも導入を検討することは十分可能だと思います。ぜひ、今回の記事で紹介したテクニックを一度お試しください。
今回のすべてのソースコードはこちらになります(サンプルのライセンスはGPL 2となります)。
プロフィール:志田 裕樹(しだ ゆうき)
株式会社アークウェブ取締役。Webシステムのシステムエンジニアとして開発に従事している。
Ajax、Ruby on Rails等を使用したWeb 2.0的システムの開発実績を持つ。
オープンソースのECサイト用CMS、Zen Cartの日本語コミュニティでコミッターとして活動している。
Copyright © ITmedia, Inc. All Rights Reserved.