ここ1ヶ月ほど、Mashup Awards 4 応募作品の開発に専念するため、エントリの投稿をサボっていました。いろんな人からの協力もあり、おかげさまで Mashup Awards 4 に作品を応募することができました。この場を借りてお礼します。ありがとうございました。先日公開した Golazo MA4 ですが、サーバサイド JavaScript (Ajax Server) の仕組みを備えた Aptana Jaxer を使って、アプリケーションを構築し、運用しています。
Mashup Awards をどう取り組むかは、様々な想いがあると思いますが、Golazo MA4 team としては、新しい技術を試す絶好の機会と捉えていて、実際に Aptana Jaxer を使って JavaScript のみでどこまで開発できるのかチャレンジしてみた次第です。
Aptana Jaxer サイトに Ajax アプリケーションの特性をよく表している図があります。この図は Aptana Jaxer に限らず、一般的な Ajax アプリケーションの構成をも表すもと理解できます。
1 がサーバサイド、2 がクライアントサイド、3 が XMLHttpRequest (XHR) を使ったサーバサイドとクライアントサイドの関係を表しています。一般的に 1 は Java、PHP、Ruby、Python などを使い、2 は JavaScript を使うことになります。3 はその組み合わせになりますが、1 が持つフレームワークの仕組みで 2 と 3 を実現することも多いですね。
Copyright 2005-2008 Aptana, Inc.
Golazo MA4 は 1~3 のすべてを JavaScript を使って実現しています。Golazo MA4 の中身がどんな構成になっていて、どんなことをしているのか、その概観を紹介します。
Jaxer Server は HTTP サーバの機能を持ちません。ですので、Apache 2.2 をフロントエンドにしています。そして、mod_jaxer というモジュールを介して Apache と Jaxer Server を繋げています。
データベースは SQLite を使っています。データベースの操作は Jaxer Framework がサポートしています。Google Gears のインタフェースを包含しています。MySQL などにも対応しているので、必要があればスケールアップすることも考えています。
Copyright 2005-2008 Aptana, Inc.
会員のプロフィール画像をアップロードして、ローカルファイルとして保存しています。ローカルファイルの操作も Jaxer Framework がサポートしています。JSLib をベースにしているようです。ですので、ソケットなんかも使えたりします。
外部の WEB API を呼び出して (GET/POST) して、データ (JSON/XML) を取得しています。外部ホストに対する操作も Jaxer Framework がサポートしています。Jaxer Server は Firefox3 をエンジンとするため、サーバサイドから XHR が使えたりします。
Copyright 2005-2008 Aptana, Inc.
メモの登録や削除、友達になる、友達をやめるなどの操作は、XHR を使ってクライアントサイドからサーバサイドを操作しています。いわゆる Ajax といわれるものです。このとき、Jaxer Framework がクライアントサイドとサーバサイドを仲介してくれるので、JSON のエンコードやデコード、シリアライズというデータ交換のコードはいっさい書いていません。次のように JavaScript の関数を定義して呼び出すだけです。
Copyright 2005-2008 Aptana, Inc.
送信フォームの入力チェックは、基本的にクライアントサイドで実行しています。が、同じ入力チェックをサーバサイドでも実行しています。クライアントサイドとサーバサイドで、同じコードを共有しているので、クライアントサイドだから、サーバサイドだからといった余計なことを考えなくて済んでいます。
Copyright 2005-2008 Aptana, Inc.
サーバサイドでの HTML ページの生成は DOM/CSS をベースとしています。これは Firefox3 をエンジンとする Jaxer Server の特長ともいえます。上から下に向かって HTML ページを生成する一般的なテンプレートエンジンとは発想が異なるため、今までの経験が適用しにくく戸惑いました。
Copyright 2005-2008 Aptana, Inc.
Jaxer Server は、HTTP リクエストがあると、その HTML ページを読み込んで DOM にします。そして、その DOM に対して操作をするタイミングを用意し、その後、操作した DOM をシリアライズして HTTP レスポンスとします。ですので、普段クライアントサイドで使っている JavaScript ライブラリをサーバサイドでも使えるメリットがあります。今回は jQuery を使って、サーバサイドで HTML ページを生成しています。
残念ながら CARWINGS-CASTING (RSS 2.0) は Aptana Jaxer ではなく Ruby を使っています。というのは、Aptana Jaxer は HTML を扱うことを基本(例外もあるらしいが未確認)としているためです。このとき、Ruby から前述の SQLite のデータベースを参照して、Aptana Jaxer と Ruby の共存をはかっています。
う~ん。ざっと全体像をなぞったつもりですが、いろいろ書きたいことがあって、うまく伝わらないかもしれません。今後は、それぞれの領域で、具体的なコードとかをまじえて紹介できればと思います。Aptana Jaxer 自体の Tips は、過去にこのブログで取り上げていますので、参考にしてください。
0 件のコメント:
コメントを投稿