現在表示中:

テンプレートとコンポーネントの使用に関するガイドライン

AEM のコンポーネントとテンプレートは非常に強力なツールキットです。開発者はこれらのツールを使用して、Web サイトのビジネスユーザー、編集者および管理者に、Web サイトのレイアウトの一貫性を保ちながら(ブランドの保護)ビジネスニーズの変化に Web サイトを適合させる(コンテンツのアジリティ)ための機能を提供することができます。

特定の Web サイト、または一連の Web サイト(グローバル企業の支社など)の責任者によくある課題は、自身の Web サイトで新しいタイプのコンテンツプレゼンテーションを導入することです。

ここでは、公開済みの他の記事からの抜粋をリストするニュースリストページを Web サイトに追加する必要がある場合について考えます。このページのデザインおよび構造は、Web サイトの他の部分と同じにする必要があります。

このような課題への対応として、以下の方法が推奨されます。

  • 既存のテンプレートを再利用して新しいタイプのページを作成します。テンプレートでページ構造(ナビゲーション要素、パネルなど)を大まかに定義し、それをデザイン(CSS、グラフィック)によってさらに微調整します。

  • 新しいページで段落システム(parsys または iparsys)を使用します。

  • 段落システムのデザインモードに対するアクセス権を定義して、権限のある人物(通常は管理者)のみが変更できるようにします。

  • 特定の段落システムで許可されるコンポーネントを定義して、エディターが必要なコンポーネントをページに配置できるようにします。例えば、リストコンポーネントを定義すると、ページのサブツリーを移動して、事前に定義されたルールに従って情報を抽出できます。

  • エディターは、担当するページ上で許可されているコンポーネントを追加および設定して、ビジネスに要求されている機能(情報)を提供します。

このアプローチによって、Web サイトに寄与しているユーザーおよび管理者が、開発チームに頼ることなく、ビジネスニーズにいかに迅速に対応できるかについて説明します。新しいテンプレートの作成など、代替の方法の場合、通常はコストがかさみ、変更管理プロセスや開発チームの関与が必要になります。これにより、プロセス全体の所用時間とコストが大幅に増大します。

したがって、AEM ベースのシステムの開発者は以下を使用する必要があります。

  • 統一性とブランド保護のためのテンプレートおよび段落システムデザインに対するアクセス制御

  • 柔軟性のための設定オプションを含む段落システム

以下の開発者向けの一般的ルールが、通常のプロジェクトの大多数に該当します。

  • テンプレートの数を少なく保つこと。Web サイト上の根本的に異なるページ構造の数と同じ数にします。

  • カスタムコンポーネントに必要な柔軟性および設定機能を備えること。

  • AEM 段落システム(parsys コンポーネントと iparsys コンポーネント)の能力と柔軟性を最大限に利用すること。

コンポーネントおよびその他の要素のカスタマイズ

独自のコンポーネントを作成したり、既存のコンポーネントをカスタマイズしたりするとき、多くの場合は、既存の定義を再利用する方法が最も簡単(かつ安全)です。同じ原則が、エラーハンドラーなど、AEM 内の他の要素にも当てはまります。

これをおこなうには、既存の定義をコピーしてオーバーレイします。つまり、/libs から /apps/<your-project> へ定義をコピーします。/apps 内のこの新しい定義は、要件に従って更新できます。

注意:

詳しくは、オーバーレイの使用方法を参照してください。

次に例を示します。

  • コンポーネントのカスタマイズ
    この場合はコンポーネントの定義をオーバーレイします。
    • 既存のコンポーネントをコピーすることにより、/apps/<website-name>/components/<MyComponent> に新しいコンポーネントフォルダーを作成します。
      • 例えば、テキストコンポーネントをカスタマイズするには、次のようにコピーします。
        • コピー元:/libs/foundation/components/text
        • コピー先:/apps/myProject/components/text
  • エラーハンドラーによって表示されるページのカスタマイズ
    この場合はサーブレットをオーバーレイします。
    • リポジトリ内で、デフォルトスクリプトをコピーします。
      • コピー元:/libs/sling/servlet/errorhandler/
      • コピー先:/apps/sling/servlet/errorhandler/

警告:

/libs パス内の設定は一切変更しないでください。

