ColdFusion とは

ColdFusion はダイナミック Web アプリケーションサーバーであり、Java 上で動作する Rapid Application Development(RAD)ツールキットです。このドキュメントでは、ColdFusion(2018 リリース)の概要について説明します。ColdFusion のインストールから、サーバーへのアプリケーションのデプロイまで、様々な側面について説明します。

ColdFusion インストール

お使いのシステムの構成に応じて、32 ビットまたは 64 ビットのサーバーをダウンロードします。ダウンロードサイトから無償体験版をダウンロードできます。

インストールするときに、2 つのインストールオプションが表示されます。

  1. サーバー設定のインストール:ColdFusion サーバー設定には、Tomcat が含まれています。サーバー設定をインストールするには、サーバー設定のインストールの手順に従います。
  2. JEE 設定のインストール:ColdFusion を、標準ベースの Java Enterprise Edition アプリケーションサーバー上で動作する Java アプリケーションとしてデプロイします。JEE 設定をインストールするには、JEE 設定のインストールの手順に従います。

サーバーおよび OS に応じた設定については、ColdFusion サポート一覧を参照してください。

古いバージョンの ColdFusion から ColdFusion(2018 リリース)に移行する場合は、移行ガイドを参照してください。

ColdFusion Administrator の起動

ColdFusion をインストールした後、ColdFusion Administrator にログインして、インストールが正常におこなわれていることを確認します。

ColdFusion Administrator は、ColdFusion サーバーの様々な設定を一元的におこなえるインターフェイスです。メール、データベース接続、デバッグオプション、セキュリティなどの設定をすることができます。

ColdFusion Administrator ログインページのデフォルトの場所は http://servername:8500/CFIDE/administrator/index.cfm です。ここで、servername はホストマシンの完全修飾ドメイン名です。通常、servername は、ローカルコンピューターの Web サーバーを指す localhost または 127.0.0.1 です。

サーバー設定のデフォルトのポート番号は 8500 です。ポートが使用されている場合は、次に利用できるポート番号が使用されます。

詳しくは、ColdFusion 設定と管理を参照してください。

ColdFusion Builder

ColdFusion Builder は、ColdFusion エンタープライズ版またはスタンダード版サーバーを使用する CFML ベースのプロジェクトまたはアプリケーションを開発するための IDE です。ColdFusion Builder は Eclipse を基盤にしているので、他の Eclipse プラグインと容易に連携できます。

他の IDE と同様、ColdFusion Builder にはコードエディター、コンパイラー、デバッガー、コードアシストが備わっています。

ColdFusion Builder について詳しくは、ColdFusion Builder の概要を参照してください。

ColdFusion の基礎

シンタックス

ColdFusion Markup Language(CFML)には、タグベースとスクリプトベースという 2 種類の記述方法があります。以下に例を挙げます。

タグベース スクリプトベース

<cfset greeting="Hello World!">
<cfoutput>#greeting#</cfoutput>

<cfscript>
         greeting="Hello World!";

          WriteOutput(greeting);
</cfscript>
 

変数

ColdFusion は、型付けの弱い言語です。同じ変数を複数のデータ型として利用できます。以下に例を挙げます。

x=1;

変数 x は、以下のように数値型として機能します。

myNum=x^2;

さらに、以下のように文字列型としても機能できます。

myString=len(x);

ColdFusion の変数は、型によって次の 2 種類に分類されます。

  1. 単純:単純変数には、文字列、数値、ブール値、日付時刻などがあります。
  2. 複合:複合変数には、構造体、配列、クエリー、イメージなどがあります。

文字列

