プログラミング言語探訪 CFML
おそらく知ってる人はかなり限られるであろう言語、CFMLです。
商用の、しかも結構お高めのアプリケーションサーバーの開発言語で、大まかに言うとCFMLタグというHTMLに似た構造のタグと、CFScriptというJavaScriptに似ているといえば似ているようなというスクリプトを混ぜ合わて使う言語です。
歴史的に見ると1995年に誕生し、「とにかく業務で使用するようなWebページを最短で作れるツール」として売り出されました。その後、開発、販売していた会社がふらっしゅな感じの会社に買収され、さらにあどびーな感じの会社に買収されて現在に至っているという感じで、歴史は結構長い言語です。
コンセプトとでも言えばいいのか、基本的な作りが「楽できることはとことん楽する」という構造だということ。
例えば、データベースからデータを取り出す、という処理を書く場合、一般的な言語では、こんな手順を踏みます。
1.データベースとの接続処理
セッションを繋いでログインして……ということをやります
2.データを取り出すSQLを送信
3.データを一件ずつ取り出す
4.データの取得が終わったらSQLを閉じる
5.データベースのセッションを閉じる
だいたいこんな感じになります。が、CFMLではいきなりSQLを実行します。書き方はだいたいこんな感じ。
<CFQUERY NAME="SQLData1" DATASOURCE="Database">
SELECT * FROM DATA_TBL;
</CFQUERY>
これだけでDBへの接続からSQL実行まで完了しています。
「接続する」という処理も「SQLを送って結果を受け取る」というような処理も書きません。
そして、その後レコード数分ループするときもこんな感じ。
<CFLOOP QUERY="SQLData1">
ループでやりたいことを書く
</CFLOOP>
レコードを1件ずつ取り出す、つまりレコードを1件ずつ進めていくという記述はどこにもありません。
さらに、たとえば十一件目から十件処理したいという場合はちょっと変えるだけ。
<CFLOOP QUERY="SQLData1" startrow="11" endrow="10">
これだけでレコードが実は十件以下だった場合にはループに入らないとか、二十件に満たなかった場合にループを抜けるといったような処理までできます。
プログラムを組んだことがない人には伝わりづらいところですが、それなりにプログラムを組んだことがある人にとってはとんでもないことです。
通常、こういう処理をやろうとしたらIF文ををいくつか入れてやらないとダメなところが不要なのですから。
このほかにも随所に似たような特徴があるのですが、それらをまとめて言うなら、プログラマが「やりたいことだけ書けばいい」言語です。
例えば、先の例で「1.データベースとの接続処理」と一行で書いちゃいましたが、これをやろうとするとどのデータベースと接続するのか、つまりデータベースの種類とか物理的な接続先とかそういった情報を設定ファイル等から持ってきて設定して……なんてことをするのですが、そういった「設定情報を持ってくる」という記述すら不要。
※アプリケーションサーバに事前に接続情報を登録してあるので、定義した名前を指定するだけでよい
また、データベースと接続、という命令自体が存在しません。プログラムには「データを取ってくる処理」だけが書かれるというわけです。
この辺もプログラムを書いたことがないとわかりづらいのですが、仕様書と言われる処理には「プログラムでやりたいこと」しか書かれていませんが、実際のプログラムには「その処理をするために必要な準備処理、後始末」が必ずついてきます。それらが全て自動的に処理されるので、プログラマが書くのは「やりたいこと」だけ。
そのために、結構ガチガチな手続き型言語のくせに、プログラミングのハードル自体は結構低い言語です。
なお、一緒に使えるCFScriptという言語ですが、こちらはこちらでCFMLだと記述が長くなるのをシンプルに書けるようになる、というものですが、JavaScriptによく似た書き方をするために、作者は何度も間違えました。
「なんでここで動かな……JavaScriptの動くタイミングで動くわけないじゃん!」
あくまでもサーバで動く言語なので、クライアントで動くJavaScriptの処理と間違えやすいという、ただそれだけです。
このように非常に強力な言語ですが、環境準備のハードルは高いです。
そもそもがアプリケーションサーバー製品なので、お安いものでも数十万から。簡単に手を出せる環境ではないのですが、機能的には価格相応の物があったりします。
DB接続もそうですが、メールの送受信、外部Webへのアクセス、ファイル操作の他、オフィスアプリケーション形式のファイルの操作もできますし、開発元が開発元なので、PDFファイルも簡単な命令一発で作成できます。
現状のWebアプリケーションの作り方からすると、時代遅れ感があると言うこともあって、日本のみならず、海外でもシェアは微々たるものになりつつある言語(環境)ですが、バックエンド、つまり画面操作を受けて後方で色々やる、という用途には強いので、それなりに生き残っているんだとか。
とは言え、旧バージョンで色々あったりしたので、シェア的には非常に低くて、微妙な言語、それがCFML(と、それを動かすアプリケーションサーバ)です。