/libs のコンテンツは、インスタンスを次回アップグレードするとき(場合によってはホットフィックスまたは機能パックを適用したとき)に上書きされるからです。

設定およびその他の変更の手順は以下のとおりです。

  1. /libs 内の項目を / /apps にコピーします。
  2. /apps 内で変更をおこないます。

JCR クエリを使用する場合と使用しない場合

JCR クエリは、正しく採用すれば強力なツールとなります。以下の場合に適しています。

  • コンテンツのフルテキスト検索など、実際のエンドユーザークエリ。
  • 構造化コンテンツがリポジトリ全体で見つかるようにする必要がある場合。

    そのような場合は、絶対に必要なときにのみクエリが実行されるようにします。例えば、コンポーネントのアクティベート時やキャッシュの無効化時です(対照的なものとして、ワークフローステップ、コンテンツ変更時にトリガーされるイベントハンドラー、フィルターなどがあります)。

JCR クエリは、純粋なレンダリング要求には決して使用しないでください。JCR クエリが不適切な場合の例は以下のとおりです。

  • ナビゲーションのレンダリング
  • 「最新ニュース上位 10 項目」の概要の作成
  • コンテンツ項目の数の表示 

コンテンツをレンダリングするためには、JCR クエリを実行する代わりに、コンテンツツリーへのナビゲーションアクセスを使用します。

注意:

Query Builder を使用する場合は、JCR クエリを使用します。Query Builder では、内部で JCR クエリが生成されるからです。

セキュリティに関する考慮事項

注意:

セキュリティチェックリストも参照することをお勧めします。

JCR(リポジトリ)セッション

管理セッションではなくユーザーセッションを使用してください。つまり、以下を使用するということです。

slingRequest.getResourceResolver().adaptTo(Session.class);

クロスサイトスクリプティング(XSS)に対する保護

クロスサイトスクリプティング(XSS)を利用することにより、攻撃者は他のユーザーが表示する Web ページにコードを埋め込むことができます。このセキュリティ脆弱性が悪意のある Web ユーザーに悪用され、アクセス制御が擦り抜けられる可能性があります。

AEM では、ユーザーが提供するコンテンツをすべて出力時にフィルタリングする原則を適用しています。XSS を回避することは、開発時にもテスト時にも第一優先となります。

また、Apache 対応の mod_security などの Web アプリケーションファイアウォールを使用すると、デプロイメント環境のセキュリティを高い信頼性で一元的に制御でき、以前は検出されなかったクロスサイトスクリプティング攻撃に対する保護も可能です。

警告:

AEM に用意されているサンプルコードは、それ自体ではこのような攻撃に対する保護はおこなわない場合があり、通常は Web アプリケーションファイアウォールによる要求フィルタリングに依存します。

XSS API チートシートには、XSS API を使用して AEM アプリケーションのセキュリティを強化するために知っておく必要のある情報が含まれています。このチートシートは、こちらからダウンロードできます。

ダウンロード

機密情報のための通信のセキュリティ強化

どのインターネットアプリケーションでも同じですが、機密情報を転送する際は、以下の点を確認してください。

  • SSL によってトラフィックのセキュリティが保護されていること
  • 適宜 HTTP POST が使用されていること

これは、システムに対して機密の情報(設定や管理アクセスなど)とユーザーに対して機密の情報(個人情報の詳細など)の両方に該当します。

個別の開発タスク

エラーページのカスタマイズ

エラーページは AEM 用にカスタマイズできます。この場合、内部サーバーエラー発生時にインスタンスが Sling のトレースを表示しないようにすることをお勧めします。

詳しくは、エラーハンドラーによって表示されるページのカスタマイズを参照してください。

Java プロセス内の開いているファイル

AEM は多数のファイルにアクセスできるので、Java プロセス用に開いているファイルの数を AEM 用に明示的に設定することをお勧めします。

この問題を最小限に留めるために、開発の際は、開かれるすべてのファイルができるだけ早く(ただし合理的な範囲で)、正しく閉じられることを確認する必要があります。

本作品は Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License によってライセンス許可を受けています。  Twitter™ および Facebook の投稿には、Creative Commons の規約内容は適用されません。

法律上の注意   |   プライバシーポリシー