スクリプトベースのプログラミングに関する Tips

ColdFusionのプログラミングは、タグベースとスクリプトベースの二通りでの記述が可能です。

タグベースはHTML(HyperText Markup Language)の記述方法を利用したCF言語CFML(ColdFusion Markup Language)による、CFタグと関数を用いたプログラミングが行えます。

スクリプトベースはColdFusion 4.0から追加された記述方法で、何らかの開発言語を経験されている方を対象になじみやすいプログラミングが行えます。スクリプトベースは、誕生当初は機能が限られていましたが、ColdFusionのバージョンアップを重ねるごとに強化が行われてきました。

(スクリプト式に関する主な機能強化の流れ)
ColdFusion 4.0 … <cfscript>実装
ColdFusion 5 … ユーザー定義関数実装
ColdFusion 8 … 比較演算子(==、!=、>、< 、>=、<=)(→リンク
ColdFusion 9 … cfcomponentのスクリプト式、ループ形式の強化(→リンク
ColdFusion 10 … cfcの呼び出し(new cfcname、invoke)
ColdFusion 11 … CFタグのスクリプトベースへのサポート、メンバー関数
ColdFusion 2018 … 行末の;を省略可、CFC, Javaなどのインスタンス化、
次期ColdFusion(2020)… (予定)cfscript 2.0(ECMAScript準拠) (→リンク

特にColdFusion 11では、それまで限定された記述方法で一部CFタグのみ対応していたスクリプトベースでの実行が、すべてのColdFusionタグをスクリプトベースで実行することが可能となりました。これにより、従来では一つのページにタグベースの記述とスクリプトベースの記述が混在してしまうようなことがありましたが、今ではスクリプトベースのみでプログラミングできるようになっています。

(参考)タグおよび関数をサポートするスクリプト

現在の最新バージョンであるColdFusion 2018では、タグベースでもスクリプトベースでも同じ機能が提供されるようになっています。ただし、すべてのCFタグをそのままスクリプトで記述できるわけではなく、一部のCFタグは、旧来からの記述形式の対応や別の記述方法にて対応されているものがあります。それらに注意すべきCFタグについては下記のページに掲載されています。

CFScript でサポートされる機能

上記以外でも、例えばループ式や条件分岐などは、スクリプトベースの記述に関する情報がオンラインマニュアルなどに掲載されています。

(英語)Using CFScript statements
(日本語PDF)P.106~CFScript ステートメントの使用

また、<cfquery>に対応するQueryExecute関数など、一部はCFタグを補うための専用の関数が用意されています。

QueryExecute
https://cfdocs.org/queryexecute
QueryExecute関数 サンプル

一点注意すべき点としては、「CFCとして実装されるスクリプト関数」です。ColdFusion 9 で追加されたこの機能は、一部のタグ(<cfquery>や<cfhttp>など→リンク)をスクリプトベースで呼び出せるようにCFMLで記述されたCFCを提供していました(<cfquery>→query.cfc)。ColdFusion 11以降は、この機能を利用する必要が無くなったこと、および、ColdFusion 9で提供された後、特に機能の追加や改修もなく既に放置された状態であるため、使用すべきではありません。

Reminder - stop using the old CFC-based tags in ColdFusion 11
Query.cfc / queryExecute() have a good feature lacks

ColdFusion 2018からは、メーカーも「CFCとして実装されるスクリプト関数」を非推奨の機能としてリストしました。そのため、スクリプトベースで記述する際は、使用しないことを推奨します。

非推奨の機能
cfscriptのサポート(query およびstoredprocなどのスクリプトベースの CFC 用)。
Script Functions Implemented as CFCs
Note: In ColdFusion (2018 release), script functions implemented as CFCs are deprecated in ColdFusion.

その他、ユーザー定義関数(UDF)は、ColdFusion 5で実装された当初はスクリプトベースでのみの記述が可能だったこともあり、多くのUDFがスクリプトベースで作成され、下記のサイトなどで公開されています。

https://cflib.org/

それに対してCFコンポーネント(CFC)のスクリプト式のサポートはColdFusion 9まで行えませんでしたが、ColdFusion 11のCFタグのスクリプトベースで実行可能になったことも受け、タグベースと同様の機能をスクリプトベースでも提供することができます

タグベース(CFCをMS932(Shift_JIS)の文字コードで作成した場合)の例

<cfcomponent hint="サンプルコンポーネント" displayname="画面表示と値を戻すサンプル">
  <cfprocessingdirective pageencoding="MS932" >
    <cffunction name="method1" returntype="string" output="true" >
        <cfset message1="メソッド内にこのメッセージを表示する">
        <cfset message2="cfreturnでこのメッセージを呼び出し元に戻す">
        <cfoutput>#message1#</cfoutput>        
        <cfreturn message2>
    </cffunction>
</cfcomponent>

スクリプトベース(CFCをMS932(Shift_JIS)の文字コードで作成した場合)の例

component  hint="サンプルコンポーネント" displayname="画面表示と値を戻すサンプル" {
    pageencoding "MS932" ;
    public string function method1() { 
        message1="メソッド内にこのメッセージを表示する";
        message2="cfreturnでこのメッセージを呼び出し元に戻す";
        WriteOutput("#message1# ");
        return(message2); 
    } 
}

(参考)Defining components and functions in CFScript

 


記事公開日:2019年12月02日
最終更新日:2019年12月03日


x

Sample Modal Window

This is just a sample…

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent suscipit iaculis libero sed tristique. Quisque mollis dolor non tellus placerat vitae sodales lectus porta. Curabitur ut suscipit tellus. Maecenas rhoncus, ante vitae vehicula vestibulum, metus sapien dapibus tellus, et mattis dolor neque vitae nisl. Nullam eleifend ultrices ipsum eget pretium. Curabitur semper metus ut ante adipiscing nec volutpat sem rutrum. Nullam a nisi lacus, non interdum ante. Vivamus ante augue, commodo vel egestas sed, pharetra nec dui. Quisque sed tellus felis. Donec ipsum mauris, sagittis eu accumsan in, aliquam non ipsum.

Vestibulum tempor nunc nec felis scelerisque eget elementum erat dignissim. Ut vel ipsum mollis orci venenatis luctus. Aenean vehicula quam vel quam porttitor ac iaculis elit pulvinar. Proin consequat, ipsum eu venenatis semper, justo turpis posuere tortor, ac placerat metus nisl et lectus. Nulla cursus dui id nunc ullamcorper sed semper nisl lobortis. Aliquam erat volutpat. Phasellus arcu ante, imperdiet in ornare sed, laoreet eu massa.