AEM開発者ブログ by YAMATO

アドビ社のデリバリーパートナー大和株式会社のAEM開発者ブログです。

ACS AEM Commons - Packagers

AEM Developerの皆様、こんにちは。大和株式会社の熊井です。

今回から不定期にはなりますが複数回にわたってACS AEM Commonsの中でよく使う機能、便利な機能について解説をしていきます。
ACS AEM Commonsの全機能に関しては以下をご確認ください
https://adobe-consulting-services.github.io/acs-aem-commons/

本記事ではPackagersについて解説をします。
PackagersはAsset Packager、Authorizable Packager、ACL Packager、Query Packagerの4つの機能群により構成されています。
プロジェクト内での使用頻度も高いので馴染みがある方もいらっしゃるかもしれませんね。

前提

・ACS AEM Commonsはver.6.0.14を使用

大きな流れ

【1】共通の設定
【2】Asset Packager
【3】Authorizable Packager
【4】ACL Packager
【5】Query Packager

【1】共通の設定

  1. tools -> ACS AEM Commons -> Content Packagers を選択します

  2. Packagers -> Create -> Page を選択します

  3. Templateで作成をしたいパッケージを選択します

  4. ダイアログの共通項目
    4種、どのtemplateを選択しても共通で設定をする箇所があります。設定内容とそれがどのように反映されるかを以下にまとめます
    ●設定ダイアログ

    ●パッケージマネージャー


    ⑥Conflict resolution・・・同名のパッケージが存在する場合、置換するか、バージョンを自動的に上げるか、何もしない(エラーを出す)かを選択します。

【2】Asset Packager

出来ること

TemplateでPages (and referenced assets) packagerを選択することでAsset Packagerの機能を使用できます。
Asset Packagerの機能は「指定した階層以下のページ、およびそれらのページで使用されているアセットを簡単にパッケージ化する」です。
これは主に稼働中の環境で問題が起きた際、必要最小限のコンテンツをローカル環境等に移送し調査を行う際に使用します。

設定内容

Configurationタブ

・固有項目
- Page root path
パッケージに含むページのルートを指定します。
- Exclude Pages
パッケージにページ自体を含むか否かを選択します。チェックを付けた場合、パッケージにはページが参照するアセットのみが含まれます。

Advancedタブ

・固有項目
- Allowed assets root path
パッケージに含むアセットのルートを指定します。ページが参照するアセットのうち、さらに限定的な階層のアセットを移送したい場合に使用します。
- Exclude page regex patterns
Page root pathで指定した階層の中でパッケージに含めたくないページがある場合、パスパターンを正規表現で記載します。
- Exclude asset regex patterns
Allowed assets root path で指定した階層の中でパッケージに含めたくないアセットがある場合、パスパターンを正規表現で記載します。

【3】Authorizable Packager

出来ること

TemplateでAuthorizable packagerを選択することでAuthorizable Packagerの機能を使用できます。
Authorizable Packagerの機能は「指定をしたユーザーまたはグループを含むパッケージを作成する」です。
これは主にインスタンス間でのユーザー/グループの移送に使用します。
仮に/home/users配下をすべてパッケージに含めた場合、adminやanonymousなど移送を行ってはいけないユーザーを除く必要がありますが、Authorizable packageを使用することで任意のユーザー/グループのみを簡単にパッケージ化することが出来る為、移送不可箇所について考慮をする必要がありません。

設定内容

Configurationタブ

・固有項目
- Authorizable IDs
パッケージに含めたいユーザー/グループのID(rep:authorizableId)を入力します。補完が効く為、完全な入力は求められません。

【4】ACL Packager

出来ること

TemplateでACL packagerを選択することでACL Packagerの機能を使用できます。
ACL Packagerの機能は「指定したパス配下に存在するACLの情報(rep:policy)を含むパッケージを作成する」です。
これは主にAuthorizable Packagerと併用してインスタンス間での権限情報の移送に使用します。
通常の方法でpackage managerからコンテンツパッケージを作成した場合、権限情報は含まれません。
権限設定に起因すると思われるトラブルが起きたときなど、他のインスタンスで状況を再現したい際などに良く使われます。

設定内容

Configurationタブ

・固有項目
- Principal names
特定のユーザー/グループに関する権限情報を配下に有するrep:policyだけを抜き出したいときは指定します。
仮にeveryoneと入力した際、配下にeveryoneに関するノードを持つrep:policyがパッケージ化対象となり、その配下に関してはeveryone以外の情報もパッケージに含まれる点には注意が必要です。
・抽出後、パッケージに含まれるパス例
・配下のノード構造(allow2はtest1ユーザーに関する権限設定だが、パッケージには含まれてしまう)

- Include paths regex patterns
パッケージに含めたいパスの正規表現を入力します。
/content配下全てを含めたい場合、「/content/.*」と入力します。
入力がない場合は全てのパスを対象にパッケージを作成します。

【5】Query Packager

出来ること

TemplateでQuery packagerを選択することでQuery Packagerの機能を使用できます。
Query Packagerの機能は「入力したクエリに該当するコンテンツを含んだパッケージを作成する」です。
これはクエリを書くことさえできれば非常に汎用的に使用することが出来ます。 例えば「現在公開されているページだけを含む」や「202x年y月z日以降に変更されたページ、アセットを含む」といったことが出来ます。

設定内容

Configurationタブ

・固有項目
- Query Language
クエリ言語を「Query Builder, List, SQL2, xpath, SQL」から選択します。Query Builderの場合はAEM標準のQuery Builder Debuggerとの組み合わせでクエリの作成が簡単に出来る為、SQL等に精通しているという場合以外にはQuery Builderがオススメです。
- Query
選択したクエリ言語と抽出したい条件に沿ってクエリ文を入力します。
- Relative Path
クエリで抽出するパスとパッケージに含めたいパスが異なる場合に使用します。 例えば

path=/content/wknd/us/en
type=cq:Page

というquery builderの文を書いたとき、抽出されるパスは

/content/wknd/us/en/about-us  
/content/wknd/us/en/adventures/surf-camp-costa-rica  
/content/wknd/us/en/adventures/riverside-camping-australia

のようになります。 この場合、「/content/wknd/us/en/about-us」配下がすべてパッケージに含まれることになりますので、「/content/wknd/us/en/about-us」のみ取得したいというような要件は満たせません。そんな時はRelative Path に「./jcr:content」と入力することで

/content/wknd/us/en/about-us/jcr:content  
/content/wknd/us/en/adventures/surf-camp-costa-rica/jcr:content  
/content/wknd/us/en/adventures/riverside-camping-australia/jcr:content

を抽出することが出来ます。

終わりに

packagerは痒い所に手が届く便利な機能なので私自身もプロジェクト内でよく使用しています。 今後もACS AEM Commonsの便利機能を続々紹介していきますのでお楽しみに!