AEM ホストの管理
AEM ヘッドレスアプリケーションのデプロイでは、AEM の URL の作成方法に注意して、AEM の正しいホストやドメインを使用する必要があります。認識する必要のあるプライマリ URL やリクエストタイプは次のとおりです。
- AEM GraphQL API への HTTP リクエスト
- コンテンツフラグメントで参照され、AEM によって配信されるアセットを画像化する 画像 URL
通常、AEM ヘッドレスアプリは、GraphQL API と画像リクエストの両方で単一の AEM サービスとやり取りします。AEM サービスは、AEM ヘッドレスアプリのデプロイメントに応じて変更されます。
デプロイメントタイプの順列を処理するために、各アプリのデプロイメントは、接続先の AEM サービスを指定する設定を使用して作成されます。次に、設定済みの AEM サービスのホストやドメインを使用して、AEM GraphQL API の URL と画像 URL を作成します。ビルドに依存する設定を管理するための正しい方法を判断するには、AEM ヘッドレスアプリのフレームワーク(React、iOS、Android™ など)のドキュメントを参照してください。その方法はフレームワークによって異なります。
以下は、一般的なヘッドレスフレームワークとプラットフォーム用に AEM GraphQL API と画像リクエストの URL を作成するアプローチの例です。
AEM GraphQL API リクエスト
ヘッドレスアプリから AEM GraphQL API への HTTP GET リクエストは、正しい AEM サービスとやり取りするように設定する必要があります。詳しくは、上の表を参照してください。
AEM ヘッドレス SDK(ブラウザーベースの JavaScript、サーバーベースの JavaScript、および Java™ で利用可能)を使用する場合、AEM ホストは接続する AEM サービスで AEM ヘッドレスクライアントオブジェクトを初期化できます。
カスタム AEM ヘッドレスクライアントを開発する場合は、AEM サービスのホストが、ビルドパラメーターに基づいてパラメーター化可能であることを確認します。
例
次に、AEM GraphQL API リクエストで、様々なヘッドレスアプリフレームワーク用に AEM ホスト値を設定可能にする方法の例を示します。
この例は、AEM ヘッドレス React アプリに大まかに基づいており、環境変数に基づいて様々な AEM サービスに接続するように AEM GraphQL API リクエストを作成する方法を示しています。
React アプリは JavaScript 用 AEM ヘッドレスクライアントを使用して、AEM GraphQL API とやり取りする必要があります。JavaScript 用 AEM ヘッドレスクライアントが提供する AEM ヘッドレスクライアントは、接続先の AEM サービスホストで初期化する必要があります。
React 環境ファイル
React では、プロジェクトのルートに保存されているカスタム環境ファイルまたは .env ファイルを使用して、ビルド固有の値を定義します。例えば、.env.development ファイルには、開発時に使用される値が含まれているのに対して、.env.production には、実稼動ビルドに使用される値が含まれています。
.env.development
| code language-none |
|---|
|
他の用途の .env ファイルは、.env.stage や .env.production のように、.env とセマンティック記述子を末尾に付加して指定できます。npm コマンドを実行する前に REACT_APP_ENV を設定することで、React アプリの実行またはビルド時に異なる .env ファイルを使用できます。
例えば、React アプリの package.json には、次の scripts 設定が含まれている場合があります。
package.json
| code language-none |
|---|
|
AEM ヘッドレスクライアント
JavaScript 用 AEM ヘッドレスクライアントには、AEM GraphQL API に対して HTTP リクエストを行う AEM ヘッドレスクライアントが含まれています。AEM ヘッドレスクライアントは、アクティブな .env ファイルの値を使用して、クライアントがやり取りする AEM ホストで初期化する必要があります。
src/api/headlessClient.js
| code language-none |
|---|
|
React useEffect(…) フック
カスタム React useEffect フックは、ビューをレンダリングする React コンポーネントの代わりに、AEM ホストで初期化された AEM ヘッドレスクライアントを呼び出します。
src/api/persistedQueries.js
| code language-javascript |
|---|
|
React コンポーネント
カスタム useEffect フック useAdventureByPath が読み込まれ、AEM ッドレスクライアントを使用してデータを取得し、最終的にコンテンツをエンドユーザーにレンダリングするために使用されます。
- 'src/components/AdventureDetail.js'
| code language-javascript |
|---|
|
この例は、AEM ヘッドレス iOS™ アプリの例に基づいており、ビルド固有の設定変数に基づいて様々な AEM ホストに接続するように AEM GraphQL API リクエストを設定する方法を示しています。
iOS™ アプリでは、カスタム AEM ヘッドレスクライアントが AEM の GraphQL API とやり取りする必要があります。 AEM ヘッドレスクライアントは、AEM サービスホストが設定可能なように記述する必要があります。
ビルド設定
XCode 設定ファイルには、デフォルトの設定詳細が含まれています。
Config.xcconfig
| code language-swift |
|---|
|
カスタム AEM ヘッドレスクライアントの初期化
AEM ヘッドレス iOS アプリの例では、AEM_SCHEME および AEM_HOST の設定値で初期化されたカスタム AEM ヘッドレスクライアントを使用しています。
| code language-swift |
|---|
|
カスタム AEM ヘッドレスクライアント(api/Aem.swift)には、AEM GraphQL API リクエストの前に設定済みの AEM scheme および host を付けるメソッド makeRequest(..) が含まれています。
api/Aem.swift
| code language-swift |
|---|
|
別の AEM サービスに接続する新しいビルド設定ファイルを作成できます。AEM_SCHEME および AEM_HOST のビルド固有の値は、選択したビルドに基づいて XCode で使用され、その結果、カスタム AEM ヘッドレスクライアントが正しい AEM サービスに接続するようになります。
この例は、AEM ヘッドレス Android™ アプリの例に基づいており、ビルド固有の(または各種の)設定変数に基づく様々な AEM サービスに接続するように AEM GraphQL API リクエストを設定する方法を示しています。
Android™ アプリ(Java™ で記述する場合)は、Java™ 用 AEM ヘッドレスクライアントを使用して、AEM の GraphQL API とやり取りする必要があります。Java™ 用 AEM ヘッドレスクライアントから提供される AEM ヘッドレスクライアントは、接続先の AEM サービスホストで初期化する必要があります。
ビルド設定ファイル
Android™ アプリでは、様々な用途のアーティファクトを作成するために使用される「productFlavors」を定義します。
この例では、2 つの Android™ 製品フレーバーを定義して、開発用(dev)と実稼動用(prod)とで異なる AEM サービスホスト(AEM_HOST)の値を指定する方法を示しています。
アプリの build.gradle ファイルに、env という名前の新しい flavorDimension が作成されます。
env ディメンションでは、dev と prod という 2 つの productFlavors が定義されています。それぞれの productFlavor は、buildConfigField を使用して、接続先の AEM サービスを定義するビルド固有の変数を設定します。
app/build.gradle
| code language-gradle |
|---|
|
Android™ ローダー
Java™ 用 AEM ヘッドレスクライアントから提供される AEMHeadlessClient ビルダーを、buildConfigField フィールドの AEM_HOST 値で初期化します。
app/src/main/java/com/adobe/wknd/androidapp/loader/AdventuresLoader.java
| code language-java |
|---|
|
様々な用途で Android™ アプリを作成する場合は、env フレーバーを指定すると、対応する AEM ホスト値が使用されます。
AEM 画像 URL
ヘッドレスアプリから AEM に対する画像リクエストは、前述の表で説明したように、正しい AEM サービスとやり取りするように設定する必要があります。
アドビでは、AEM の GraphQL API の _dynamicUrl フィールドを通じて入手できる最適化された画像を使用することをお勧めします。_dynamicUrl フィールドは、AEM GraphQL API に対するクエリに使用される AEM サービスホストをプレフィックスにできるホストレス URL を返します。GraphQL 応答の _dynamicUrl フィールドは次のようになります。
{
...
"_dynamicUrl": "/adobe/dynamicmedia/deliver/dm-aid--dd42d814-88ec-4c4d-b5ef-e3dc4bc0cb42/example.jpg?preferwebp=true",
...
}
例
様々なヘッドレスアプリフレームワークに設定可能になっている AEM ホスト値に、画像 URL でプレフィックスを付ける方法の例を以下に示します。この例では、_dynamicUrl フィールドを使用して画像参照を返す GraphQL クエリを使用することを想定しています。
次に例を示します。
GraphQL 永続クエリ
この GraphQL クエリは、画像参照の _dynamicUrl を返します。GraphQL 応答の節で示したとおり、ホストが除かれています。
query ($path: String!) {
adventureByPath(_path: $path, _assetTransform: { format: JPG, preferWebp: true }) {
item {
title,
primaryImage {
... on ImageRef {
_dynamicUrl
}
}
}
}
}
GraphQL 応答
この GraphQL 応答は画像参照の _dynamicUrl を返しますが、そこではホストが除かれています 。
{
"data": {
"adventureByPath": {
"item": {
"adventurePrimaryImage": {
"_dynamicUrl": "/adobe/dynamicmedia/deliver/dm-aid--de43411-88ec-4c4d-b5ef-e3dc4bc0cb42/adobestock-175749320.jpg?preferwebp=true",
}
}
}
}
}
この例では、AEM ヘッドレス React アプリの例に基づいて、環境変数に基づく適切な AEM サービスに接続するように画像 URL を設定する方法を説明します。
この例では、画像参照の _dynamicUrl フィールドのプレフィックスを設定可能な REACT_APP_AEM_HOST React 環境変数に設定する方法を示しています。
React 環境ファイル
React では、プロジェクトのルートに保存されているカスタム環境ファイルまたは .env ファイルを使用して、ビルド固有の値を定義します。例えば、.env.development ファイルには、開発時に使用される値が含まれているのに対して、.env.production には、実稼動ビルドに使用される値が含まれています。
.env.development
| code language-none |
|---|
|
他の用途の .env ファイルは、.env.stage または .env.production のように、.env とセマンティック記述子をポストフィックスにして指定することができます。npm コマンドを実行する前に REACT_APP_ENV を設定することで、React アプリの実行時やビルド時に異なる .envフ ァイルを利用できます。
例えば、React アプリの package.json は次の scripts 設定を含むことができます。
package.json
| code language-none |
|---|
|
React コンポーネント
React コンポーネントは、REACT_APP_AEM_HOST 環境変数を読み込みし、画像 _dynamicUrl の値をプレフィックスして、完全に解決可能な画像 URL を提供します。
この同じ REACT_APP_AEM_HOST 環境変数は、AEM から GraphQL データを取得するために使用する useAdventureByPath(..) カスタム useEffect フックで使用される、AEM ヘッドレスのクライアントを初期化するのに使用されます。同じ変数を使用して GraphQL API リクエストを画像 URL として作成し、React アプリが両方のユースケースで同じ AEM サービスとやり取りできるようにします。
- 'src/components/AdventureDetail.js'
| code language-javascript |
|---|
|
ここでは、 AEM ヘッドレス iOS™ アプリの例に基づいて、AEM の画像 URL をビルド固有の設定変数に基づき様々な AEM ホストに接続するように設定する方法の例を示します。
ビルド設定
XCode 設定ファイルには、デフォルトの設定詳細が含まれています。
Config.xcconfig
| code language-swift |
|---|
|
画像 URL ジェネレーター
カスタムの AEM ヘッドレスクライアント実装である Aem.swift では、カスタム関数 imageUrl(..) は、GraphQL 応答の _dynamicUrl フィールドで提供される画像パスを受け取り、その前に AEM のホストを付加します。その後、この関数は、画像がレンダリングされるたびに iOS ビューで呼び出されます。
WKNDAdventures/AEM/Aem.swift
| code language-swift |
|---|
|
iOS ビュー
iOS ビューは、完全に解決可能な画像 URL を提供するために、画像 _dynamicUrl の値をプレフィックスします。
WKNDAdventures/Views/AdventureListItemView.swift
| code language-swift |
|---|
|
新しいビルド設定ファイルを作成して、様々な AEM サービスに接続できます。AEM_SCHEME および AEM_HOST のビルド固有の値は、XCode で選択されたビルドに基づいて使用されるため、カスタム AEM ヘッドレスクライアントは正しい AEM サービスと対話します。
この例は、AEM ヘッドレス Android™ アプリの例に基づいており、ビルド固有の(またはフレーバーの)設定変数に基づいて、様々な AEM サービスに接続するように AEM イメージ URL を設定する方法を示しています。
ビルド設定ファイル
Android™ アプリでは、様々な用途のアーティファクトを構築するために使用される「productFlavors」を定義します。
この例では、2 つの Android™ 製品フレーバーを定義して、開発(dev)と実稼働(prod)で使用するために異なる AEM サービス ホスト(AEM_HOST)値を提供する方法を示しています。
アプリの build.gradle ファイルに、env という名前の新しい flavorDimension が作成されます。
env ディメンションでは、dev と prod の 2 つの productFlavors が定義されています。各 productFlavor は buildConfigField を使用して、接続先の AEM サービスを定義するビルド固有の変数を設定します。
app/build.gradle
| code language-gradle |
|---|
|
AEM 画像の読み込み
Android™ では、ImageGetter を使用して、AEM から画像データを取得し、ローカルにキャッシュします。 prepareDrawableFor(..) では、アクティブなビルド設定で定義された AEM サービスホストを使用して、画像パスのプレフィックスとして AEM への解決可能な URL を作成します。
app/src/main/java/com/adobe/wknd/androidapp/loader/RemoteImagesCache.java
| code language-java |
|---|
|
Android™ ビュー
Android™ビューは、GraphQL レスポンスの _dynamicUrl 値を使用して RemoteImagesCache 経由で画像データを取得します。
app/src/main/java/com/adobe/wknd/androidapp/AdventureDetailFragment.java
| code language-java |
|---|
|
様々な用途で Android™ アプリをビルドする場合は、env フレーバーを指定すると、対応する AEM ホスト値が使用されます。