AEM への貢献 contributing-to-aem

CAUTION
AEM 6.4 の拡張サポートは終了し、このドキュメントは更新されなくなりました。 詳細は、 技術サポート期間. サポートされているバージョンを見つける ここ.

開発手法 development-methodology

AEMは、大規模なオープンソースプロジェクトで一般的に実践されている実証済みの方法論に従って開発されています。 AEMテクノロジースタックの多くのコア要素は、Apache Software Foundation に貢献した Sling や Jackrabbit など、アクティブなオープンソースプロジェクトとして実際に維持されています。 AEMに存在するこの精神の主な側面は、開発チームと直接やり取りするために、利用可能なメーリングリストやオンラインフォーラムを利用することをお勧めします。

AEMのコンポーネントに貢献する場合は、オープンソースプロジェクトへの貢献の際と同じようにAEMに慣れ、既存のコアチームとのコミュニケーションを取る必要があります。

必要なエクスペリエンス required-experience

HyperText 転送プロトコル (HTTP) は、当社が行うすべての作業の中心となります。 したがって、AEMに貢献する前に、HTTP について深く理解する必要があります。理想的には、スレッドプーリングを使用してマルチスレッド HTTP サーバーの独自の Java 実装を記述できる範囲です。 また、HTTP/1.1 キープアライブ動作に関する知識が必要です。また、JavaScript とのサーバー/クライアント側のやり取り、特にAJAXで表される非同期的なやり取りスタイルに関する深い知識が必要です。

ページの動的性とインタラクティブコンテンツは WM エクスペリエンスの鍵となるので、ドキュメントオブジェクトモデルと、イベントに応じてプログラム的に操作する可能性について、かなり深く理解しておく必要があります。 例えば、リアルタイム DOM 操作や、複数のブラウザードキュメント(iframe の使用など)でのドラッグ&ドロップ動作に関する知識が必要です。

最高レベルでは、以下について確実に理解する必要があります。

  • HTTP/1.1 プロトコル
  • HTML HTML5)
  • カスケードスタイルシート
  • 拡張可能マークアップ言語 (XML)
  • 非同期 JavaScript および XML(AJAX) のデザインパターン
  • JavaScript オブジェクト表記法 (JSON)
  • ドキュメントオブジェクトモデル
  • ステートフルとステートレスのインタラクション
  • Uniform Resource Identifiers
  • ブラウザーの cookie
  • その他の最新の Web 開発概念

Adobe Experience Manager のテクノロジースタックは、Apache Felix OSGI コンテナと Apache Sling web フレームワークに基づいており、Java コンテンツリポジトリ(JCR)を、Apache Jackrabbit に基づいて埋め込みます。これらの個々のプロジェクト、および貢献する領域で使用されるその他のオープンソースコンポーネント(Apache Lucene など)に関して熟知しておく必要があります。

業界知識 tribal-knowledge

一定の概念や指針は、以前の Day 社の文化に深く根ざしています。ここでは、「DNA に深く埋め込まれている」問題の中で注意すべきものをいくつか示します。

すべてがコンテンツである everything-is-content

コンテンツに含まれるのは、web アプリケーションで保持されるすべてのデータだけではありません。あらゆる種類のプログラムコード、ライブラリ、スクリプト、テンプレート、HTML、CSS、画像およびアーティファクトが、どれもすべてコンテンツリポジトリ内に保持され、パッケージマネージャーおよびパッケージ共有経由で、パッケージの形式で読み込みおよび書き出しされます。

David's Model david-s-model

Java コンテンツリポジトリでコンテンツをどのようにモデル化するかは、リレーショナルな世界でのデータのモデル化に関するソフトウェア業界の一般的な考え方とはまったく異なる方法が必要です。JCR を使用したコンテンツ管理が初めての方必読のドキュメントは、David's Model: A guide for content modeling です。

RESTfulness restfulness

REST のアプローチは、アドビの行動に深く根付いています。 つまり、特に、ステートフルなインタラクションを避け、URI はコンテンツやサービスの確定的なアドレスであることに留意します。

REST(REpresentational State Transfer) とは、World Wide Web が基にするソフトウェアアーキテクチャスタイルを指します。Web を動作させる主要な要素について説明し、Web ベースのソフトウェアの設計方法に関する一連の原則を示します。Web 上で使用する API をデザインする場合は、これらの「ベストプラクティス」に従うと効果的です。

REST は、私たちが行うことの多くの背後に指針となる哲学を提供するので、RESTful 設計の指針を熟知することが不可欠であると考える必要があります。 まずは、 ロイ・フィーディングの論説.

Sling リクエストの解決 sling-request-resolution

