| ColdFusionマークアップ言語(CFML) | |
|---|---|
| パラダイム | 命令型、オブジェクト指向 |
| 設計: | ジェレミー・アライア、ジョセフ・J・アライア |
| 開発者 | Adobe Systems ( ColdFusion )、Lucee Association ( Lucee )、New Atlanta および aw2.0 ( openBD )、The Railo Company ( Railo ) |
| 初登場 | 1995年 (1995年) |
| 安定版リリース | 2023年リリース / 2023年 (2023年) |
| 実装言語 | Java |
| OS | クロスプラットフォーム |
| ライセンス | 実装によって異なります。独自ライセンス、LGPLライセンス、GPLライセンスのエンジンがすべて利用可能です |
| ファイル名拡張子 | .cfm、 |
| ウェブサイト | www.adobe.com/products/coldfusion |
| 主要な実装 | |
| Adobe ColdFusion、Lucee、Railo、BlueDragon、Open BlueDragon | |
| 影響を受けた | |
| Lucee | |
ColdFusion Markup Language(CFML)は、 Java仮想マシン(JVM)、. NET Framework、Google App Engine上で動作するWeb開発用のスクリプト言語です。Adobe ColdFusion、Lucee、New Atlanta BlueDragon(Java版と.NET版)、Railo、Open BlueDragon、その他のCFMLサーバーエンジンなど、 CFMLエンジンの商用、無料、オープンソースのソフトウェア実装がいくつか利用可能です
概要
最も単純な形式では、他の多くのWebスクリプト言語と同様に、CFMLは標準HTMLファイルをデータベースコマンド、条件演算子、高水準書式設定関数、その他の要素で拡張してWebアプリケーションを作成します。[ 1 ] [ 2 ] CFMLには、ビジネスロジックとプレゼンテーションを分離できる CFML版のオブジェクトであるColdFusionコンポーネント(CFC)など、他の多くの構成要素も含まれています
CFML は、タグまたはJavaScript ( ECMAScript )に似たCFScriptを使用して記述できます。
CFMLアプリケーションのページには、HTMLタグに加えて、サーバーサイドのCFMLタグと関数が含まれています。最近のCFMLアプリケーションでは、ビジネスロジックを実行するためにCFMLページからアクセスされるCFCも含まれる傾向があります。WebブラウザがColdFusionアプリケーションのページをリクエストすると、ColdFusionアプリケーションサーバーによって自動的に前処理されます。[ 3 ]
CFML は、 HTML 以外にも、 XML、JavaScript、CSSなどの他の言語を生成するためにも使用できます。
名前にもかかわらず、CFMLはマークアップ言語ではありません。また、CFMLのコア機能の一部がSGMLに準拠していないため、 SGMLでもありません。
CFMLエンジンは、サーバー上の特定のファイル拡張子(.cfm、.cfc)が処理のためにCFMLエンジンに渡されるように設定されています。Javaベースのエンジンの場合、これはJavaサーブレットを介して行われます。CFMLエンジンはCFMLタグと関数のみを処理し、CFMLタグと関数の外側のテキストは変更せずにWebサーバーに返します。[ 4 ]
歴史
当初Cold Fusionと名付けられたこのソフトウェアは、1995年にミネソタ州に拠点を置くAllaire Corporationによって開発されました。その後、マサチューセッツ州ケンブリッジ、そして最終的にマサチューセッツ州ニュートンに移転し、 2001年にMacromediaに買収されました。Allaire Cold FusionはMacromedia Cold Fusionになりました。バージョン4のリリース時に、名前のスペースが削除され、ColdFusionになりました。Adobeは2005年にMacromediaを買収しました。2023年現在も、ColdFusionの開発を積極的に行っています
1998年、アラン・ウィリアムソンと彼のスコットランドの会社「n-ary」は、一般的なプログラミングタスクを簡素化するJava用テンプレートエンジンの開発に着手した。[ 5 ]ウィリアムソンはタグではなく中括弧記法を使用していたが、CFMLの例を見て、それがタグ構文を使用して同様の問題(Javaではないが)をどのように解決しているかを知り、後にBlueDragonとなるものの開発を開始した。これはCFML言語の最初のJava実装であった(ColdFusionは、 2002年に最初のJavaベースバージョンであるバージョン6.0がリリースされるまで、 CおよびC++で書かれていた)。ニューアトランタは2001年頃にBlueDragonのライセンスを取得し、商用製品として提供し、最終的にCFMLの.NET実装を作成した。Open BlueDragonは商用BlueDragon製品のフォークであり、2008年に初めてリリースされた。
Railo CFMLエンジンは2002年に学生プロジェクトとして始まり、2005年に初めて商用プロジェクトとして立ち上げられました。[ 6 ] Railoは2008年にエンジンをオープンソース化することを発表し、最初のオープンソースバージョンは2009年にリリースされました。
2009年6月18日、AdobeはCFUnitedカンファレンスにおいて、CFML言語の変更を指導および検討するCFML諮問委員会[ 7 ]を設立したことを発表しました。この委員会は2010年に解散しました。Googleグループ「CFML Conventional Wisdom」は、言語とエンジンの機能に関するオープンで公開的な議論の場として設立されましたが、2011年以降、その利用は減少しています。
2012年にOpenCFML Foundationが設立されました。その役割は、オープンソースのCFMLアプリケーションとプラットフォームの 推進です。
元 Railo の主任開発者 Michael Offner 氏は、 2015 年 1 月 29 日にロンドンでRailoのフォークであるLucee をリリースしました。コミュニティのサポーターと Lucee Association のメンバーの支援を受け、このプロジェクトの目標は、より少ないリソースを使用して CFML の機能を提供し、パフォーマンスを向上させ、CFML をそのルーツを超えて現代的で動的な Web プログラミング プラットフォームへと移行させることです。
2025年時点でもCFMLは使用されていました。Luceeは2025年5月22日~23日にCFMLカンファレンスCFCAMPを開催する予定です。[ 8 ] Adobe ColdFusion Summit 2025は2025年9月21日~24日に開催される予定です。[ 9 ]
構文
CFMLタグはHTMLタグと似た形式です。山括弧(<と>)で囲まれ、通常は0個以上の名前付き属性を持ちますが、一部のタグ(cfset、cfifなど)には属性ではなく式が含まれます。多くのCFMLタグには本体があります。つまり、開始タグと終了タグがあり、その間に処理対象のテキストが配置されます。例:
<cfoutput> #値#ボブ! </cfoutput>cfsetやcfftpなどの他のタグにはタグ本体はありません。必要な情報はすべて、以下の例のように、タグ属性(名前と値のペア)の形式で、開始文字(<)と終了文字(>)の間に記述されます。タグにタグ本体がなくても問題ない場合、最初の例のようにタグを閉じずにそのままにしておくことも構文的には許容されます。ただし、多くのCFML開発者は、コードの読みやすさを向上させるため(おそらく)2番目の例のようにタグを自己閉じさせることを選択します。
<cfset値= "こんにちは" > <cfset値= "こんにちは" / >タグに本文を含めることができる場合でも、属性によって必要な情報がすべて指定されているため、本文を含める必要がない場合があります。このような場合、上記の2番目の例のように、終了タグ(つまりタグ本文)を省略し、次の例のようにタグを自己終了させることができます。[ 10 ]
< cfexecute名= "C:\\winNT\\System32\\netstat.exe"引数= "-e"出力ファイル= "C:\\Temp\\out.txt"タイムアウト= "1" />様々なタグ(cffunction、cfparam、cfqueryparamなど)は、プログラマーが入力パラメータの型を明示的に宣言することで、型チェック機能を提供します。この機能はcfqueryparamと組み合わせて使用することで、ハッカーやSQLインジェクションなどの悪意のあるWebリクエストからWebアプリケーションやデータベースを保護します。
組み込みタグ
CFML言語の中核は、約100個のタグとその他多くの機能で構成されています。以下は、機能または目的別にCFMLタグをリストしたものです。[ 11 ]
- アプリケーションフレームワーク
- 通信
- 制御
- データ出力
- デバッグ
- ディスプレイ管理
- 拡張性
- ファイル管理
- フォーム
- インターネットプロトコル
- ページ処理
- セキュリティ
- 変数操作
- その他のタグ (cfimage、cfregistry など)
カスタムタグ
CFMLでは、カスタムタグの形で言語拡張が可能です。カスタムタグは、開発者が作成するCFML言語自体の一部ではないタグです。カスタムタグは通常のCFMLファイルであり、タグとして呼び出されることを意図していますが、テンプレートをカスタムタグと通常のテンプレートの両方として扱うことも可能です。カスタムタグはCFMLで記述され、通常はカスタムタグのファイル名にcf_をプレフィックスとして付けることで呼び出されますが、カスタムタグを呼び出す方法は他にもあります
テンプレートがカスタム タグとして呼び出される場合、そのタグを呼び出すために使用される属性は、属性スコープ内のタグ内で使用可能であり、呼び出し元のページの変数は呼び出し元スコープを介してアクセスできます。
たとえば、 2 つの属性を取得してそれらを加算する、加算を実行するカスタム タグを記述する場合、タグは addition.cfm ファイルとなり、次のようになります。
<cfset caller.addition = attribute.first + attribute.second / > < cfexit method = "exitTag" />タグがファイルと同じディレクトリ(または事前定義された customtags ディレクトリ)にあると仮定すると、次のように呼び出すことができます。
< cf_addition最初= "1" 2番目= "2" >CFX タグは、 JavaまたはC++を使用して開発されるカスタムタグで、cf_ と同様に cfx_ という接頭辞が付きます。Java および C++ タグは、CFML エンジンの管理者を使用するか、設定ファイルを編集することで CFML ランタイム環境に追加されます。
一部のCFMLエンジンでは、<cfimport>タグを使用してJSPタグをCFMLページに含めることもできます。 [ 12 ]
関数
ColdFusionマークアップ言語には、論理演算や算術演算、データの操作に使用する一連の関数が含まれています
| 関数 | 参照 | コード |
|---|---|---|
| 配列 | [ 13 ] | (ArraySort、ArrayAppend、ArrayDeleteAt...) |
| 変換 | [ 14 ] | (URLEncodedFormat, ToString...) |
| 日付と時刻 | [ 15 ] | (LsTimeFormat、DateAdd、DateDiff...) |
| 決定 | [ 16 ] | (IsDefined、IIF...) |
| 表示と書式設定 | [ 17 ] | (CJustify、NumberFormat...) |
| 動的評価 | [ 18 ] | (DE、評価…) |
| 拡張性 | [ 19 ] | (CreateObject、ToScript...) |
| 画像 | [ 20 ] | (ImageRotate、ImageAddBorder...) |
| 国際化関数 | [ 21 ] | (SetLocale、GetTimeZoneInfo...) |
| リスト | [ 22 ] | (FindOneOf, ListSetAt...) |
| 数学 | [ 23 ] | (ランダム化、平方根…) |
| その他の機能 | [ 24 ] | (WriteOutput、GetBaseTemplatePath...) |
| クエリ | [ 25 ] | (QueryAddColumn、QuerySetCell...) |
| セキュリティ | [ 26 ] | (暗号化、復号化…) |
| 文字列 | [ 27 ] | (リバース、HTMLコードフォーマット...) |
| 構造 | [ 28 ] | (StructKeyExists、StructDelete...) |
| システム | [ 29 ] | (GetTickCount、GetTempFile...) |
| XML | [ 30 ] | (XMLParse、GetSOAPResponseなど) |
ColdFusionコンポーネント(CFC)
CFCは、オブジェクト指向(OOP)言語が提供する一般的な機能の一部(すべてではありません)を提供します。CFCを作成するには:
- .CFC 拡張子を持つファイルを作成します (これにより、CFC は .CFM 拡張子を持つ ColdFusion テンプレートと区別されます)。
- 4 つのタグを使用してコンポーネントを作成し、その関数と引数を定義し、値を返します。
<cfcomponent>- CFCを定義します
<cffunction>- CFC内の関数(メソッド)を定義します
<cfargument>- 関数が受け入れる引数(パラメータ)を定義します
<cfreturn>- 関数から値または結果を返します
CFCはプレーンなCFMLです。CFC内では、任意のCFMLタグ、関数、カスタムタグ、その他のコンポーネントなどを使用できます。
CFCは様々な用途に使用できます。CFCに含まれるメソッドを呼び出すだけの場合、<cfinvoke>タグはCFCのインスタンスを作成し、目的のメソッドを呼び出し、その後CFCのインスタンスを破棄します。タグは、<cfinvoke>コンポーネント名(.cfc拡張子を除く)と実行するメソッドを受け取ります。返されたデータにアクセスするために、RETURNVARIABLE属性は、関数が返す値を格納する変数名を指定します。CFCは4つのタグを使用して作成され、.CFCファイルとして保存され、<cfinvoke>タグを使用して呼び出されます。[ 31 ]
以下の例では、コンポーネント temperature.cfc に、温度を華氏から摂氏に変換するメソッド FtoC があります。test.cfm テンプレートはこのメソッドを呼び出し、華氏 212 度を変換して結果を出力します。
<!--- temperature.cfc ---> <cfcomponent> <cffunction name = "FtoC" access = "public" returntype = "numeric" > <cfargument name = "fahrenheit" required = "yes" type = "numeric" / > <cfset answer = ( fahrenheit - 32 ) * 100 / 180 / > <cfreturn answer / > </cffunction> </cfcomponent> <!--- test.cfm ---> <cfset fDegrees = 212 / > <cfinvoke component = "temperature" method = "FtoC" returnvariable = "result" > < cfinvokeargument name = "fahrenheit" value = "#fDegrees#" /> </cfinvoke> <cfoutput> # fDegrees # ° F = # result # ° C </cfoutput> < br />CFCはオブジェクトとしてインスタンス化することもできます。Person.cfcというCFCファイルを想定すると、このCFCのインスタンスは次のようにインスタンス化されます。
<cfset person = CreateObject ( "コンポーネント" , "Person" ) / >CFCは、CFMLでWebサービスを作成するための基盤でもあります。CFCは通常の方法で作成され、CFC内の任意の関数に属性 access="remote" を追加すると、その関数をSOAPベースのWebサービスとして呼び出すことができるようになります。CFMLエンジンはWSDLを自動生成し、Webサービスが機能するために必要なすべてのスタブを作成します。
セキュリティアップデート
Adobeは、通常は特定された脆弱性に対応して、必要に応じてColdFusionのセキュリティパッチをリリースします。これらのアップデートは、任意のコード実行やセキュリティ機能のバイパスなどの重大な問題に対処します。例えば、2024年12月23日には、AdobeはColdFusion 2023および2021のアップデートをリリースし、任意のファイルシステムの読み取りにつながる可能性のある重大な脆弱性を解決しました。最新のセキュリティアップデートに関する最新情報を入手するには、Adobeの公式ColdFusionセキュリティ速報を定期的に確認する必要があります。さらに、Adobeのセキュリティ通知サービスに登録すると、新しいパッチや脆弱性に関するタイムリーなアラートを確実に受け取ることができます。これらのアップデートを迅速に実装することは、ColdFusionアプリケーションのセキュリティと整合性を維持するために不可欠です
参考資料
- ^ Adobe ColdFusion 8 – インターネットアプリケーションとWebアプリケーションサーバーについて。Wayback Machineに2012年5月13日にアーカイブ。Livedocs.adobe.com。2013年9月17日閲覧
- ^ Open BlueDragonマニュアル. Openbd.org. 2013年9月17日閲覧。
- ^スミス、マイケルColdFusion とは何ですか? fusionauthority.com
- ^タグアーカイブ2008年3月24日、 Wayback Machine
- ^ Open BlueDragon運営委員会インタビューシリーズ – アラン・ウィリアムソン. alan.blog-city.com
- ^ Railoについて。Getrailo.org。2013年9月17日閲覧。
- ^ http://corfield.org/entry/CFML_Advisory_Committee Archived 2009-01-07 at the Wayback Machine CFML Advisory Committee – An Architect's View. Corfield.org. 2013年7月21日閲覧。
- ^ Spitzer, Zac (2025年4月1日). 「CFCAMP 2025、5月22日&23日、ミュンヘン、ドイツ」 . 2025年4月22日閲覧。
- ^ 「Adobe ColdFusion Summit 2025」 . 2025年4月22日. 2025年4月22日閲覧。
- ^タグ構文 2008年5月27日アーカイブ、 Wayback Machine
- ^機能別タグArchived 2008-05-09 at the Wayback Machine . (PDF) 2013-09-17 に取得。
- ^ 「JSPタグとタグライブラリの使用」。JSPタグとタグライブラリの使用。2021年4月27日。2025年2月15日時点のオリジナルよりアーカイブ。2025年10月20日閲覧。
- ^配列関数Archived 2008-12-10 at the Wayback Machine . Livedocs.adobe.com. 2013-09-17 取得。
- ^変換関数Archived 2008-12-08 at the Wayback Machine . Livedocs.adobe.com. Retrieved on 2013-09-17.
- ^日付と時刻の関数(Wayback Machineで2008年12月2日にアーカイブ)。Livedocs.adobe.com。2013年9月17日閲覧。
- ^意思決定関数(Wayback Machineで2009年2月1日にアーカイブ)Livedocs.adobe.com。2013年9月17日閲覧。
- ^表示および書式設定関数(Wayback Machineで2008年12月20日にアーカイブ)。Livedocs.adobe.com。2013年9月17日閲覧。
- ^動的評価関数Archived 2008-12-07 at the Wayback Machine . Livedocs.adobe.com. Retrieved on 2013-09-17.
- ^拡張性Archived 2009-02-14 at the Wayback Machine . Livedocs.adobe.com. 2013-09-17 に取得。
- ^画像関数Archived 2009-01-31 at the Wayback Machine . Livedocs.adobe.com. 2013-09-17 に取得。
- ^国際化関数Archived 2009-02-08 at the Wayback Machine . Livedocs.adobe.com. 2013-09-17 取得。
- ^リスト関数Archived 2008-12-10 at the Wayback Machine . Livedocs.adobe.com. 2013-09-17 取得。
- ^数学関数Archived 2008-12-07 at the Wayback Machine . Livedocs.adobe.com. 2013-09-17 取得。
- ^その他の関数Archived 2009-01-30 at the Wayback Machine . Livedocs.adobe.com. Retrieved on 2013-09-17.
- ^クエリ関数Archived 2009-02-21 at the Wayback Machine . Livedocs.adobe.com. Retrieved on 2013-09-17.
- ^セキュリティ機能Archived 2008-12-05 at the Wayback Machine . Livedocs.adobe.com. Retrieved on 2013-09-17.
- ^文字列関数Archived 2009-01-29 at the Wayback Machine . Livedocs.adobe.com. Retrieved on 2013-09-17.
- ^構造関数Archived 2009-02-14 at the Wayback Machine . Livedocs.adobe.com. 2013-09-17 に取得。
- ^システム関数(Wayback Machineで2009年2月1日にアーカイブ)。Livedocs.adobe.com。2013年9月17日閲覧。
- ^ XML関数Archived 2009-02-20 at the Wayback Machine . Livedocs.adobe.com. 2013-09-17 取得。
- ^ Forta, Ben ColdFusion コンポーネントの使用. adobe.com