ColdFusion における文字列とは、引用符(' または ")で始まり、0 文字以上の文字、数字、記号が続き、最後にもう 1 つの引用符(' または ")で終わる値です。以下に例を挙げます。

myString="Hello";

myString1="Welcome to ColdFusion.";

myString2="a123";

CFML には、文字列の操作や表示をおこなう文字列関数があります。文字列関数の一覧については、文字列関数を参照してください。

例えば、len関数は以下のように使用します。

<cfscript>
       myString="That's one small step for man, one giant leap for mankind.";
       myStringLen=Len(myString);
       WriteOutput(myStringLen);
</cfscript>

出力は 58 となります。これは、入力文字列の長さ(スペースを含む)を示しています。

配列

ColdFusion での配列の作成方法には、明示的な方法と暗黙的な方法の 2 通りがあります。明示的な方法では、関数を使用して配列を宣言し、それにデータを代入します。暗黙的な方法では、代入ステートメントを使用します。単純な配列も複雑な(多次元の)配列も作成できます。

文字列、数値、オブジェクトの配列を宣言できます。以下に例を挙げます。

myArray=[1,2,3,4,5];

myArray1=["ab","bc","cd","de"];

配列を作成するには、まず ArrayNew 関数を使用して配列オブジェクトを作成します。以下に例を挙げます。

<cfscript>

   myArray = [];

   myArray=[0,1,1,2,3,5,8,13,21];

</cfscript>

この例では、1 次元配列の配列オブジェクトを作成し、配列にフィボナッチ数列を入力しています。

CFML の配列関数の一覧については、配列関数を参照してください。

リスト

ColdFusion におけるリストとは、区切り文字を含む文字列です。リスト内の各項目を、区切り文字で区切ります。以下に例を挙げます。

myList="a,b,c,d,e";

文字列の最後の要素を取得するには、以下のように ListLast 関数を使用します。

<cfscript>

       myList="Tokyo,Bangkok,Jakarta,Manila,Bangalore,Shanghai";

       WriteOutput(ListLast(myList)); // リスト内の最後の要素である Shanghai を出力

</cfscript>

ColdFusion のリスト関数の一覧については、リスト関数を参照してください。

メンバー関数を使用して、上記の例を以下のように書き換えることができます。

<cfscript>

        myList="Tokyo,Bangkok,Jakarta,Manila,Bangalore,Shanghai";

        WriteOutput(myList.listLast()); // リスト内の最後の要素である Shanghai を出力

</cfscript>

ColdFusion のメンバー関数の一覧については、メンバー関数を参照してください。

構造体

構造体とは、キーと値のペアを格納するデータ構造です。Java における HashMap に似ています。

データを格納するには、まず構造体オブジェクトを作成します。以下に例を挙げます。

myStruct={};

構造体にデータを入力するには、myStruct.key1="value1" のように記述します。

以下に例を挙げます。

<cfscript>

       myStruct={};
       myStruct.key1="John"; // Using dot notation
       myStruct["key2"]="Paul"; // Using associative array notation
       WriteOutput(myStruct.key1 & "<br/>"); // John
       WriteOutput(myStruct.key2); // Paul

</cfscript>

リテラル構文を使用すると、以下のようになります。

<cfscript>

       myStructLiteral={};
       myStructLiteral={key1="one",key2="two"}; // Using literal syntax
       WriteOutput(mystructLiteral.key1 & "<br/>"); // one
       WriteOutput(mystructLiteral.key2); // two

</cfscript>

詳しくは、ColdFusion での構造体の作成と使用を参照してください。

ColdFusion におけるループ

一連のデータを反復処理し、条件に基づいて値を返すことができます。以下に例を挙げます。

for (initialization;condition;iteration){

     // ステートメント

}

以下に例を挙げます。

<cfscript>

     for (i=1;i <=10; i++) {
     myResult=i^2;
     WriteOutput(myResult);
    }

</cfscript>

前条件のループ

前条件のループでは、ステートメントの先頭で条件を評価し、条件が true である間はループ処理を繰り返します。

while (condition) {

     // ステートメント

}

以下に例を挙げます。

<cfscript>
       x = 0;
       while (x < 10) {
             x++;
             WriteOutput(x & " "); // 1 2 3 4 5 6 7 8 9 10
       }
</cfscript>

後条件のループ

後条件のループでは、do {} で囲まれたステートメントが条件に関係なく必ず一度は実行されます。

do {

     // ステートメント

} while (condition);

以下に例を挙げます。

<cfscript>
       x = 0;
       do {
              x++;
               WriteOutput(x & " "); // 1 2 3 4 5 6 7 8 9 10
             } while (x < 10); 
</cfscript>

配列のループ

配列内の各要素に対して反復処理を実行できます。以下に例を挙げます。

for (element in [1,2,3,4,5]){

    WriteOutput(element); // 12345 を出力

}

構造体のループ

各構造体メンバーに対して反復処理をおこない、構造体の操作を適用できます。以下に例を挙げます。

myStruct={a=1,b=2,c=3,d=4,e=5};

for (key in myStruct){

     WriteOutput(#key# & ":" & #myStruct[key]#); // a:1 b:2... を出力

}

リストのループ

リスト内の各要素に対して反復処理を実行できます。以下に例を挙げます。

myList="a,b,c,d,e";

for (element in myList){

     WriteOutput(element); // abcde を出力

}

ColdFusion のデータ処理

データベース内のレコードセットを処理することは、ColdFusion の重要な要素です。ColdFusion には、MS SQL、MySQL、Oracle、Derby、Postgres など様々なデータベースのサポートが組み込まれています。

<cfquery> を使用すると、データソースを使用して SQL ステートメントを呼び出すことができます。データソースとは、データベースとの通信に使用する設定のコレクションです。具体的にはデータベースタイプ、サーバー、ポート、テーブルスペース、データベース、ユーザー名、パスワードなどの情報が含まれます。

以下に例を挙げます。

<cfquery name="myQuery" datasource="cfdocexamples">
       SELECT FIRSTNAME,LASTNAME 
       FROM EMPLOYEE
       WHERE SALARY>50000 AND CONTRACT='Y'
</cfquery>
<cfdump var="#myQuery#" >

cfscript 内で QueryExecute を使用して、テーブルに対してクエリーを実行することもできます。以下に例を挙げます。

<cfscript>

     myResult=QueryExecute("SELECT FIRSTNAME,LASTNAME FROM EMPLOYEES WHERE DEPARTMENT='Sales' AND LOCATION in (?,?)",["Newton","San Francisco"],

     {datasource="cfdocexamples"});

     WriteDump(myResult);

</cfscript>

クエリー関数の一覧については、クエリー関数を参照してください。

クエリーのループ

レコードセットの内容に対して反復処理を実行し、内容を表示できます。以下に例を挙げます。

<cfscript>

     myQuery = queryNew("id,value", "integer,varchar",[

    [1, "East"],

    [2, "West"],

    [3, "North"],

    [4,"South"]

]);

 for (row in myQuery){
 WriteOutput(row.id & ":" & row.value);  // Outputs 1:East;2:West;3:North;4:South;

 }

</cfscript>

Application.cfc

Application.cfcは、アプリケーション全体に共通する設定を定義するために使用されます。Application.cfc では、アプリケーションレベルの変数とイベントハンドラー(様々なアプリケーションライフサイクルイベントが発生したときに呼び出される関数)を定義します。

ColdFusion アプリケーションには、様々なライフサイクルイベントがあります。イベントについて詳しくは、Application.cfc リファレンスを参照してください。

以下に例を挙げます。

component {

    this.name = "AppName";

    this.datasource = "AppDataSource";

    this.sessionManagement = true;

}

ColdFusion ORM

ColdFusion オブジェクトリレーショナルマッピング(ORM)では、CFC を使用してデータベースにアクセスし、操作できます。ORM は、Hibernate を基盤として作成されています。ORM を使用すると、オブジェクト指向アプリケーションを構築できます。これにより、データベースに対する CRUD 操作にわずらわされずに、ビジネスレイヤーの構築に注力することが可能になります。ORM によって、自動的に SQL ステートメントが生成され、CRUD メソッドが定義されます。

以下のように Application.cfc を更新します。

component{

     this.name="artgallery";

     this.ormEnabled=true;

     this.datasource="cfartgallery";

}

CFC の ORM 関連の設定の一覧については、こちらを参照してください。

次に、以下のようにオブジェクトをデータベースにマッピングし、永続化を定義します。

component persistent="true"{

     property name="artistid" generator="increment";

     property firstname;

     property lastname;

}

以下のように、アーティストを姓名とともに一覧表示する ColdFusion ページを作成します。

<cfscript>

     myArtists=EntityLoad("Artists");

     WriteDump(myArtists);

</cfscript>

詳しくは、ColdFusion における ORM を参照してください。

ColdFusion におけるオブジェクト指向の概念

ColdFusion におけるオブジェクト指向プログラミングは、ColdFusion コンポーネント(CFC)に基づいています。コンポーネントとは、データと、そのデータを操作するメソッドをカプセル化したものです。コンポーネントは、Java の「クラス」に相当します。

CFC は以下の要素で構成されます。

  • データ(データを含む変数)
  • データを操作するメソッド

CFC を使用すると、以下のことができます。

  • メソッド間でのプロパティおよび変数の共有
  • 他の CFC で定義されたメソッドとの間でのプロパティの共有
  • メソッドおよびプロパティの継承

以下の例では、文字列「Hello World!」を表示する CFC(greetingsobjectFile.cfc)を作成します。

component greetings {
       function helloWorld(){
             var myGreeting="Hello World!";
             return myGreeting;
       }
}

以下の例では、helloWorld メソッドを呼び出して適切な結果を表示するオブジェクト greet を作成します。

<cfset greet=new greetings()>
<cfoutput>#greet.helloWorld()#</cfoutput>

本作品は Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License によってライセンス許可を受けています。  Twitter™ および Facebook の投稿には、Creative Commons の規約内容は適用されません。

法律上の注意   |   プライバシーポリシー