Adobe ColdFusion は、 1995 年にJJ Allaireによって作成された商用高速 Web アプリケーション開発コンピューティング プラットフォームです。 [ 3 ] (このプラットフォームで使用されるプログラミング言語も一般的に ColdFusion と呼ばれていますが、より正確にはCFMLとして知られています。) ColdFusion は、当初はシンプルなHTMLページをデータベースに接続しやすくするために設計されました。バージョン 2 (1996 年) までに、完全なスクリプト言語に加えてIDEを含む完全なプラットフォームになりました。
ColdFusion の特徴の一つは、関連するスクリプト言語であるColdFusion Markup Language (CFML) です。CFML は、目的と機能においてASP、JSP、PHPのスクリプトコンポーネントに似ていますが、タグ構文はHTML に近く、スクリプト構文はJavaScriptに似ています。ColdFusionはCFMLと同義語として使われることが多いですが、ColdFusion 以外にもCFML アプリケーションサーバーが存在し、ColdFusion は CFML 以外のプログラミング言語もサポートしています。例えば、サーバーサイドActionScriptや、 CFScriptと呼ばれるJavaScriptに似た言語で記述できる埋め込みスクリプトなどです。
ColdFusionは元々 Allaire社の製品で、1995年7月2日にリリースされました。開発者はジョセフ・J・アレールとジェレミー・アレールの兄弟です。2001年にAllaire社はMacromedia社に買収され、その後Macromedia社は2005年にAdobe Systems Inc.に買収されました。
ColdFusionは、データ駆動型のWebサイトやイントラネットで最もよく使用されますが、 RESTサービス、WebSocket、SOAP Webサービス、Flashリモート処理などのリモートサービスを生成するためにも使用できます。特に、クライアント側のAjaxに対するサーバー側の技術として非常に適しています。
ColdFusionは、ColdFusion MX 7 Enterprise Editionで利用可能なゲートウェイインターフェースを介して、SMSやインスタントメッセージなどの非同期イベントも処理できます。
ColdFusionには、すぐに使える追加機能が多数搭載されています。主な機能は以下のとおりです。
<CFINVOKEWEBSERVICE="http://host/tempconf.cfc?wsdl"METHOD="Celsius2Fahrenheit"TEMP="#tempc#"RETURNVARIABLE="tempf">CFMLの他の実装では、 .NET環境での実行や画像処理など、同様の機能または強化された機能が提供されている。
このエンジンはC言語で記述されており、組み込みのスクリプト言語(CFScript)、Javaで記述されたプラグインモジュール、HTMLに非常によく似た構文などを備えていました。HTML要素に相当するColdFusionタグは、「CF」という文字で始まり、その後にタグがHTMLで何として解釈されるかを示す名前が続きます。例えば、変数やその他のコンテンツの出力を開始するには、<cfoutput>を使用します。
CFStudioは、CFScriptとプラグイン(前述のとおり)に加えて、WYSIWYG表示を備えたデザインプラットフォームを提供しました。ColdFusionに加えて、CFStudioはPerlなど、バックエンドプログラミングでよく使われる他の言語の構文もサポートしています。非プログラマーでもバックエンド機能を簡単に利用できるようにしたことに加え、(特にバージョン4.0以降は)Apache Webサーバーやインターネット情報サービスと簡単に統合できました。
ColdFusionのバージョン6.0より前のすべてのバージョンは、Microsoft Visual C++を使用して記述されていました。そのため、ColdFusionは基本的にMicrosoft Windows上でしか動作しませんでしたが、Allaireはバージョン3.1以降、 ColdFusionをSun Solarisに移植することに成功しました。
Allaire社はMacromedia社に買収され、その後Macromedia社はAdobe社に買収された。以前のバージョンは、バージョン4.0以降で利用可能なバージョンほど堅牢ではなかった。
ColdFusion MX 6.0のリリースに伴い、エンジンはJavaで書き直され、独自のランタイム環境をサポートするようになりました。このランタイム環境は、設定オプションを通じてSun社のランタイム環境に簡単に置き換えることができました。バージョン6.1では、 Macromedia Flashのコーディングとデバッグ機能が追加されました。
1997年6月にリリースされたバージョン3では、カスタムタグ、Verity検索エンジンに基づくcfsearch/cfindex/cfcollection、サーバースコープ、およびテンプレートエンコーディング(当時は「暗号化」と呼ばれていた)が導入されました。1998年1月にリリースされたバージョン3.1では、RDSのサポートとSun Solarisオペレーティングシステムへの移植が追加され、ColdFusion StudioにはライブページプレビューとHTML構文チェッカーが追加されました。
1998年11月にリリースされたバージョン4では、名称が「Cold Fusion」から「ColdFusion」に変更されました。これはおそらく、冷融合理論と区別するためでしょう。このリリースでは、cfscriptの初期実装、ロック(cflock)、トランザクション(cftransaction)、階層型例外処理(cftry/cfcatch)、サンドボックスセキュリティのサポートに加え、cfstoredproc、cfcache、cfswitchなど、多くの新しいタグと関数が追加されました。
1999年11月にリリースされたバージョン4.5では、COMやCORBAなどの外部システムリソースへのアクセス機能が拡張され、Java統合(EJB、POJO、サーブレット、Java CFXなど)の初期サポートが追加されました。また、パフォーマンス情報にアクセスするためのgetmetricdata関数、ページデバッグ出力におけるパフォーマンス情報の追加、文字列変換機能の強化、およびオプションの空白文字削除機能も追加されました。
バージョン5は2001年6月にリリースされ、クエリサポートの強化、新しいレポート機能とグラフ作成機能、ユーザー定義関数、および管理ツールの改善が加えられました。これは特定のプラットフォーム向けにレガシーコードで作成された最後のバージョンであり、 2001年1月16日に発表されたマクロメディアによるアレール・コーポレーション買収後、最初のリリースとなりました。
2000年以前、JRun、そして後にFlash PlayerのAllaireアーキテクトであったエドウィン・スミス、トム・ハーウッド、クレメント・ウォンは、「Neo」というコードネームのプロジェクトを開始しました。[ 6 ]このプロジェクトは後に、 Javaを使用して完全に書き直されたColdFusionサーバーであることが明らかになりました。これにより移植性が向上し、Javaランタイム環境内で実行されるため、サーバーにセキュリティ層が提供されました。
2002年6月、マクロメディアはバージョン6.0をColdFusion MXという若干異なる名称でリリースしました。これにより、マクロメディアブランドと元のブランドの両方に関連付けられるようになりました。ColdFusion MXは完全にゼロから再構築され、Java EEプラットフォームをベースとしていました。また、ColdFusion MXはFlash Remotingを使用してマクロメディアFlashとスムーズに統合できるように設計されていました。
ColdFusion MXのリリースに伴い、CFML言語APIがオブジェクト指向プログラミング(OOP)インターフェースを備えてリリースされました。
2005年2月7日にColdFusion 7.0がリリースされた際、命名規則が変更され、製品名は「Macromedia ColdFusion MX 7」(CFMX7のコードネームは「Blackstone」)となりました。CFMX 7では、FlashベースおよびXFormsベースのWebフォーム、 Adobe PDF、FlashPaper、RTF、Excel形式で出力できるレポートビルダーが追加されました。Adobe PDF出力は、任意のHTMLページのラッパーとしても利用でき、そのページを高品質の印刷可能なドキュメントに変換します。エンタープライズ版では、ゲートウェイも追加されました。ゲートウェイは、IMサービス、SMS、ディレクトリウォッチャー、非同期実行など、HTTP以外のリクエストサービスとの連携を可能にします。このバージョンでは、XMLサポートが強化され、ネイティブスキーマチェックが含まれるようになりました。
ColdFusion MX 7.0.1(コードネーム「Merrimack」)では、 Mac OS Xのサポート、Flashフォームの改善、CFReportのRTFサポート、Java/CFC統合のための新しいCFCPRoxy機能などが追加されました。ColdFusion MX 7.0.2(コードネーム「Mystic」)では、Adobe Flex 2との連携を強化する高度な機能に加え、CF Report Builderのさらなる改善が盛り込まれています。
2007 年 7 月 30 日、Adobe Systems はColdFusion 8をリリースし、その名前から「MX」を削除しました。[ 7 ]ベータ テスト中は「Scorpio」(黄道十二宮の 8 番目の星座であり、商用製品としての ColdFusion の 8 番目のバージョン)というコードネームが使用されました。ベータ プロセスには、世界中で 14,000 人以上の開発者が参加しました。これは、Adobe Systems が当初想定していた 5,000 人をはるかに上回るテスター数です。ColdFusion の開発チームは、マサチューセッツ州ニュートン/ボストンとインドのバンガロールのオフショアに拠点を置く開発者で構成されていました。
新機能には、Adobe Acrobatフォームとの統合を可能にする CFPDFFORM タグ、いくつかの画像操作機能、Microsoft .NET との統合、および、以前はMacromedia Breezeとして知られていた Web ベースのコラボレーション ソリューションであるAdobe Acrobat Connectを使用して動的なプレゼンテーションを作成できる CFPRESENTATION タグなどがあります。さらに、エンタープライズ版の ColdFusion Administrator には、サーバー監視機能が組み込まれています。ColdFusion 8 は、Linux、Mac OS X、Windows Server 2003など、複数のオペレーティングシステムで利用可能です。
ColdFusion 8 のその他の追加機能としては、組み込みのAjaxウィジェット、ファイル アーカイブ操作 (CFZIP)、Microsoft Exchange サーバーとの統合 (CFEXCHANGE)、自動CAPTCHA生成を含む画像操作 (CFIMAGE)、マルチスレッド処理、アプリケーションごとの設定、AtomおよびRSSフィード、レポート機能の強化、より強力な暗号化ライブラリ、配列および構造の改善、データベースとの連携の改善、パフォーマンスの大幅な向上、PDF 操作およびマージ機能 (CFPDF)、対話型デバッグ、 Apache Derbyを使用した組み込みデータベースのサポート、およびECMAScriptに準拠した CFSCRIPT などがあります。
ColdFusionアプリケーションの開発には、Adobe Dreamweaver CS4、Macromedia HomeSite 5.x、CFEclipse、Eclipseなど、いくつかのツールが利用可能です。これらのアプリケーションには、ColdFusion 8の新機能への対応を更新するための「タグアップデーター」が用意されています。
ColdFusion 9(コードネーム:Centaur)は2009年10月5日にリリースされました。CF9の新機能は以下のとおりです。
ColdFusion 10(コードネーム:Zeus)は2012年5月15日にリリースされました。Standard、Enterprise、Developerの全エディションで利用可能な新機能または改良機能には、以下が含まれます(ただし、これらに限定されません)。
ColdFusion Enterprise版またはDeveloper版における、追加の新機能または改良機能には、以下が含まれます(ただし、これらに限定されません)。
上記のリストは、Adobeのウェブサイトに掲載されている「新機能」に関するページから取得したもので、以下のリストのリンクの最初に記載されています。
CF10 は、 Adobe MAX 2010で Adobe が初めて発表した後、リリース前の期間の大半は、コードネーム Zeus と呼ばれていました。また、Adobe が最終的に「ColdFusion 10」と発表するまでは、ブログや Twitter などで「ColdFusion next」や「ColdFusion X」と呼ばれることもよくありました。2010 年の大半、ColdFusion プロダクト マネージャーの Adam Lehman は、米国を巡り、顧客、開発者、ユーザー グループと無数のミーティングを設定して、次の機能セットのマスター ブループリントを作成しました。2010 年 9 月、彼は Adobe に計画を提示し、上層部から全面的な支持と承認を得ました。[ 8 ]
ColdFusion 10の最初のパブリックベータ版は、2012年2月17日にAdobe Labsを通じてリリースされました。
ColdFusion 11(コードネーム:Splendor)は2014年4月29日にリリースされました。
すべてのエディション(Standard、Enterprise、Developer)で利用可能な新機能または改良機能は以下のとおりです。
ColdFusion 11では、以前のリリースで「非推奨」またはサポート対象外とされていた多くの機能が削除されました。たとえば、CFLOGタグには長らく日付と時刻の属性がありましたが、これらは非推奨(日付と時刻は常にログに記録されるため冗長)でした。CF11以降では、これらの属性を使用してもCFLOGタグがエラーになることはありません。
Adobe ColdFusion(2016年リリース)、コードネーム:Raijin(一般的にはColdFusion 2016としても知られる)は、2016年2月16日にリリースされました。
すべてのエディション(Standard、Enterprise、Developer)で利用可能な新機能または改良機能は以下のとおりです。
Adobe ColdFusion (2018 リリース) は、一般的に ColdFusion 2018 として知られており、2018 年 7 月 12 日にリリースされました。[ 9 ] ColdFusion 2018 は、リリース前の段階では Aether というコードネームが付けられていました。[ 10 ]
2023年3月時点で、AdobeはColdFusion 2018向けに16のアップデートをリリースしました[ 11 ] 。
すべてのエディション(Standard、Enterprise、Developer)で利用できる新機能または改良された機能は次のとおりです。[ 12 ]
Adobe ColdFusion(2021年版)は2020年11月11日にリリースされました。ColdFusion 2021は、リリース前の段階では「Project Stratus」というコードネームで呼ばれていました。
すべてのエディション(Standard、Enterprise、Developer)で利用可能な新機能または改良機能は以下のとおりです。
Adobeは2023年5月17日にColdFusion 2023をリリースした。ColdFusion 2023は、リリース前の段階ではProject Fortunaというコードネームで呼ばれていた。
利用可能な新機能は以下のとおりです。[ 13 ]
Adobeは2025年2月25日にColdFusion 2025をリリースしました。ColdFusion 2025は、リリース前の段階では単に「cfnext」と呼ばれていました。
2017 年 9 月、Adobe は 2018 年と 2020 年のリリースを見据えたロードマップを発表しました。[ 14 ] 2016 年リリースで期待される主な機能には、新しいパフォーマンス モニター、非同期プログラミングの強化、REST サポートの刷新、API マネージャーの強化、および 2024 年まで予定されている CF2016 のサポートなどがありました。2020 年リリースに関しては、当時 (2017 年) に期待されていた機能は、CF アプリケーション サービスの構成可能性 (モジュール性)、スクリプトとオブジェクト指向のサポートの刷新、および API マネージャーのさらなる強化でした。
ColdFusion は標準 HTML を使用してPDFドキュメントを生成できます(つまり、印刷用のドキュメントを生成するために追加のコーディングは必要ありません)。CFML 作成者は、cfdocument タグ (または ColdFusion 11 で新しく追加された cfhtmltopdf タグ) のペア内に HTML と CSS を配置します。生成されたドキュメントは、ディスクに保存するか、クライアントのブラウザーに送信できます。ColdFusion 8 では、PDF フォームや PDF のマージを含む PDF ドキュメントを制御できるように cfpdf タグも導入されました。ただし、これらのタグは Adobe の PDF エンジンを使用しませんが、cfdocument は商用の JPedal Java PDF ライブラリと無料のオープンソース Java ライブラリiTextの組み合わせを使用します。cfhtmltopdf が cf11 以降で使用しているライブラリは、組み込みのWebKit実装です。[ 15 ] cf2023 以降、Adobe は PDFReactor を cfhtmltopdf の基盤となるデフォルトのエンジンとしてライセンス供与しています。
ColdFusion は元々、PHPバージョン 3 以前のようなオブジェクト指向プログラミング言語ではありませんでした。ColdFusion は、多重継承をサポートしない OO 言語のカテゴリに属します(Java、Smalltalk などと同様)。[ 16 ] MX リリース (6 以降) で、ColdFusion は、OO 言語のクラスに似たコンポーネント言語構造で基本的な OO 機能を導入しました。各コンポーネントは、任意の数のプロパティとメソッドを持つことができます。また、1 つのコンポーネントが別のコンポーネントを継承することもできます (継承)。コンポーネントは単一継承のみをサポートします。オブジェクト処理機能セットとパフォーマンスの向上は、その後のリリースで実現しました。ColdFusion 8 のリリースで、Java スタイルのインターフェースがサポートされました。ColdFusion コンポーネントは、ColdFusion テンプレート (.cfm) と区別するために、ファイル拡張子cfc を使用します。
コンポーネントのメソッドは、追加のコーディングや設定なしにWebサービスとして利用できます。必要なのは、メソッドのアクセスを「リモート」と宣言することだけです。ColdFusionは、コンポーネントのURL(http://path/to/components/Component.cfc?wsdl )にWSDLを自動的に生成します。SOAP以外にも、Flash Remotingバイナリ形式でサービスが提供されます。
リモートとして宣言されたメソッドは、HTTP GET または POST リクエストを介して呼び出すこともできます。以下に示す GET リクエストを考えてみましょう。
http://path/to/components/Component.cfc?method=search&query=your+query&mode=strictこれにより、コンポーネントの検索機能が呼び出され、「your query」と「strict」が引数として渡されます。
このタイプの呼び出しは、 Ajax対応アプリケーションに最適です。ColdFusion 8では、ColdFusionのデータ構造をJSONにシリアル化してクライアント側で利用できるようにする機能が導入されました。
ColdFusionサーバーは、コンポーネントのURLにアクセスし、コンポーネントの宣言内に適切なコードを挿入すると、コンポーネントのドキュメントを自動的に生成します。これは、ColdFusionコンポーネントの開発者が利用できるコンポーネントイントロスペクションの応用例です。コンポーネントのドキュメントにアクセスするにはパスワードが必要です。開発者は、ColdFusionのURLにアクセスすることで、ColdFusionサーバーが認識しているすべてのコンポーネントのドキュメントを表示できます。このインターフェースは、JavaクラスのJavadoc HTMLドキュメントに似ています。
ColdFusionには、コア言語に含まれていないカスタムマークアップ言語タグを実装するための複数の方法が用意されています。これらは、HTMLには精通しているものの命令型プログラミングには不慣れなWebデザイナーやコンテンツ作成者にとって、使い慣れたインターフェースを提供する上で特に役立ちます。
従来から最も一般的な方法は、CFML を使用することです。標準の CFML ページはタグとして解釈でき、タグ名はファイル名に「cf_」を接頭辞として付けたものに対応します。たとえば、ファイル IMAP.cfm は「cf_imap」というタグとして使用できます。タグ内で使用される属性は、タグ実装ページの ATTRIBUTES スコープで使用できます。CFML ページは、呼び出し元のページと同じディレクトリ、ColdFusion Web アプリケーション内の特別なディレクトリ、または呼び出し元のページの CFIMPORT タグを介してアクセスできます。後者の方法では、タグ名に必ずしも「cf_」接頭辞は必要ありません。
2つ目の方法は、JavaまたはC++を使用してCFXタグを開発することです。CFXタグには「cfx_」という接頭辞が付きます(例:「cfx_imap」)。タグは、ColdFusion管理者を使用してColdFusionランタイム環境に追加され、JARファイルまたはDLLファイルがカスタムタグとして登録されます。
最後に、ColdFusionはJSP 2.0言語仕様に基づくJSPタグライブラリをサポートしています。JSPタグはCFIMPORTタグを使用してCFMLページに組み込まれます。
ColdFusionの標準インストールでは、ColdFusionをWARファイルまたはEARファイルとしてデプロイし、 Macromedia JRunやIBM WebSphereなどのスタンドアロンアプリケーションサーバーに展開できます。ColdFusionはApache TomcatやMortbay Jettyなどのサーブレットコンテナにもデプロイできますが、これらのプラットフォームはColdFusionを公式にサポートしていないため、多くの機能が利用できません。ColdFusion 10以降、Macromedia JRunはApache Tomcatに置き換えられました。
ColdFusionはJava EEアプリケーションであるため、ColdFusionコードはJavaクラスと混在させてさまざまなアプリケーションを作成したり、既存のJavaライブラリを使用したりすることができます。ColdFusionはすべての基盤となるJavaクラスにアクセスでき、JSPカスタムタグライブラリをサポートし、JSPページコンテキスト(GetPageContext())を取得した後でJSP関数にアクセスできます。
ColdFusion 7.0.1 より前は、ColdFusion コンポーネントは Web サービスとして宣言することによってのみ Java または .NET から使用できました。しかし、ColdFusion MX 7.0.1 以降では、CFCProxy クラスを使用して ColdFusion コンポーネントを Java クラス内で直接使用できるようになりました。[ 17 ]
近年、 Jython、Groovy、JRubyといった代替言語を用いたJava開発への関心が高まっている。ColdFusionは、こうしたスタイルのJava開発を可能にした最初のスクリプトプラットフォームの一つである。
ColdFusion 8 は、 CFML 構文内で.NET をネイティブにサポートしています。ColdFusion 開発者は、アセンブリを再コンパイルしたり変更したりすることなく、任意の .NET アセンブリを呼び出すことができます。データ型は ColdFusion と .NET 間で自動的に変換されます (例: .NET DataTable → ColdFusion Query)。
Java EEベンダーとしては他に類を見ない機能として、ColdFusion 8はプロキシ経由で( .NET Remotingを使用せずに).NETアセンブリにリモートアクセスできる機能を提供します。これにより、ColdFusionユーザーはWindowsオペレーティングシステムにインストールすることなく.NETを活用できます。
ColdFusion Markup Language の頭文字は CFML です 。ColdFusionテンプレートをディスクに保存する場合、通常は拡張子 .cfm または .cfml が付けられます。.cfc 拡張子は ColdFusion コンポーネントに使用されます。元の拡張子は DBM または DBML で、Database Markup Language の略でした。ColdFusion について話すとき、ほとんどのユーザーは CF という頭字語を使用しており、これはユーザー グループ (CFUG) やサイトなど、多くの ColdFusion リソースに使用されています。
CFMXは、ColdFusionバージョン6および7(別名ColdFusion MX)の一般的な略称です。
ColdFusionは、Webテクノロジー業界の標準に基づいた独自技術として誕生しました。しかし、競合製品の登場により、よりオープンな技術へと変化しつつあります。こうした代替製品には以下のようなものがあります 。
これらは販売終了または縮小されています 。
ColdFusionは、.NETアプリケーションサーバー(New Atlanta)上、あるいは任意のサーブレットコンテナやJava EEアプリケーションサーバー(JRun、WebSphere、JBoss、Geronimo、Tomcat、Resin Server、Jetty(Webサーバー)など)上で動作するため、Java EEや.NETよりもプラットフォームの制約が少ないと言えるでしょう。理論的には、ColdFusionアプリケーションはJava EEアプリケーションサーバーから.NETアプリケーションサーバーへ変更せずに移行できます。
2013年3月、ColdFusion 8、9、10に影響を与える既知の問題により、国家脆弱性データベースが攻撃に対して脆弱な状態になった。[ 18 ]この脆弱性は特定され、Adobeは1月にCF9とCF10用のパッチをリリースした。[ 19 ]
2013年4月、 LinodeはColdFusionの脆弱性がLinode ManagerコントロールパネルWebサイトへの侵入の原因であると非難した。[ 20 ] Adobeはこの1週間前にこれに対するセキュリティ速報とホットフィックスを発行していた。[ 21 ]
2013 年 5 月、Adobe は、Web ベースの管理者と API がロックダウンされていないサーバー上の ColdFusion の最新バージョンすべてを標的とする、すでに悪用されていると報告されている別の重大な脆弱性を特定しました。この脆弱性により、権限のないユーザーが悪意のあるスクリプトをアップロードし、サーバーを完全に制御できるようになる可能性があります。[ 22 ] Adobe は 6 日後にこの脆弱性に対するセキュリティ速報とホットフィックスを発行しました。[ 23 ]
2015 年 4 月、Adobe は、 Adobe ColdFusion 10 の Update 16 より前、および ColdFusion 11 の Update 5 より前のバージョンで、リモート攻撃者が任意の Web スクリプトまたは HTML を挿入できるクロスサイトスクリプティング(XSS) の脆弱性[ 24 ] を修正しました。[ 25 ]ただし、この脆弱性は管理パネルを通じて認証されたユーザーのみが悪用できます。 [ 26 ]
2019年9月、Adobeは任意のコードの実行を可能にする2つのコマンドインジェクションの脆弱性(CVE-2019-8073 [ 27 ])とアレイウェイトラバーサル(CVE-2019-8074 [ 28 ])を修正しました。
{{cite web}}: CS1メンテナンス: アーカイブサービスは非推奨になりました (リンク)