ColdFusion と GCP Firestore

概要

Firestore は、自動スケーリング、高パフォーマンス、および容易なアプリケーション開発用に構築された NoSQL ドキュメントデータベースです。Firestore インターフェイスには、従来のデータベースと同じ機能が数多くありますが、NoSQL データベースは、データオブジェクト間の関係を記述する方法が異なります。ColdFusion には、追加の NoSQL ソリューションとして Firestore が統合されています。

詳しくは、GCP Firestore を参照してください。

ネイティブモードと Datastore モードの比較

Firestore データベースを作成するときには、データベースに Datastore との下位互換性を持たせる Datastore モード、または新しい Firestore 全機能を備えたネイティブモードのいずれかで実行されるように、データベースインスタンスを設定することができます。

ColdFusion ではデータストアの API を使用しているので、API を通じてネイティブモードでの Firestore をサポートしています。

データモデル

Cloud Firestore は、NoSQL のドキュメント指向データベースです。SQL データベースとは異なり、テーブルや行はありません。代わりに、ドキュメントにデータを保存し、ドキュメントをコレクションに編成します。各ドキュメントには一連の Key-Value ペアが含まれています。Cloud Firestore は、小さなドキュメントからなる大きなコレクションを保存するために最適化されています。ドキュメントはすべてコレクションに保存されなければなりません。ドキュメントには、サブコレクションやネストされたオブジェクトを含めることができます。どちらの場合も、文字列のような基本フィールドやリストのような複合オブジェクトを含めることができます。

コレクションとドキュメントは、Cloud Firestore に暗黙的に作成されます。データをコレクション内のドキュメントに割り当てるだけです。コレクションまたはドキュメントが存在しない場合は、Cloud Firestore により作成されます。

Firestore でデータを構造化するには、ドキュメントを作成します。これにより、暗黙的にコレクション(SQL のテーブルなど)が作成されます。これらのコレクションには、SQL の行などのドキュメントが含まれています。各ドキュメントには、実際のデータを含むフィールドが含まれています。ドキュメントのパスを使用してドキュメントを参照することも、目的のデータについてドキュメントのコレクションをクエリすることもできます。

インデックス作成

Firestore では、単一フィールドと複合フィールドの 2 種類のインデックスを使用します。デフォルトでは、Cloud Firestore はドキュメント内の各フィールドとマップ内の各サブフィールドに対して、単一フィールドインデックスを自動的に維持します。単一フィールドのインデックス除外を作成することで、自動インデックス設定からフィールドを除外できます。インデックス除外は、データベース全体の自動インデックス設定より優先されます。除外すると、自動インデックス設定によって本来は無効になる単一フィールドインデックスを有効にしたり、自動インデックスによって本来は有効になる単一フィールドインデックスを無効にできます。

除外が役立つケースについては、インデックス作成のベストプラクティスを参照してください。

はじめに

gcpfirestore パッケージのインストール

gcpfirestore パッケージをインストールするには、ColdFusion Administrator のパッケージマネージャーページを使用するか、以下の手順に従います。

  1. <CF_HOME>/cfusion/bin に移動します。

  2. 次のコマンドを入力します。

    1. Windows:cfpm.bat
    2. Windows 以外の場合:/cfpm.sh
  3. コマンド install gcpfirestore を入力します。

    パッケージがインストールされるまで待ちます。

GCP Firestore にアクセスするための資格情報の取得

GCP を操作する場合、資格情報を検証し、リクエストしているリソースにアクセスするための権限を持っているかどうかをチェックするために、GCP セキュリティ資格情報を指定します。

GCP は、セキュリティ資格情報を使用して、リクエストを認証および承認します。

詳しくは、GCP API キーの概要を参照してください。

GCP サービスの認証

GCP サービスにアクセスするには、Google Cloud コンソールを使用してサービスアカウントを作成します(または、gcloud CLI、REST 呼び出しを使用するか、プログラムで実行することもできます)。このようなアカウントは、Google Cloud の ID およびアクセス管理(IAM)によって管理されています。 

詳しくは、GCP サービスの認証を参照してください。

クラウドサービス資格情報と設定の追加

