マスカットプロジェクト

マスカットプロジェクトというのは、「Webブラウザ上で動作するAJAXベースのリッチクライアントを開発するオープンソースフレームワーク」です。NTTデータさんがデファクトスタンダードを狙って公開したそうですが、確かにそう成りそうなほど凄いプロジェクトだと思います。

フォームの部品が沢山ある込み入ったデザインでもIDEでグイグイ作ることができますし、JavaScriptを書く量が圧倒的に少なくなります。今までこのレベルのリッチデザインを作ろうと思ったら、prototype.jsやらscript.aculo.usやらを集めてきてコツコツ書かなくてはいけませんでしたが、マスカットを使えば全く気にする必要はありません。

こんなデザインもアッと言う間にできちゃいます。

公式サイトのチュートリアルではJavaを使用して説明していますが、今回PHPで試してみたところ上手く動きましたので、メモを残しておきます。

add.html

チュートリアルでは作成したファイルを maskat/contents/demo 以下に置くように説明していますが、置く場所はどこでも良いです。ただし、add.html でJavaScriptが沢山呼び出されているので、それらのパスを変更しなくてはいけません。

今回はマスカットのファイル群を解凍したままルートに置き、作成したファイルもルートに置きました。ですので、add.html の「../../maskatFW/」の部分を全て「maskat/maskatFW/」と書き換えました。

今回はブラウザ版IDEにアクセスする必要があるので解凍したままを置いて使用しましたが、本番環境ではmaskatFWフォルダだけをアップすれば良いみたいです。

add_e.xml

remoteUrl はAjaxで通信するスクリプトを指定するのですが、add.html からの相対パスで指定するみたいです。当たり前?

で今回は「add.php」としてみました。

add.php

Javaの説明ではなんだかスゲェややこしいですが、PHPではこれだけで済みます。

<?php

// 生POSTデータを取得
$xmlstr = get_row_post();

// XML文字列をパース(PHP5.1の場合)
$xml = simplexml_load_string($xmlstr);

// 計算
$result = $xml->arg1 + $xml->arg2;

// 結果XMLを生成
$result_xmlstr = <<<XML
<?xml version="1.0" encoding="UTF-8" ?>
<sample>
<result>{$result}</result>
</sample>
XML;

// 結果XMLを送信
header("Content-type: text/xml");
echo $result_xmlstr;

/*
 * 生POSTデータを取得する関数
 *
 * php.ini で always_populate_raw_post_data を on にすれば、
 * $HTTP_RAW_POST_DATA から一発で取得できるが、
 * こうした方が環境に左右されないし、メモリ使用量が少なくて済む(らしい)。
 */
function get_row_post()
{
	$buffer = "";
	$stdin = fopen("php://input", "r");
	if(!$stdin) {
		die("標準入力をオープンできませんでした。");
	}
	while(!feof($stdin)) {
		$buffer .= fgets($stdin);
	}
	fclose($stdin);

	return $buffer;
}

?>