AEM の開発 - ガイドラインとベストプラクティス aem-development-guidelines-and-best-practices
テンプレートとコンポーネントの使用に関するガイドライン guidelines-for-using-templates-and-components
Adobe Experience Manager(AEM)のコンポーネントとテンプレートは、強力なツールキットを構成します。開発者はこれらを使用して、web サイトのビジネスユーザー、エディターおよび管理者が変化するビジネスニーズに web サイトを適応させる機能(コンテンツの機敏性)を提供します。これらすべては、サイトの統一されたレイアウトを維持(ブランド保護)しながら行われます。
Web サイト、または一連の web サイト(グローバル企業の支社など)の責任者によくある課題は、自身の web サイトに新しいタイプのコンテンツプレゼンテーションを導入することです。
既に公開されている他の記事からの抜粋をリストするニュースリストページを、web サイトに追加する必要があると仮定します。ページのデザインと構造は、web サイトの残りの部分と同じにする必要があります。
このような課題への対応として、以下の方法が推奨されます。
- 既存のテンプレートを再利用して、特定のタイプのページを作成できます。テンプレートでページ構造(ナビゲーション要素、パネルなど)を大まかに定義し、それをデザイン(CSS、グラフィック)によってさらに微調整します。
- 新しいページで段落システム(parsys または iparsys)を使用します。
- 段落システムのデザインモードに対するアクセス権を定義して、権限を持つユーザー(通常は管理者)のみが変更できるようにします。
- 特定の段落システムで許可されるコンポーネントを定義して、エディターが必要なコンポーネントをページ上に配置できるようにします。この場合、ページのサブツリーをトラバースし、事前に定義されたルールに従って情報を抽出できる、リストコンポーネントが考えられます。
- エディターは、担当するページ上で許可されているコンポーネントを追加および設定して、ビジネスに要求されている機能(情報)を提供します。
このアプローチにより、開発チームの関与を必要とせずに、web サイトに参加するユーザーと管理者がビジネスニーズに迅速に対応できます。テンプレートの作成などの代替方法は通常、変更管理プロセスと開発チームの関与を必要とし、コストがかかる作業になります。プロセス全体がより長くなり、コストがかさみます。
したがって、AEM ベースのシステムの開発者は以下を使用する必要があります。
- 統一性とブランド保護のためのテンプレート、および段落システムのデザインへのアクセス制御
- 柔軟性のための設定オプションを含む段落システム
以下に示す開発者向けの一般的なルールは、通常のプロジェクトのほとんどで理にかなっています。
- テンプレートの数を少なく保つこと。web サイト上の根本的に異なるページ構造の数と同じ数にすること。
- カスタムコンポーネントに必要な柔軟性および設定機能を備えること。
- AEM 段落システム(parsys コンポーネントおよび iparsys コンポーネント)の能力と柔軟性を最大限に活用すること。
コンポーネントおよびその他の要素のカスタマイズ customizing-components-and-other-elements
独自のコンポーネントを作成したり、既存のコンポーネントをカスタマイズしたりするとき、多くの場合は、既存の定義を再利用する方法が最も簡単(かつ安全)です。同じ原則が、エラーハンドラーなど、AEM 内の他の要素にも当てはまります。
これは、既存の定義をコピーしてオーバーレイすることで実行することができます。つまり、/libs
から /apps/<your-project>
に定義をコピーします。この新しい定義は /apps
で、必要に応じて更新できます。
例:
-
これには、コンポーネント定義のオーバーレイが含まれます。
-
既存のコンポーネントをコピーすることにより、
/apps/<website-name>/components/<MyComponent>
にコンポーネントフォルダーを作成します。-
例えば、テキストコンポーネントをカスタマイズするには、次のようにコピーします。
- コピー元:
/libs/foundation/components/text
- コピー先:
/apps/myProject/components/text
- コピー元:
-
-
-
この場合、サーブレットのオーバーレイを含みます。
-
リポジトリで、1 つ以上のデフォルトスクリプトをコピーします。
- コピー元:
/libs/sling/servlet/errorhandler/
- コピー先:
/apps/sling/servlet/errorhandler/
- コピー元:
-
/libs
パス内は一切変更し ない でください。/libs
の内容が上書きされるためです(また、ホットフィックスまたは機能パックを適用するときに上書きされる可能性もあります)。/libs
内の項目を/apps
にコピー/apps
内での変更
JCR クエリを使用する場合と使用しない場合 when-to-use-jcr-queries-and-when-not-to-use-them
JCR クエリは、正しく使用すれば強力なツールとなります。以下の場合に適しています。
-
コンテンツに対するフルテキスト検索などの実際のエンドユーザークエリ。
-
構造化されたコンテンツをリポジトリ全体で見つける必要がある場合。
このような場合は、クエリが必要な場合にのみ実行するようにしてください。例えば、コンポーネントのアクティベーションやキャッシュの無効化などです(ワークフローステップ、コンテンツ変更時にトリガーされるイベントハンドラー、フィルターなどとは対照的です)。
純粋なレンダリングリクエストには JCR クエリを使用しないでください。例えば、JCR クエリは以下の場合には適しません。
- ナビゲーションのレンダリング
- 「最新ニュース上位 10 項目」の概要の作成
- コンテンツ項目の数の表示
コンテンツをレンダリングするためには、JCR クエリを実行する代わりに、コンテンツツリーへのナビゲーションアクセスを使用します。
セキュリティに関する考慮事項 security-considerations
JCR(リポジトリ)セッション jcr-repository-sessions
管理セッションではなく、ユーザーセッションを使用します。つまり、次のものを使用する必要があります。
slingRequest.getResourceResolver().adaptTo(Session.class);
クロスサイトスクリプティング(XSS)に対する保護 protect-against-cross-site-scripting-xss
クロスサイトスクリプティング(XSS)を使用すると、攻撃者が他のユーザーが閲覧した web ページにコードを挿入できます。このセキュリティ脆弱性は、悪意のある web ユーザーによって悪用され、アクセス制御をバイパスする可能性があります。
AEM では、ユーザーが提供するコンテンツをすべて出力時にフィルタリングする原則を適用しています。XSS を回避することは、開発とテストの両方において最優先されます。
また、Apache 対応の mod_security などの web アプリケーションファイアウォールを使用すると、デプロイメント環境のセキュリティを高い信頼性で一元的に制御でき、以前は検出されなかったクロスサイトスクリプティング攻撃に対する保護も可能です。
XSS API チートシートには、XSS API を使用して AEM アプリケーションのセキュリティを強化するために知っておくべき情報が含まれています。こちらからダウンロードできます。
XSSAPI チートシート。
機密情報の通信の保護 securing-communication-for-confidential-information
どのインターネットアプリケーションでも同じですが、機密情報を転送する際は、以下の点を確認してください。
- トラフィックが SSL によって保護されていること
- 適宜 HTTP POST が使用されていること
これは、システムに対して機密の情報(設定や管理アクセスなど)とユーザーに対して機密の情報(個人情報の詳細など)の両方に該当します。
個別の開発タスク distinct-development-tasks
エラーページのカスタマイズ customizing-error-pages
エラーページは AEM 用にカスタマイズできます。内部サーバーエラー時にインスタンスが Sling トレースを表示しないようにするために、カスタマイズをお勧めします。
詳しくは、エラーハンドラーによって表示されるページのカスタマイズを参照してください。
Java™ プロセスでファイルを開く open-files-in-the-java-process
AEM は多数のファイルにアクセスできるので、Java™ プロセス用に開いているファイルの数を AEM 用に明示的に設定することをお勧めします。
この問題を最小限に留めるために、開発の際は、開かれたすべてのファイルが(合理的に)可能な限り正しく閉じられることを確認する必要があります。