GDなど外部ライブラリを別途導入する手間がかかります) 。
ColdFusion概要 - データベースとの連携
ColdFusionは元々データベースと連携した動的Webサイトを構築するためのアプリケーションサーバーとして開発されました。そのため、他言語に比べ動的サイト構築には一日の長があります。
例えば、ColdFusionではCFML(ColdFusion Markup Language)というHTMLのようなタグベースの言語を用いて、クエリーを発行したり、クエリーの中身を表示するロジックを組みます。例えば、 PHPでADODBなどの外部ライブラリを用いずに、ネイティブな関数のみでMySQL上のTable1のカラムstrから、「 What's new」で始まる行を取得してくる例と、ColdFusionで同じ事をする例を比べてみましょう。
PHPでクエリーを実行し、結果を表示する例
<?php
$handle = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$handle) {
die('接続できませんでした: ' . mysql_error());
}
$param = mysql_escape_string("What's new%");
$sql = sprintf("SELECT str FROM Table1 WHERE str LIKE '%s'", $param);
$result = mysql_query($sql);
if (!$result) {
echo "クエリ ($sql) を正しく実行できませんでした: " . mysql_error();
exit;
}
while ($row = mysql_fetch_assoc($result)) {
echo '<p>' . htmlspecialchars($row["str"]) . '</p>';
}
mysql_close($handle);
?>
ColdFusionでクエリーを実行し、結果を表示する例
<cfquery datasource="ds" name="qry">
SELECT str FROM Table1 WHERE str LIKE <cfqueryparam CFSQLType="CF_SQL_VARCHAR" value="What's new%">
</cfquery>
<cfloop query="qry">
<p><cfoutput>#HTMLEditFormat(qry.str)#</cfoutput></p>
</cfloop>
ご覧頂いて分かるとおり、PHPではデータベースへの接続・切断や各種エラーハンドリングも自分で記述する必要があります。それに対し ColdFusionではデータベースへの接続・切断やクエリー実行、及びその際の考え得るエラーハンドリングなどがcfqueryという1つのタグの中にカプセル化されています。そのため、cfqueryタグの中に実行したいSQLを記述するのみで、目的の行をデータベースから取得してくることができます。クエリー部分の行数を比較しても、PHPがmysql_connect()からwhile直前までの11行のところ、ColdFusionはcfqueryタグの3行と、シンプルさが際だっています。
また、クエリーの結果を出力する部分を比べた際に、PHPではHTMLタグとPHP言語自体が入り乱れていて可読性とメンテナンス容易性を損なっています。それを補うため、通常のPHP開発ではSmartyなどのテンプレートエンジンを使うことになり、テンプレートエンジンを覚えるという学習コストが別途発生します。
それに対しColdFusionではCFMLがタグベースと言うこともあり、クエリー結果を出力している部分(cfloopタグで囲われた部分)に CFMLタグ(プログラミング言語)とHTMLタグ(プレゼンテーション言語)を違和感なく織り交ぜて記述することができます。このHTMLとの親和性の高さこそがHTMLベースのWebアプリケーションを構築する際にColdFusionを選ぶベネフィットの一つとなっています。ロジック制作で覚えた CFMLをプレゼンテーションレイヤーでも使用することができるため、ColdFusionにはテンプレートエンジンと言うものが必要ありません。別途テンプレートエンジンを覚えるコストがかからないことは、HTMLベースのWeb開発をしていく上で大きなメリットであると言えます。
他言語とのコスト対決
さて、ここで気になるのは、学習コストやソフトウェア購入費用など、Webサイト構築でトータルにかかるコストがColdFusionと他の言語でどの程度違ってくるか、と言う点でしょう。
同じ機能を持ったサイトを構築してみて学習コスト、工数など比較できるとベストなのですが、そのようなデータはおそらくどこにも存在していないでしょう。しかし、予測を立てることはできます。
例えば、あなたが今から動的Webサイト構築に初めて関わる人で、プログラミング言語も多少の心得はあるが、本格的なものはこれから覚える人だと仮定しましょう。
PerlやJavaを選んだ場合、それを自分の道具のように使いこなせるアドバンスドレベルまで達するには、教えるコスト・覚えるコストが相当かかることは、CGIやJSPを作ったことがある人なら経験的に感じることができるでしょう。アドバンスドレベルとは行かないまでも、『 これを作りたい!』と思ったことが実現できるレベルまで達するまでも相当時間がかかるのではないでしょうか。
これは何故でしょう。おそらく考えるに、PerlやJavaは言語設計の段階から動的サイトを構築するためだけに設計されているわけではないと言う点が大きいと思います。
例えばPerlなどは、1)テキスト(HTML)処理が容易にできる、2)データベースと連携できる、3)ApacheなどWebサーバーと連携できる、などと言う点で、たまたま動的Webサイト構築にも使える言語であった、と考えることもできます。
対してColdFusionではどうでしょうか。上で見てきたように、煩雑なデータベース操作のカプセル化(cfqueryタグ)やHTMLとの親和性の高さなど、HTMLベースの動的サイトを構築するための高い機能性を見過ごすことはできません。SQLと十数種のCFMLタグ・関数さえ覚えてしまえば、初歩的な動的サイトの構築ができてしまいます。また、それら基本的なデータベース操作に加え、メールを送信する、グラフを描く、画像を操作する、など昨今のWebサイトでは当たり前の機能もCFMLタグや関数にカプセル化された状態で提供されています。つまり、ColdFusionを買ったその日からリッチな動的サイトを構築する機能を持ったタグベースの簡便な言語を手に入れることができると言うことです。
もちろん、盲目的に「動的サイトを構築するならPerlやJavaよりColdFusionを使った方がよい」と言うつもりはありません。なぜなら一度Perlを不自由なく使いこなせる程度に覚えてしまえば、CPANという膨大なライブラリーを活用することもできますし、POE(Perl Object Environment)でサーバーを構築するなど、今回ターゲットとしている『動的サイトを構築する』と言う目的以外のことにも覚えた知識を転用することができるからです。
問題になるのは、そのPerlの自由さを享受するためのオーバーヘッドを受け入れ、Perlという言語自身を覚えることから始めるという回り道をする余裕があるのか、あるいは動的サイトを構築することを主眼として設計されたColdFusionを用いて、動的サイト構築一直線で進む余裕しかないのか、と言う点です。
プログラミング言語もこれからで、私は動的サイトを構築するだけでよい、と言うなら、覚えることも少なく一直線に進むことができるColdFusionは十分考慮に値するソリューションであると言えるでしょう。
ColdFusionの動作原理
ColdFusion自体はJava EEプラットフォーム上で動作する製品になります。そういった点でApacheの組み込みモジュールとして動作するPHPなどとは異なっています(図1 ) 。
図1 PHPの動作模式図
つまり、PHPのようにApacheのプロセス内でプログラムが実行されるわけではなく、別のプロセスがCFMLテンプレート(CFMLが書かれたプログラムファイル。拡張子は通常.cfm)を実行し、その結果をApacheに渡す形になります(図2 ) 。
図2 ColdFusionの動作模式図
スタンドアローン形態でインストールした場合は、JRun というAdobeの提供するJava実行環境上でColdFusionが動作する形になります(そのほか、ColdFusionはWebSphereや JBoss上で動作させることもできます) 。Apacheから接続する場合、JRun上で動いているColdFusionに、mod_jrunというモジュール経由で接続し、CFMLテンプレートの処理をColdFusionプロセスに依頼します(IISの場合はISAPIフィルタ(jrun.dll)経由となります) 。ColdFusionはCFMLテンプレートをJavaのバイトコードにコンパイルし、キャッシュします。そのため、2回目以降のリクエストにはコンパイルされたJavaバイトコードが実行されるため、Javaレベルの実行スピードを得ることができます(ご存じの通りJavaは HotSpotなどの各種高速化技術のおかげでバイトコードの実行速度はほぼネイティブレベルです) 。
日本のColdFusionコミュニティー
Webアプリケーションの開発を行っていく上で、相談できる相手や参考になるリソースが存在することは非常に重要です。
日本にはJCFUG(Japan ColdFusion User Group)が存在し、ColdFusion-Style.jp というサイトで活動を行っています。ColdFusion開発で行き詰まったらフォーラムで相談してみると、なにかヒントや解決方法が得られるかもしれません。著者もkatzというハンドル名で活動しています。
また、JCFUGでは定期的にColdFusion勉強会を開いているので、その勉強会に参加して、ColdFusionユーザーと意見を交わすなど、face to faceな関係を築けるのも大きなメリットです。