Adobe ColdFusion(2021 リリース)には、様々なクラウドサービスにアクセスするためのオブジェクトを作成するためにハンドルを提供するメソッド getCloudService() があります。

サービスハンドルのシンタックスを次に示します。

service=getCloudService(cloudCred,cloudConfig)。ここで、

  • cloudCred:クラウドサービスの資格情報を定義します。構造体または文字列です(資格情報エイリアスとも呼ばれます)。
  • cloudConfig:クラウドサービス設定の詳細を定義します。構造体または文字列です(設定エイリアスとも呼ばれます)。

ColdFusion Administrator

資格情報の設定

ColdFusion Administrator で、データとサービス/クラウド資格情報をクリックします。

エイリアスは、クラウドサービスおよびその設定の詳細の名前付き表現です。ColdFusion Administrator を使用して設定エイリアスを設定できます。

詳細を入力したら、「資格情報を追加」をクリックします。

クラウドサービス資格情報の設定

設定オプションの設定

ColdFusion Administrator で、データとサービス/クラウド設定をクリックします。

設定エイリアス、ベンダー、サービスの名前など、次の詳細を入力します。

オブジェクトの作成

GCP 資格情報および設定オプションのエイリアスを作成したら、getCloudService API を使用してオブジェクトを作成し、次のコードを CFM に含めることができます。  

fsObject= getCloudService("fsCred", "fsConf")

注意:

資格情報 JSON ファイル

資格情報 JSON ファイルには、GCP サービスでの認証に役立つプロジェクト ID と秘密鍵が含まれています。project_id を含むすべてのキーはファイル内で必須です。

Application.cfc

GCP 資格情報および設定オプションを記載したファイルを Application.cfc で指定できます。次に例を示します。

component{
this.name =&quot;FireStore_Test&quot;
this.serialization.preservecaseforstructkey=true
this.enableNullSupport=true
void function onApplicationStart(){
application.gcpCred = {
projectId : &quot;my-gcp-project&quot;,
credentialJsonFilePath : &quot;C:\path\Gcp_Firestore\my-gcp-project-250541665619.json&quot;
};
application.gcpConf = {
serviceName : &quot;FIRESTORE&quot;
};
}
}
component{ this.name =&quot;FireStore_Test&quot; this.serialization.preservecaseforstructkey=true this.enableNullSupport=true void function onApplicationStart(){ application.gcpCred = { projectId : &quot;my-gcp-project&quot;, credentialJsonFilePath : &quot;C:\path\Gcp_Firestore\my-gcp-project-250541665619.json&quot; }; application.gcpConf = { serviceName : &quot;FIRESTORE&quot; }; } }
component{
    this.name =&quot;FireStore_Test&quot;
    this.serialization.preservecaseforstructkey=true
    this.enableNullSupport=true
    void function onApplicationStart(){
    application.gcpCred = {
        projectId : &quot;my-gcp-project&quot;,
        credentialJsonFilePath : &quot;C:\path\Gcp_Firestore\my-gcp-project-250541665619.json&quot;
    };
    application.gcpConf = {
        serviceName : &quot;FIRESTORE&quot;
    };
    }
}

オブジェクトを作成します。次のスニペットを参考にしてください。

fsObject = getCloudService(application.fsCred, application.fsConf)
fsObject = getCloudService(application.fsCred, application.fsConf)
fsObject = getCloudService(application.fsCred, application.fsConf)

CFM ページ上

CFM ページでは、以下に示す 4 とおりの方法のいずれかで GCP 資格情報および設定オプションを指定できます。

資格情報および設定エイリアス

GCP 資格情報および設定オプション用のエイリアスを作成したら、次に示すように、getCloudService ハンドルでそれらのエイリアスを使用できます。

<cfscript>
// ColdFusion Administrator で資格情報エイリアスと設定エイリアスを定義
fsObject=getCloudService(&quot;fsCred&quot;,&quot;fsConf&quot;)
// 以下にコードを記述
...........</cfscript>
<cfscript> // ColdFusion Administrator で資格情報エイリアスと設定エイリアスを定義 fsObject=getCloudService(&quot;fsCred&quot;,&quot;fsConf&quot;) // 以下にコードを記述 ...........</cfscript>
<cfscript> 
  // ColdFusion Administrator で資格情報エイリアスと設定エイリアスを定義 
  fsObject=getCloudService(&quot;fsCred&quot;,&quot;fsConf&quot;) 
  // 以下にコードを記述
  ...........</cfscript>

