変数スコープ
ColdFusion アプリケーションを開発する前に、アプリケーションの構造と、アプリケーション全体のニーズや問題を処理する方法を決定しておきます。特に、次のことをすべて考慮する必要があります。
- アプリケーションの全体的なフレームワーク
- 再利用可能なアプリケーション要素
- 共有変数
- アプリケーションイベントと "Application.cfc" ファイル
- アプリケーションレベルの設定と機能
- アプリケーションのセキュリティとユーザーの識別
アプリケーションフレームワーク
アプリケーションフレームワークとは、アプリケーションの全体的な構造と、その構造をディレクトリ構造やアプリケーションページに反映させる方法のことです。単一のアプリケーションフレームワークでは、複数の ColdFusion アプリケーションを組み合わせて、1 つの Web サイトやインターネットアプリケーションを構築します。ColdFusion アプリケーションは、さまざまな方法で構築できます。たとえば、Fusebox というアプリケーション開発手法は、ColdFusion Web アプリケーションの開発によく採用されるフレームワークです。
本書では、特定のアプリケーションフレームワークの使用方法や開発方法については説明しません。ここでは、ColdFusion に用意されているフレームワーク構築ツール(Application.cfc ファイルなど)や、アプリケーションのディレクトリ構造がアプリケーションに与える影響、ディレクトリ構造をマッピングする方法について説明します。アプリケーションフレームワークのマッピングの詳細については、アプリケーション構造の作成を参照してください。
再利用可能なアプリケーション要素
ColdFusion には、頻繁に使用する機能の提供や CFML の拡張に使用できる再利用可能な要素が数多く用意されています。これらの要素には次のものがあります。
- ユーザー定義関数 (UDF)
- CFML カスタムタグ
- ColdFusion コンポーネント (CFC)
- CFX (ColdFusion Extension) タグ
- cfinclude タグを使用してインクルードするページ
これらの要素の概要と、使用する要素の選択基準については、ColdFusion 要素の作成を参照してください。
共有変数
次の ColdFusion 変数スコープでは、現在の HTTP リクエストのスコープを超えてデータが保持されます。
|
変数を使用できる範囲 |
---|---|
Server |
1 つのサーバー上にあるすべてのアプリケーションと、すべてのクライアント |
Application |
1 つのアプリケーション内の、すべてのクライアントに対するすべてのページ |
Client |
1 つのアプリケーション内の、単一のクライアントブラウザに対する複数のブラウザセッション |
Session |
1 つのアプリケーション内の、単一のクライアントブラウザに対する単一のブラウザセッション |
含まれるデータの整合性を保つためのロックの使用方法などの、これらの変数の使用方法については、永続データとロックの使用を参照してください。
アプリケーションイベントと Application.cfc ファイル
アプリケーションイベントとは、アプリケーションのライフサイクル内で発生する個々の事象のことです。イベントが発生するたびに、Application.cfc ファイル(アプリケーション CFC とも呼ばれます)に実装した、そのイベントに対応するメソッドが ColdFusion によって実行されます。Application.cfc ファイルでは、アプリケーションの設定を定義し、アプリケーションイベントを処理するメソッドを実装します。
次のイベントを処理するアプリケーション CFC メソッドを実装できます。
イベント |
トリガ |
---|---|
アプリケーション起動 |
動作していないアプリケーション内の任意のページに対する最初のリクエストが ColdFusion によって処理開始されると発生します。 |
アプリケーション終了 |
アプリケーションのタイムアウト期間が経過するか、サーバーがシャットダウンすると発生します。 |
セッション開始 |
既存のセッションに属さないリクエストの結果として新しいセッションが作成されると発生します。 |
セッション終了 |
セッションのタイムアウト期間が経過すると発生します。 |
リクエスト開始 |
ColdFusion でリクエスト (HTTP リクエスト、イベントゲートウェイへのメッセージ、SOAP リクエスト、Flash Remoting リクエスト) が受信されると発生します。 |
リクエスト |
ColdFusion によるリクエスト開始イベントの処理が完了した直後に発生します。このイベントのハンドラでは、主にリクエスト内容のフィルタ処理を行います。リクエスト開始とリクエストイベントの違いについて詳しくは、Application.cfc でのアプリケーションおよびイベントハンドラーの定義の Application.cfc によるリクエストの管理を参照してください。 |
リクエスト終了 |
ColdFusion でリクエストに関するすべてのページと CFC の処理が完了すると発生します。 |
例外 |
例外が try/catch ブロックで処理されなかった場合に発生します。 |
Application.cfc ファイルでは、アプリケーション名や、そのアプリケーションで Session 変数をサポートするかどうかなどの、アプリケーション全体に関する設定も定義します。
アプリケーションイベントと Application.cfc ファイルの使用方法の詳細については、Application.cfc でのアプリケーションおよびイベントハンドラーの定義を参照してください。
アプリケーションレベルのその他の設定と機能
新しく作成するコードでアプリケーションレベルの設定、変数および関数を定義する際には、ColdFusion MX 7 よりも前に使用していた方法を 使用しないことを お勧めします。Application.cfc ファイルとその変数およびメソッドのほうが高機能であり、構造も論理的に階層化されているので、今後はこの方法を使用してください。
Application.cfc ファイルがない場合は、ColdFusion でアプリケーションのページが処理されるたびに、次の 2 つのページが処理されます(存在する場合)。
- "Application.cfm" ページが、アプリケーションの各ページの前に処理されます。
- "OnRequestEnd.cfm" ページが、アプリケーションの各ページの後に処理されます。
UNIX システムでは大文字と小文字が区別されます。UNIX で確実にページが動作するように、"Application.cfm" の A および "OnRequestEnd.cfm" の O、R、E は常に大文字にしてください。
Application.cfm ページでは、アプリケーションを定義します。このページには、アプリケーション名を指定する cfapplication タグを含めることができます。また、このページに記述したコードはアプリケーションのすべてのページに対して処理されます。このページでは、アプリケーションレベルの設定、関数および機能を定義できます。
OnRequestEnd.cfm ページは、Application.cfm ページよりも使用機会が少ないページですが、すべてのアプリケーションページの後で処理される共通のクリーンアップコードを 実装したり、 ダイナミックなフッターページを指定したりすることができます。
ページで cflocation タグを実行している場合、"OnRequestEnd.cfm" ページは実行されません。
Application.cfm ページと OnRequestEnd.cfm ページの詳細については、Application.cfm ページの使用を参照してください。アプリケーションディレクトリ構造におけるこれらのページの配置については、アプリケーション構造の作成を参照してください。
ColdFusion アプリケーションは、Application.cfc、Application.cfm および OnRequestEnd.cfm ページを使用しなくても作成できます。ただし、アプリケーションの各ページで cfapplication タグを使用して共通のアプリケーション要素を定義するよりも、Application.cfm ページを使用するほうが簡単です。
アプリケーションごとの設定
アプリケーションごとに次の項目を設定します。
- マッピング
- カスタムタグのパス
これらの設定は、指定されたアプリケーションに限り、ColdFusion Administrator のサーバーサイドの設定よりも優先されます。アプリケーションごとの設定を指定しても、サーバー全体の設定は変更されません。アプリケーションごとの設定を行うには、まず、ColdFusion Administrator の [設定] ページでアプリケーションごとの設定を有効にします。その後、"Application.cfc" ファイルでマッピングまたはカスタムタグのパスを設定します。
アプリケーションごとの設定で指定したカスタムタグは、ColdFusion Administrator で定義されているカスタムタグよりも優先されます。たとえば、同じ名前のカスタムタグが 2 つあり、Administrator の設定とアプリケーションごとの設定でそれらの場所が異なる場合は、アプリケーションごとの設定で指定されているカスタムタグが最初に取得されます。
アプリケーションごとの設定は、"Application.cfc" ファイルを使用するアプリケーションでのみサポートされており、"Application.cfm" を使用するアプリケーションではサポートされていません。Administrator の [メモリ変数] ページでアプリケーション変数を無効にしている場合、アプリケーションごとの設定は機能しません。
アプリケーションごとのマッピングの設定
-
ColdFusion Administrator の [設定] ページにある [アプリケーションごとの設定の有効化] オプションにチェックを付けます。
-
次のようなコードを "Application.cfc" ファイルに含めます。
<cfset THIS.mappings["/MyMap"]="c:\inetpub\myStuff"><cfset THIS.mappings["/MyMap"]="c:\inetpub\myStuff"><cfset THIS.mappings["/MyMap"]="c:\inetpub\myStuff">
または
<cfset StructInsert(THIS.mappings, "/MyMap", "c:\inetpub\myStuff")><cfset StructInsert(THIS.mappings, "/MyMap", "c:\inetpub\myStuff")><cfset StructInsert(THIS.mappings, "/MyMap", "c:\inetpub\myStuff")>
2 つ目の形式を使用する場合は、先に THIS.mappings 構造体を作成する必要があります。
アプリケーションごとのカスタムタグのパスの設定
-
ColdFusion Administrator の [設定] ページにある [アプリケーションごとの設定の有効化] オプションにチェックを付けます。
-
次のようなコードを "Application.cfc" ファイルに含めます。
<cfset customtagpaths = ListAppend(customtagpaths,"c:\mapped3")><cfset This.customtagpaths = customtagpaths><cfset customtagpaths = ListAppend(customtagpaths,"c:\mapped3")> <cfset This.customtagpaths = customtagpaths><cfset customtagpaths = ListAppend(customtagpaths,"c:\mapped3")> <cfset This.customtagpaths = customtagpaths>
アプリケーションのセキュリティとユーザーの識別
すべてのアプリケーションは、悪意のあるユーザーにリソースを不正に使用されないようにする必要があります。また、多くのアプリケーションでは、サイト内のユーザーアクセスが可能な領域の管理、ユーザーが実行できる操作の管理、ユーザー固有のコンテンツの提供などを行うために、ユーザーの識別機能が必要になります。ColdFusion には、これらの問題に対処するために、次のようなアプリケーションセキュリティが用意されています。
- リソース(ファイルベースまたはディレクトリベースの)セキュリティ特定のディレクトリにあるアプリケーションページがアクセスできる ColdFusion リソース(タグ、関数、データソースなど)を制限します。アプリケーションのディレクトリ構造をデザインするときには、アプリケーションのリソースセキュリティの必要性を検討する必要があります。
- ユーザー(プログラムによる)セキュリティユーザーが利用できるアプリケーション機能を制限する方法として、認証(ログイン)メカニズムとロールベースの認証メカニズムが用意されています。ユーザーセキュリティではユーザー ID も利用できるので、この ID に基づいてページコンテンツをカスタマイズできます。ユーザー セキュリティ を実装するには、 cflogin タグや cfloginuser タグなどのセキュリティコードをアプリケーションに含めます。セキュリティの実装の詳細については、アプリケーションの保護を参照してください。