ColdFusion-開発効率を求められる今だから知りたい高性能Webアプリケーションサーバー

第1回 ColdFusionとは何か。どう動いているのか

この記事を読むのに必要な時間:およそ 4 分

他言語とのコスト対決

さて,ここで気になるのは,学習コストやソフトウェア購入費用など,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の動作模式図

図1 PHPの動作模式図

つまり,PHPのようにApacheのプロセス内でプログラムが実行されるわけではなく,別のプロセスがCFMLテンプレート(CFMLが書かれたプログラムファイル。拡張子は通常.cfm)を実行し,その結果をApacheに渡す形になります図2)⁠

図2 ColdFusionの動作模式図

図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な関係を築けるのも大きなメリットです。

著者プロフィール

酒井克幸(さかいかつゆき)

フリーのテクノロジーコンサルタント。サーバー選定やネットワーク設計などハードウェアレイヤーから,Webアプリケーションの実装(サーバーサイド,クライアントサイド共)などのソフトウェアレイヤーまでの幅広い経験を活かし,クライアント企業のWebアプリケーション構築支援を行っている。殊にAdobe製品(特にMacromedia)製品には精通している。

ブログcyano(シアノ)