AEMに関して理解すべき重要な側面は、受信リクエストがコンテンツとアプリケーションの動作にどのように関連しているか、コンテンツリポジトリでのコンテンツの構造と、AEMがリクエストを処理するアプリケーションロジックを探す場所です。 Apache の詳細 Sling URL の分解 REST アーキテクチャスタイルと、そのステートレス、キャッシュ可能、およびレイヤー化されたシステムコンストレインを適用する方法。

Apache Sling の要求解決に関する重要な側面は、要求を主にコンテンツリポジトリ内の特定のリソースにマッピングする方法、要求の追加のプロパティとこれらのコンテンツオブジェクトのプロパティによって、呼び出し元のアプリケーションコードと/apps のコードが/libs 内のコードを上書きする方法です。

クイックスタート quickstart

ステップ 3 はありません。インストールして実行するには、クイックスタート JAR ファイルをダウンロードしてダブルクリックするだけです。 ステップ 3 はありません。 追加のオプション機能を使用する場合は、パッケージ共有から適切なパッケージをインストールする以外に必要なことはありません。

小さなクイックスタートサイズ:クイックスタート JAR ファイルのサイズを最小限に維持します。ライブラリを要領よく最適に使用して、オプションの機能をパッケージ共有に移動します。

起動時間の短縮:起動時間に影響を与える可能性のある変更を行う場合は、長くはなく短くしてください。

傾きと平均 lean-and-mean

軽く、小さく、速く、エレガントなコードやプロジェクトをお勧めします。 「十分に良い」では不十分です。

コードの再利用:OSGi ベースの製品アーキテクチャと「すべてがコンテンツ」の哲学は、コードやアーティファクトの再利用に異常に適した機会を持っていることを意味します。 我々は、機能を控えめに保つために、可能な限りその事実を活用しようとしています。

緩い結合:我々は、緊密な依存関係と「不要な親密性」よりも疎結合インタラクションを支持する。 緩い結合は、より多くのコードの再利用を可能にします。

デモを中断しない don-t-break-the-demo

デモスクリプトや、デモで最も頻繁に示される製品機能の知識を深めてください。少なくとも、「デモスクリプト」の機能を無効にする処理は行ってはならないことを理解してください。コア製品は、開発中であっても、いつでもデモが見られる状態である必要があります。

信頼性の設計 design-for-reliability

単一の DOM 要素に関する問題がページ全体をレンダリングしないように、(例えば)フェイルソフトな方法で機能のデザインとコード化を図っています。 つまり、命に関わるもの、命に関わるものを作りなさい。 他の全てを生き残らせる。 製品を「許す」ようにします。

異常は新正常である abnormal-is-the-new-normal

シャットダウンフックに依存せず、起動時に必ずクリーンアップします。異常な終了は正常な終了です。

shutdown == kill -9 == power outage

弾性クラスター化に備える be-ready-for-elastic-clustering

常に弾性クラスター化に備え、常にクラスター化が存在すると想定してください。一般的に、すべてをコンテンツリポジトリ内に存在させることは、組み込みのクラスター化サポートを意味します。

下位互換性に対応する設計 design-for-backward-compatibility

お客様の古いコードを壊すようなことはありません。 アップグレード時に更新可能なプロダクトコードを含むのは、/libs のみとお考えください。リポジトリの /apps セクションはプロジェクトコードで、/etc セクションには、保存する必要があるカスタム設定が含まれています。通常、/apps/content/home 内では何も上書きしません。アップグレード後も、古いプロジェクトコード、設定およびコンテンツは、アップグレード前と同様に引き続き機能します。

また、後方互換性を考慮した設計により、アップグレード時の操作性が初期導入時のシンプルさと同等になるように配慮しています。単純に AEM を停止し、クイックスタート JAR ファイルを置き換え、AEM を再度起動するだけです。インストールベースが急速に拡大しているため、アップグレードの効率性はますます大きなメリットとなっています。

より新しく、より高度な機能に置き換えられると、既存の API は廃止とマークを付けることができ、またそうする必要がありますが、以前の 5.x リリースで公開された API はすべて、カスタムアプリケーションコードで使用される可能性があるので、引き続き機能する必要があります。そのような API は削除しないでください。

また、コンテンツ構造とユーザーエクスペリエンスの一般的な一貫性に関しては、後方互換性も考慮する必要があります。

中心概念 core-concepts

オーサーインスタンス - 通常、セキュリティやガバナンスなどの理由で、実稼動サイトでは AEM のインスタンスがオーサーインスタンスとパブリッシュインスタンスに分割されます。デプロイメントアーキテクチャ(オーサー/パブリッシュインスタンスを含む)について詳しくは、AEM インスタンスに関するドキュメントを参照してください。

キャッシュ、フライング、ベーキング - 従来、ベーキングとフライングの概念は、異なる web コンテンツ管理システムを区別する上で重要です。CMS の用語では、「ベイキング」とは、公開時にデータを静的ファイルにコミットする概念を指し、「フライング」とは、要求時(即時)に最終的なプレゼンテーション用のデータを処理する概念を指します。

