作成日: 2008年9月1日 | |
作成者:(株)エスアイヤ | 代表取締役 河野俊之 取締役CTO 木戸間 周平 |
最終更新日: 2008年9月1日 |
今回はColdFusionが持つコード再利用の仕組みのうち、CFMLカスタムタグとユーザー定義関数について解説します。これらの機能により、ユーザーは独自のタグや関数を作成し、あらゆる場面で再利用することができるようになります。
ColdFusion 3.0で導入されたカスタムタグは、その後CFMLのコードをタグという形で再利用することができるようになり、現在でも広く用いられている拡張機能の一つです。CFMLカスタムタグは、CFMLページを作成するのと同じようにして作ることができます。CFMLのタグや関数を用いてそのロジックを記述し、CFMLを拡張していきます。CFMLカスタムタグは呼び出し側のCFMLのスコープと異なるスコープを持つために、依存性の低いCFMLカスタムタグを作成することが可能です。それと同時に、ColdFusionが持つグローバルな変数スコープにアクセスすることもできますので、カスタムタグの中でセッションに関する処理を行うことや、必要であれば呼び出し元の変数を操作することもできるようになっています。
HTMLやCFMLのタグには、開始タグと終了タグを持つものや、サブタグといった、特定のタグの中でネストされるタグがあります。このような複雑な構成を持つタグもCFMLカスタムタグで作成することが可能です。こういった高度なカスタムタグでは、開始タグと終了タグで処理内容を変えるといったことや、親タグと子タグ(サブタグ)の間で属性情報などをやり取りして処理を制御するといったことができるため、予め用意されたタグと同等の複雑な機能を持つカスタムタグも実装することが可能となっています。
ユーザー定義関数(User Defined Functionの頭文字をとってUDF)はColdFusion 5から新たに加わった機能で、これによりColdFusionにあらかじめ備わっている関数と同じように使うことができる関数を、ユーザーが独自に作成することができるようになります。再利用可能なロジックをカプセル化するという点においては、前述のCFMLカスタムタグと似ていますが、UDFは関数であるため、条件分岐の判定文や計算式など、式を評価できるあらゆる場所で呼び出すことができます。
ColdFusion 5ではUDFは、ColdFusion が持つJavaScriptに似た記法であるCFScriptを用いなくては作成できませんでしたが、ColdFusion MX以降では、CFScriptおよび、タグベースのシンタックスのどちらを使っても作成することが可能になりました。UDFをCFScriptで記述するのか、あるいはタグベースで記述するのかは、基本的にはどちらの記述方法に慣れ親しんでいるかということによって選択しても構いませんが、タグベースのUDFでないと使用できない以下のような機能がありますので、その点については考慮する必要があります。
逆に、CFScriptによるUDFの定義では、タグでしか用意されていない機能(例えばcfqueryなど)を実行することができないという制約があります。また、どちらのシンタックスを用いて記述する際でもUDFの制限として次の4点に留意する必要があります。
1. アプリケーション内でUDFは固有の名前を持つよう定義する必要がある
2. ColdFusionの関数や予約語以外でなければならない
3. 関数のオーバーロードや二重定義はできない
4. 関数の中に関数(インナーメソッド)を定義することはできない
今回は、CFMLカスタムタグとユーザー定義関数という二種類の拡張機能について見てきました。それぞれ異なる特徴を持つため、使いどころを上手く分けることが肝要です。一般的には、CFMLカスタムタグはその呼び出し方の特徴から、HTML出力などに織り交ぜて扱うことが容易なため、ビューを構成する要素の部品化に、ユーザー定義関数は独自のユーティリティーの部品化などに利用すると効果的でしょう。
次回は、CFMLカスタムタグとは別の種類のカスタムタグであるCFXカスタムタグと、より高度なカプセル化を実現できるColdFusionコンポーネント(CFC)について解説します