タグベース
ColdFusion とは
ColdFusion はダイナミック Web アプリケーションサーバーであり、Java 上で動作する Rapid Application Development(RAD)ツールキットです。このドキュメントでは、ColdFusion(2018 リリース)の概要について説明します。ColdFusion のインストールから、サーバーへのアプリケーションのデプロイまで、様々な側面について説明します。
ColdFusion インストール
お使いのシステムの構成に応じて、32 ビットまたは 64 ビットのサーバーをダウンロードします。ダウンロードサイトから無償体験版をダウンロードできます。
インストールするときに、2 つのインストールオプションが表示されます。
- サーバー設定のインストール:ColdFusion サーバー設定には、Tomcat が含まれています。サーバー設定をインストールするには、サーバー設定のインストールの手順に従います。
- 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!"> |
<cfscript> WriteOutput(greeting); |
変数
ColdFusion は、型付けの弱い言語です。同じ変数を複数のデータ型として利用できます。次に例を示します。
x=1;
変数 x は、以下のように数値型として機能します。
myNum=x^2;
さらに、以下のように文字列型としても機能できます。
myString=len(x);
ColdFusion の変数は、型によって次の 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"; // ドット表記法を使用 myStruct["key2"]="Paul"; // 連想配列表記法を使用 WriteOutput(myStruct.key1 & "<br/>"); // John WriteOutput(myStruct.key2); // Paul </cfscript>
リテラル構文を使用すると、以下のようになります。
<cfscript> myStructLiteral={}; myStructLiteral={key1="one",key2="two"}; // リテラル構文を使用 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); // 出力 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>