クラスタリングとロードバランシング - 可用性を向上し、実稼動環境のパフォーマンスを改善するために、通常は、オーサーインスタンスとパブリッシュインスタンスのいずれかまたは両方を複数組み合わせてクラスターを作成します。その際、これらのインスタンスを別のユーザーグループが使用できるようにするか、ディスパッチャー設定の背後でロードバランシングを行うのが一般的です。

また、コンテンツリポジトリの複数のインスタンスを組み合わせて、高可用性 ​の JCR ソリューションを作成することができます。さらに、このソリューションを AEM ソリューションに統合することで、ハードウェアおよびソフトウェアの障害に対して最大限の保護を実現できます。詳しくは、推奨されるデプロイメントを参照してください。

コンポーネント - AEMでは、コンポーネントはオブジェクトタイプで、そのインスタンスは通常、サイドキックなどからドラッグ&ドロップすることで作成できます。例えば、AEM に同梱されている標準のコンポーネントには、テキスト、タイトル、タグクラウド、カルーセル、画像、リストの各コンポーネントが含まれ、これらのすべては実行時に Sidekick からで使用できます。

コンテンツファインダー - オーサリングモードでは、コンテンツファインダーはページの左側にある特殊なパネル(フレーム)であり、上部で選択するタブによって、画像、ドキュメント、Flash アセット、ページ、段落、リポジトリリソースのいずれかのリストが表示されます。これらを、コンテンツファインダーから作業中のページ(右側)にドラッグ&ドロップできます。

デジタルアセット - AEM では、デジタルアセットは(通常)画像とリッチメディアファイルです。詳しくは、「DAM でのデジタルアセットの操作」を参照してください。

ディスパッチャー - ディスパッチャーは、キャッシュおよびロードバランシングツールであると同時に、特定のセキュリティ保護機能を提供します。

ExtJS ウィジェット - AEM のほとんどのユーザーインターフェイス要素は、ExtJS を使用しています。ExtJS は、JavaScript で書かれたサードパーティのウィジェットライブラリです。ExtJS は、高パフォーマンスでカスタマイズ可能な UI ウィジェットと、適切にデザインされた拡張可能なコンポーネントモデルを備えています。

JCR、Java コンテンツリポジトリ - Java コンテンツリポジトリ仕様(JSR-283)は、ファイルシステムとオブジェクトデータベースを組み合わせた大規模なスケーラブル NoSQL データリポジトリを実現するための抽象データモデルとアプリケーションプログラミングインターフェースの両方を提供します。JSR-283 を詳細に理解する必要はありませんが、JCR は AEM の「すべてがコンテンツ」という理念を可能にするものなので、JCR の基本機能とその基礎となるデータモデルについて時間をかけて理解する必要があります。

本質的に、JCR はノードとプロパティのシステムであり、ノードは他のノードからの継承が可能で、すべてのコンテンツはプロパティの値として格納されます​ ​通常の継承に加えて、JCR は「mixin」ノードの概念に対応しており、複数の継承をモデル化できます。

JCR には、事前に定義されたノードタイプとプロパティタイプが多数ありますが、通常、タイピングシステムは非常に柔軟です。JCR の強みの 1 つは、構造化されたコンテンツと非構造化コンテンツを簡単に保存/管理できる点です。 つまり、JCR は高度に構造化されたデータに対応できますが、スキーマの制約を受けずに、任意の動的データ構造に対応することもできます。

JCR の Java API に関する JavaDoc は、こちらを参照してください。

JavaDoc または JCR の仕様自体を読む前に、Adobe Experience Services によって実装された JCR の概要にも目を通しておくことをお勧めします。

マルチサイトマネージャー(MSM) - AEM のMSM 機能は、多言語、多国籍のコンテンツを処理する際に役立ち、一元管理されたブランディングとローカライズされたコンテンツのバランスを取ることができます。

OSGi - OSGi は、AEM でモジュール化された Java 開発の基盤となる、サービスベースのランタイムテクノロジーです。これは、コードリソース(バンドルと呼ばれる)の非常に動的(かつ安全な)クラスの読み込みと実行環境を提供するだけでなく、バンドルによって公開される様々なサービスの可視性とライフサイクルを完全に制御するフレームワークです。 サービスレジストリは、ライフサイクルダイナミクス(およびバージョン要件)を考慮に入れたバンドルの協調モデルを提供します。 OSGi は、アプリケーションサーバーが解決しようとした問題の多くを解決しますが、軽量で非常に動的な方法で解決し、例えば、サービスのホットデプロイ(サーバーを再起動せずに新しいコードをすぐに使用可能にする)を可能にします。

