AEM開発者ブログ by YAMATO

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

【豆知識】コアコンポーネントの "trackingFeature" プロパティとは

こんにちは! 大和株式会社の青葉です。

アドベントカレンダー2020(記事投稿イベント)3日目ということで、
私からはAEM関連のちょっとしたTips(小ネタ)をご紹介します。

最近のAEM開発ではコアコンポーネントが欠かせない存在になっており、 実際にノード・プロパティ構造などを細かく見ていくと「あれ、これは何だろう?」と新しい発見もあるかと思います。

3日目の内容は、コアコンポーネント特有のtrackingFeatureプロパティについてです。

続きを読む

【Unit Test】JSONからResourceを作り出す

AEM Developerの皆様お疲れさまです。大和株式会社の狩野です。

Qiitaのアドベントカレンダーに便乗して始めた記事投稿イベント2日目です。 今日2日目の内容は、単体テスト用のResourceをJSONから作り出す方法についてです。

1日目の記事→AEM標準APIのNPE対策

コンポーネントのダイアログ入力値を扱うJavaクラスの単体テストを行う時、ValueMapDecorator クラス等でMock用のpropertiesを作るのも良いですが、 もっと簡単にページのノード構造をjsonファイルとして保存しておき、それを単体テストの入力値に使う事もできます。 これの利点は、複数のテストクラスで使い回すことが可能なところと、AEM側から取得が簡単なところです。

続きを読む

AEM標準APIのNPE対策

AEM Developerの皆様お疲れさまです。大和株式会社の狩野です。

Qiitaのアドベントカレンダーに便乗して、始めるのちょっと遅いですが大和開発者ブログでも同じような趣旨で、本日から記事投稿イベントを開催します!

1日目の内容はタイトルにもある通り、AEM標準APIのNPE対策です。 NPE = NullPointerExceptionです。以下の記事内ではNPEと書いたらNullPointerExceptionだと思ってください。

AEM標準APIが返却するnullに困ったということは、一度はあると思います。それをどう対策するかについて書きたいと思います。

続きを読む

OverlayとOverrideってどう違うの? - Sling Resource Merger

AEM Developerの皆様、お元気ですか?

大和の蒲生です

今回はSlingフレームワークの軸といっても過言ではないSling Resource Merger[^0]を中心にAEMの基本機能のカスタム手法であるOverlayとコンポーネント開発には欠かせないOverrideのメカニズムについてまとめていきたいと思います![^1]

AEM開発に携わっていたら、1番と言っていいほど多く利用するこのメカニズムを深く理解する一助になれれば嬉しいです!

ブログの目的

このブログを読むことで、次のことができるようになります。

  • Sling Resource Mergerについて説明する。

  • Sling Resource Mergerが提供する役立つプロパティを列挙する。

  • OverlayとOverrideの違いについて説明する。

  • どうして/libs配下を直接編集してはいけないかの理由について説明する。

  • Overlayの利点を列挙する。

続きを読む

Gmailアカウントを利用してワークフローの完了を通知する - Day CQ Mail Service

AEM Developerの皆様、お元気ですか?

大和の蒲生です

ワークフロー開発などを行った際に、AEMからのワークフロー完了のメール通知確認をしたいときってありますよね。 そんなとき皆さんはどんなSMTP(送信メール)サーバーを利用して挙動確認をしてますか?

私が思う簡単な方法の一つとして、Gmailアカウントを利用する方法があります。

今回は、GmailアカウントをSMTP(送信メール)サーバーとして利用した、ワークフローの完了を通知する方法についてまとめます! [^1]

続きを読む

embed[ ]かdependencies[ ]か、それが問題だ。- AEM Clientlibs

AEM Developerの皆さん、こんにちは、大和の蒲生です。

突然ですが、クイズです!

下記のClientlibsがあったとします。

f:id:yamato_tech:20200422174602j:plain:w300
各Clientlibsフォルダのプロパティ設定値は下記です。

/ale
- allowProxy Boolean = true
- categories String[] = brewery.ale
- dependencies String[] = brewery.lagar, brewery.pilsner
/lagar
- allowProxy Boolean = true
- categories String[] = brewery.lagar
/pilsner
- allowProxy Boolean = true
- categories String[] = brewery.pilsner
- embed String[] = brewery.stout
/stout
- allowProxy Boolean = true
- categories String[] = brewery.stout

下記のようなHTMLの場合、

<sly data-sly-use.clientlib="/libs/granite/sightly/templates/clientlib.html">
    <sly data-sly-call="${clientlib.css @ categories='brewery.ale'}"/>
</sly>

JSPであれば、

<ui:includeClientLib categories="brewery.ale" />

下記A~Eうち、どれがレンダリング結果として出力されるでしょうか?

続きを読む

CI/CD初心者がCONGAを使ってみたよ

こんにちは、大和株式会社の青葉です。

普段のAEMプロジェクト以外にも、Adobe Digital Learning Services(ADLS)が提供している定期コース(AEM Sitesユーザーコース、AEM Sites開発コース)のトレーナーを担当しております。

コロナの影響もあり、自室に籠る時間が長くなったためか、学習も捗るなぁと感じます。宇宙ステーション生活はしばらく続きますが、環境の有効活用で乗り越えます!

最近は CI/CD 分野にも興味を持ち始めたので、手当たり次第に冒険中です。どうぞよろしくお願いいたします。

CONGAとは?

今回みなさんにご紹介するのは、コンフィギュレーション ジェネレータ ツール「CONGA」(コンガ)です!

続きを読む