資格情報エイリアスと構造体

<cfscript>
// サービス設定に資格情報エイリアスと構造体を使用
fsConf = {
&quot;alias&quot;:&quot;gcpConf&quot;,
&quot;serviceName&quot; : &quot;GCP_STORAGE&quot;,
&quot;clientOverrideConfig&quot;:{
&quot;retryPolicy&quot;:{
&quot;numRetries&quot;:4
}
},
&quot;httpClientConfig&quot;:{
&quot;maxConnections&quot;:50
}
}
fsObject= getCloudService(&quot;fsCred&quot;, fsConf)
// 以下にコードを記述
.....................</cfscript>
<cfscript> // サービス設定に資格情報エイリアスと構造体を使用 fsConf = { &quot;alias&quot;:&quot;gcpConf&quot;, &quot;serviceName&quot; : &quot;GCP_STORAGE&quot;, &quot;clientOverrideConfig&quot;:{ &quot;retryPolicy&quot;:{ &quot;numRetries&quot;:4 } }, &quot;httpClientConfig&quot;:{ &quot;maxConnections&quot;:50 } } fsObject= getCloudService(&quot;fsCred&quot;, fsConf) // 以下にコードを記述 .....................</cfscript>
<cfscript> 
    // サービス設定に資格情報エイリアスと構造体を使用 
    fsConf = { 
            &quot;alias&quot;:&quot;gcpConf&quot;, 
            &quot;serviceName&quot; : &quot;GCP_STORAGE&quot;, 
            &quot;clientOverrideConfig&quot;:{ 
                &quot;retryPolicy&quot;:{ 
                  &quot;numRetries&quot;:4 
                } 
            }, 
            &quot;httpClientConfig&quot;:{ 
                &quot;maxConnections&quot;:50 
            } 
   
    } 
    fsObject= getCloudService(&quot;fsCred&quot;, fsConf) 
   
    // 以下にコードを記述 
    .....................</cfscript>

設定エイリアスと構造体

<cfscript>
// サービス設定に設定エイリアスと構造体を使用
// GCP 資格情報
fsCreds={
&quot;vendorName&quot;:&quot;GCP&quot;,
&quot;alias&quot;: &quot;fsCred&quot;,
&quot;projectId&quot;:&quot;1234&quot;,
&quot; credentialJsonFilePath &quot;: &quot;file path&quot;
}
fsObject= getCloudService(fsCreds, &quot;fsConf&quot;)
// 以下にコードを記述
.....................................</cfscript>
<cfscript> // サービス設定に設定エイリアスと構造体を使用 // GCP 資格情報 fsCreds={ &quot;vendorName&quot;:&quot;GCP&quot;, &quot;alias&quot;: &quot;fsCred&quot;, &quot;projectId&quot;:&quot;1234&quot;, &quot; credentialJsonFilePath &quot;: &quot;file path&quot; } fsObject= getCloudService(fsCreds, &quot;fsConf&quot;) // 以下にコードを記述 .....................................</cfscript>
<cfscript> 
    // サービス設定に設定エイリアスと構造体を使用 
    // GCP 資格情報 
    fsCreds={ 
      &quot;vendorName&quot;:&quot;GCP&quot;, 
      &quot;alias&quot;: &quot;fsCred&quot;, 
      &quot;projectId&quot;:&quot;1234&quot;, 
      &quot; credentialJsonFilePath &quot;: &quot;file path&quot;
    } 
    fsObject= getCloudService(fsCreds, &quot;fsConf&quot;) 
    // 以下にコードを記述 
    .....................................</cfscript>

資格情報構造体と設定構造体