Parsys、 段落システム - 段落システム(parsys)は、作成者が様々なタイプのコンポーネントをページに追加することができ、他の段落コンポーネントを含む複合コンポーネントです。各段落タイプは、コンポーネントとして表されます。 段落システム自体も、他の段落コンポーネントを含むコンポーネントです。

マイクロカーネル - リポジトリ内の各ワークスペースは、特定のマイクロカーネル(データの読み取りと書き込みを管理するクラス)を通してデータを保存するように、個別に設定できます。同様に、リポジトリ全体のバージョンストアも、特定のマイクロカーネルを使用するように、個別に設定できます。 様々なファイル形式やリレーショナルデータベースにデータを保存できる様々なマイクロカーネルを利用できます。 (例えば、MongoDB、DB2 または Oracle 用の永続性マネージャーがあります)。AEM 用のデフォルトのマイクロカーネルは TarMK です(後述)。

パブリッシュインスタンス - セキュリティやガバナンスなどの理由で、実稼動サイトでは通常、AEM のインスタンスをオーサーインスタンスとパブリッシュインスタンスに分割します。デプロイメントアーキテクチャ(オーサー/パブリッシュインスタンスを含む)について詳しくは、AEM インスタンスに関するドキュメントを参照してください。

クイックスタート - 他の多くのプログラムとは異なり、AEM をインストールするには、1 つの「クイックスタート」自己解凍 JAR ファイルを使用します。JAR ファイルを初めてダブルクリックすると、必要なものがすべて自動的にインストールされます。クイックスタート JAR には、CRX リポジトリ(管理施設を含む)、仮想リポジトリサービス、インデックスと検索サービス、ワークフローサービス、セキュリティ、Web サーバー、および CQ サーブレットエンジン (CQSE) とすべての AEM サービスに必要なすべてのファイルが含まれます。 他にインストールするファイルはありません。クイックスタートは自己完結型です。

クイックスタートを初めて起動すると、JCR 準拠のリポジトリ全体がバックグラウンドに作成されます。この作成には数分かかる場合があります。 この初回起動後は、リポジトリインフラストラクチャが既に配置されているので、以降の起動は非常に高速です。

多くの起動オプション ( アクティブなポート番号や、問題となっているAEMインスタンスをパブリッシュインスタンスとオーサーインスタンスのどちらにするかなど )。など ) は、クイックスタートファイルの名前を適切に変更することで制御できます。 この点に関するオプションのリストを確認するには、コマンドラインで"-help"を付けて JAR を実行します。

java -jar <quickstartfilename>.jar -help

レプリケーションエージェント - レプリケーションエージェントは、AEM の中心的なメカニズムであり、オーサー環境からパブリッシュ環境へコンテンツを公開(アクティベート)したり、ディスパッチャーキャッシュからコンテンツをフラッシュしたり、ユーザーが生成したコンテンツ(フォーム入力など)をパブリッシュ環境からオーサー環境に返したりするために使用されます。

基礎モード - 基礎モードを使用すると、ページに必要な構造を反映したフィールドを使用したフォーム(基礎)を作成し、このフォームを使用して必要な構造に基づいたページを簡単に作成できます。

セグメント化 - サイトにアクセスする訪問者は、様々な関心と目的を持っています。訪問者の目的を理解し、期待に応えることが、オンラインマーケティングを成功させるための重要な要因となります。セグメント化によって訪問者の詳細を分析し、特徴付けることが成功の実現に役立ちます。

サイドキック - サイドキックは、編集可能なページに表示される、パレット状のフローティングウィンドウです。ここから、新しいコンポーネントをドラッグしたり、ページに適用するアクションを実行したりできます。

Site Catalyst - SiteCatalyst は、複数のマーケティングチャネルにわたるすべてのオンライン施策の統合データを測定、分析、最適化するための場所を提供します。Adobe SiteCatalyst を使用して、AEM web サイトのデータを分析できます。

Tar ストレージ (TarMK) - TarMK は AEM のデフォルトの永続性システムです。 AEM は、異なる永続化システム(MongoDB など)を使用するように設定できますが、TarMK には、一般的な JCR の使用例向けにパフォーマンスが最適化されており(そのため、非常に高速)、業界標準のデータ形式を使用し、すばやく簡単にバックアップできるという点で明白なメリットがあります。

テンプレート - AEM では、テンプレートはページの特殊なタイプを指定するものです。ページの構造を定義します(一方で、通常はサムネール画像や様々なプロパティも指定します)。 例えば、製品ページ、サイトマップおよび問い合わせ先に、それぞれ別のテンプレートを使用することができます。

ワークフロー - AEM のワークフローシステムを使用すると、ページやアセットを扱う自動化プロセスを作成できます。

recommendation-more-help
2315f3f5-cb4a-4530-9999-30c8319c520e