オーバーレイ

AEM(旧称 CQ)は、以前からオーバーレイという原理を利用して、開発者がコンソールおよびその他の機能(ページオーサリングなど)を拡張し、カスタマイズできるようにしてきました。

オーバーレイは様々なコンテキストで使用される用語です。このコンテキスト(AEM の拡張)では、オーバーレイとは、「事前定義済みの機能に対して独自の定義を強制的に付加する(標準の機能をカスタマイズする)こと」を表します。

標準インスタンスでは、定義済みの機能は/libsの下に保持され、/appsブランチの下にオーバーレイ(カスタマイズ)を定義することをお勧めします。 AEMは、リソースを検索するために検索パスを使用し、最初に/appsブランチを検索し、次に/libsブランチを検索します(検索パスはに設定できます)。 このメカニズムにより、オーバーレイ(およびそこに定義されているカスタマイズ)が優先されることになります。

AEM 6.0 以降、オーバーレイの実装方法と使用方法が次のように変更されました。

  • AEM 6.0 以降 - Granite 関連のオーバーレイ(つまりタッチ操作対応 UI)

    • 方法

      • /apps の下に適切な /libs 構造を再構築します。

        これは1:1のコピーを必要としません。Sling Resource Margerは、必要な元の定義を相互参照するために使用されます。 Sling Resource Merger は、差分メカニズムによってリソースにアクセスおよびマージするためのサービスを提供します。

      • 変更は /apps 以下でおこないます。

    • メリット

      • /libs 以下の変更に対する堅牢性が高まります。
      • 実際に必要な項目のみを再定義できます。
  • Granite 以外によるオーバーレイおよび AEM 6.0 より前のバージョンでのオーバーレイ

    • メソッド

      • /libsから/appsにコンテンツをコピー

        プロパティを含むサブブランチ全体をコピーする必要があります。

      • 変更は /apps 以下でおこないます。

    • デメリット

      • /libsの下で何かが変更されても変更は失われませんが、/appsの下でオーバーレイで発生する特定の変更を再作成する必要がある場合があります。
注意

Sling Resource Merger および関連する手法は、Granite と併用する場合に限り使用できます。つまり、オーバーレイをスケルトン構造で作成する方法は、標準のタッチ操作対応 UI でのみ使用できます。

他の領域(クラシック UI など)でのオーバーレイには、該当するノードとサブ構造全体をコピーして、必要な変更を加えます。

オーバーレイは、コンソールの設定サイドパネル内にあるアセットブラウザーへの選択カテゴリの作成(ページのオーサリング時に使用)など、多くの変更において推奨される方法です。オーバーレイは、次の理由で必要になります。

  • ​は/libsブランチ​**に変更を加えてはなりません
    次の操作を行うと、このブランチが変更される可能性があるので、行った変更はすべて失われる可能性があります。

    • インスタンス上のアップグレード
    • ホットフィックスの適用
    • 機能パックのインストール
  • オーバーレイにより、変更を 1 箇所に集中させることができます。そのため、必要に応じて変更の追跡、移行、バックアップ、デバッグを実行しやすくなります。

検索パスの設定

オーバーレイの場合、配信されるリソースは、取得されたリソースとプロパティの集合体で、定義可能な以下の検索パスに応じます。

  • OSGi 設定​で Apache Sling Resource Resolver Factory 用に定義された、リソースの Resolver Search Path

    • 検索パスの順序は、上から下の順で、それぞれの優先順位を示します。
    • 標準インストールでは、主なデフォルトは/apps, /libsです。したがって、/appsの内容は/libsの内容よりも高い優先度を持ちます(つまり、overlays​です)。
  • 2人のサービスユーザーは、スクリプトが保存されている場所へのJCR:READアクセス権が必要です。 これらのユーザーは、components-search-service(com.day.cq.wcm.coreto access/cacheコンポーネントで使用)およびsling-scripting(org.apache.sling.servlets.resolverでサーブレットを検索するために使用)。

  • 次の設定も、スクリプトの配置場所に応じて設定する必要があります(この例では/etc、/libs、または/appsの下)。

    PID = org.apache.sling.jcr.resource.internal.JcrResourceResolverFactoryImpl
    resource.resolver.searchpath=["/etc","/apps","/libs"]
    resource.resolver.vanitypath.whitelist=["/etc/","/apps/","/libs/","/content/"]
    
  • 最後に、サーブレットリゾルバーも設定する必要があります(この例では/etcも追加します)。

    PID = org.apache.sling.servlets.resolver.SlingServletResolver
    servletresolver.paths=["/bin/","/libs/","/apps/","/etc/","/system/","/index.servlet","/login.servlet","/services/"]
    

使用例

以下のページで、一部の例が紹介されています。

このページ

Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now