<cfscript>
// クラウド資格情報と設定の両方に構造体を使用
fsCreds={
&quot;vendorName&quot;:&quot;GCP&quot;,
&quot;alias&quot;: &quot;fsCred&quot;,
&quot;projectId&quot;:&quot;1234&quot;,
&quot; credentialJsonFilePath &quot;: &quot;file path&quot;
}
fsConf = {
&quot;alias&quot;:&quot;fsConf&quot;,
&quot;serviceName&quot; : &quot;firestore&quot;,
&quot;clientOverrideConfig&quot;:{
&quot;retryPolicy&quot;:{
&quot;numRetries&quot;:4
}
},
&quot;httpClientConfig&quot;:{
&quot;maxConnections&quot;:50
}
}
fsObject= getCloudService(fsCreds, fsConf)
// 以下にコードを記述
...................................................................</cfscript>
<cfscript> // クラウド資格情報と設定の両方に構造体を使用 fsCreds={ &quot;vendorName&quot;:&quot;GCP&quot;, &quot;alias&quot;: &quot;fsCred&quot;, &quot;projectId&quot;:&quot;1234&quot;, &quot; credentialJsonFilePath &quot;: &quot;file path&quot; } fsConf = { &quot;alias&quot;:&quot;fsConf&quot;, &quot;serviceName&quot; : &quot;firestore&quot;, &quot;clientOverrideConfig&quot;:{ &quot;retryPolicy&quot;:{ &quot;numRetries&quot;:4 } }, &quot;httpClientConfig&quot;:{ &quot;maxConnections&quot;:50 } } fsObject= getCloudService(fsCreds, fsConf) // 以下にコードを記述 ...................................................................</cfscript>
<cfscript> 
  // クラウド資格情報と設定の両方に構造体を使用 
 fsCreds={ 
      &quot;vendorName&quot;:&quot;GCP&quot;, 
      &quot;alias&quot;: &quot;fsCred&quot;, 
      &quot;projectId&quot;:&quot;1234&quot;, 
      &quot; credentialJsonFilePath &quot;: &quot;file path&quot;
    }
    fsConf = { 
            &quot;alias&quot;:&quot;fsConf&quot;, 
            &quot;serviceName&quot; : &quot;firestore&quot;, 
            &quot;clientOverrideConfig&quot;:{ 
                &quot;retryPolicy&quot;:{ 
                  &quot;numRetries&quot;:4 
                } 
            }, 
            &quot;httpClientConfig&quot;:{ 
                &quot;maxConnections&quot;:50 
            } 
      }
  fsObject= getCloudService(fsCreds, fsConf) 
   
  // 以下にコードを記述
  ...................................................................</cfscript>

CFSetup

クラウド資格情報

Add

  • add cloudcredential alias=FirestoreCred credentialJSONFilePath=<location to cred.json> projectId=proj-id vendorName=GCP

Set

  • set cloudcredential firestoreCred projectId=proj-id

Get

  • get cloudcredential firestoreCred credentialJSONFilePath

Show

  • show cloudcredential firestoreCred

Export

  • export cloudcredential ccd.json

Delete

  • delete cloudcredential firestoreCred

Import

  • import cloudcredential ccd.json

クラウド設定

Add

  • add cloudconfiguration alias=firestore1 keepAliveTime=1m keepAliveTimeout=30s keepAliveWithoutCalls=YES maxInboundMessageSize=10 databaseId=(default) emulatorHost=127.0.0.1:8500 host=firestore.googleapis.com:443 initialRetryDelay=1s initialRpcTimeout=50s maxAttempts=6 maxRetryDelay=32s maxRpcTimeout=50s retryDelayMultiplier=2 rpcTimeoutMultiplier=1 totalTimeout=50s serviceName=FIRESTORE

Set

  • set cloudconfiguration firestore1 keepAliveTime=2m keepAliveTimeout=1m keepAliveWithoutCalls=NO

Get

  • get cloudconfiguration firestore1 keepAliveTime keepAliveTimeout keepAliveWithoutCalls

Show

  • show cloudconfiguration firestore1

Delete

  • delete cloudconfiguration firestore1

Export

  • export cloudconfiguration ccf.json

Import

  • import cloudconfiguration ccf.json

ColdFusion GCP Firestore API

Firestore の API は、管理 API を除いて非同期です。ColdFusion は、同期結果を提供するのではなく、組み込みの Future を使用します。

クエリ関数とフィルタリング関数

ヘルプをすばやく簡単に入手

新規ユーザーの場合