サイドキックライブラリとは?

サイドキックライブラリは、AEM サイドキックの拡張機能で、開発者がコンテンツ作成者向けの UI 駆動ツールを作成できるようにします。作成者にすべてのブロックのリストを直感的な方法で表示できる組み込みのブロックプラグインが含まれているので、作成者はブロックのあらゆるバリエーションを覚えたり検索したりする必要がなくなります。開発者は、サイドキックライブラリ用に独自のプラグインを作成することもできます。

Sidekick Library の使用方法

以下の手順では、サイドキックライブラリのセットアップ方法と、ブロックプラグインの設定方法について詳しく説明します。

ライブラリ シートの設定

サイドキックライブラリには、シートを使用したプラグインとプラグインのコンテンツが入力されます。

1.まず、SharePoint または gdrive で、ライブラリのコンテンツを保存するディレクトリを作成します。 コンテンツは、マウントポイントのルートの /tools/sidekick (または他の名前)に保存することをお勧めします。 次の手順では、ディレクトリが /tools/sidekick と呼ばれると仮定します。

2.次に、library (またはその他の名前)と呼ばれる /tools/sidekick ディレクトリにワークブック(Excel ファイル)を作成します。 ワークブック内の各シートは、Sidekick ライブラリによって読み込まれるプラグインを表します。 シートの名前によって、読み込まれるプラグインの名前が決まります。 シートに含まれるデータは、読み込み時にプラグインに渡されます。 プラグイン シート名の先頭には helix- が必要です。 例えば、tags というプラグインを読み込む場合、helix-tags という名前のシートを作成します。

3.このチュートリアルでは、blocks プラグイン用のシートを作成します。 シートを作成(または既定のシートの名前を変更)して'helix-blocks'と呼び、今のところ空のままにします。

Blocks プラグイン

Sidekick ライブラリには、blocks プラグインが付属しています。

ブロック プラグインの設定

ブロックプラグインのコンテンツを生成するには、含めるブロックごとに個別の Word ドキュメントを準備する必要があります。

1./tools/sidekick ディレクトリ内に、すべてのブロックバリエーションを保存するディレクトリを作成します。 例えば、/tools/sidekick 内に blocks というディレクトリを作成できます。
2.この例では、「columns」というブロックのすべてのバリエーションを定義するとします。 まず、blocks ディレクトリ内に columns という Word ドキュメントを作成し、columns ブロックのすべてのバリエーションの例を指定します。 ブロックの各バリエーションの後に、 セクション区切り文字を追加します。
3.columns ドキュメントをプレビューして公開します。
4.最後のセクションで作成したライブラリ ブックを開き、helix-blocks シート内に namepath という名前の 2 つの列を作成します。
6.次に、columns ブロックに行を追加する必要があります。 最初の列のブロック名と、2 番目の列のブロックのバリエーションを定義するドキュメントの URL を追加します。 例えば、columns ブロックを追加する場合は、名前が Columns でパスが /tools/sidekick/blocks/columns の行を作成できます。 ライブラリを複数の環境(ページ、ライブ、実稼動)で機能させるには、パス列に絶対 url を使用しないでください。
7.library ワークブックをプレビューして公開します。

> サンプルブロックは公開中なので、 一括メタデータを使用して、/tools/** 内のコンテンツのインデックスを作成しないようにする必要があります。

Screenshot 2024-04-09 at 2 54 19 PM

library.xlsx

ライブラリメタデータ

ブロックプラグインは library metadata という特殊なタイプのブロックをサポートしており、ブロックに関する情報やブロックのレンダリング方法を開発者がブロックプラグインに伝える手段を提供します。

サポートされるライブラリメタデータオプション

キー名
説明
必須
name
ブロック名
カスタムを設定できます ブロックの名前
false
説明
ブロックの説明
カスタムを設定できます ブロックの説明
false
タイプ
ブロックのタイプ
これはブロックに指示します プラグインでのグループ化方法 を構成するコンテンツ ブロック。 選択可能なオプションは次のとおりです テンプレートまたはセクション (詳細は以下)
false
次のセクションを含める
セクション数 ブロック項目に含める
ブロックが必要とする場合は、を使用します サブシーケンスからのコンテンツ 次の目的で節 レンダリング 数字である必要があります 方法を示す値 ~の多くの後続部分 を含みます。
false
searchtags
のコンマ区切りリスト 検索語句
その他を定義できます 使用できる用語 このを検索する場合 blocks プラグインのブロック
false
tableHeaderBackgroundColor
16 進数のカラー(例:#ff3300)
テーブルヘッダーを上書きします 背景色 セクション内のブロック、または ページ。
false
tableHeaderForegroundColor
16 進数のカラー(例:#ffffff)
テーブルヘッダーを上書きします 前景色(任意) セクション内のブロック、または ページ。
false
contentEditable
ブール値(デフォルト: true)
無効にするには false に設定 でのコンテンツ編集 プレビューウィンドウ。
false
disableCopy
ブール値(デフォルト: false)
を true に設定すると、 プレビューのコピーボタン ウィンドウ。
false
hideDetailsView
ブール値(デフォルト: false)
ブロックの詳細を非表示 プレビュー内のパネル ウィンドウ。
false

デフォルトのライブラリメタデータとライブラリメタデータ

library metadata には 2 つのタイプがあります。 ブロックを含むセクション内に存在するライブラリメタデータ library metadata デフォルト)。ドキュメント全体に適用され、それ自体がセクション内に存在する(セクション内の唯一の子として library metadata と呼ばれるブロック)。

5 つのバリアントを持つヒーローブロックの例を見てみましょう。 ブロックの各バリエーションに同じ説明を追加する場合、説明を含む library metadata を、バリエーションを含む各セクションに複製する必要はありません。 代わりに デフォルトlibrary metadata を使用して、ブロックのすべてのバリエーションに同じ説明を適用できます。 1 つのバリエーションに実際には少し異なる説明が必要な場合は、バリエーションを含むセクションに library metadata を追加すると、ブロックプラグイン内でレンダリングされる説明の デフォルトlibrary metadata を上書きできます。

ライブラリ メタデータを使用したブロック名と説明のオーサリング

デフォルトでは、ブロックプラグインで項目をレンダリングするために、(バリエーションを持つ)ブロック名が使用されます。 例えば、ブロックの名前が columns (center, background) の場合、その名前は、ブロックプラグインでレンダリングされるときにラベルとして使用されます。 これは、ブロックと同じセクション内に library metadata のセクションを作成することでカスタマイズできます。 ライブラリメタデータは、ブロックの説明の作成や、検索機能を使用する際にブロックのエイリアスを含めるための searchTags の追加にも使用できます。

カスタム名と説明を使用したブロックの例

コンテンツ

Screenshot 2023-06-08 at 1 11 09 PM

表示

Screenshot 2023-06-08 at 1 13 32 PM

自動ブロックとデフォルトコンテンツ

ブロックプラグインは、 デフォルトコンテンツおよび autoblocks をレンダリングできます。 これを実現するには、default content または autoblock を専用のセクション内に配置する必要があります。これには、前述のように、name プロパティを定義する library metadata テーブルを含める必要があります。 ライブラリのメタデータに名前が指定されていない場合、アイテムには「名前のないアイテム」というラベルが付けられます。

後続のセクションのコンテンツで構成されるブロック

開発者が、ブロックを後続のセクションのコンテンツで構成したい場合があります。 このパターンは こちらに示す理由により推奨されませんが、使用を選択すると、ブロックプラグインは library metadatainclude next sections プロパティを使用してこれらの項目をレンダリングできます。

テンプレート

テンプレートを使用すると、ドキュメント全体をサイドキックライブラリの単一の要素にグループ化できます。 ドキュメントをテンプレートとしてマークするには、default library metadatatypetemplate に設定します。

> 重要:library metadata は、その独自のセクションに存在し、default library metadata と見なされる唯一の子である必要があります。

テンプレートには、metadata のサポートも望ましいです。 テンプレートにメタデータテーブルを追加するには、Page metadata ブロックを使用します。

266064147-12883ee0-147b-4171-b89a-c313e33eef24

テンプレートをコピーすると、値を含む metadata がコンテンツと共にクリップボードに追加されます。

Sidekick プラグインのセットアップ

サイドキックライブラリはコンテンツと同じオリジンにホストされるので、コンテンツを読み込んで設定するには、静的HTMLページを作成する必要があります。

1.tools/sidekick/library.html という名前のファイルを作成します。

2.次のコードを library.html に貼り付けます。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <meta
      name="viewport"
      content="width=device-width, initial-scale=1.0, viewport-fit=cover"
    />
    <meta name="Description" content="AEM Sidekick Library" />
    <meta name="robots" content="noindex" />
    <base href="/" />

    <style>
      html,
      body {
        margin: 0;
        padding: 0;
        font-family: sans-serif;
        background-color: #ededed;
        height: 100%;
      }

      helix-sidekick { display: none }
    </style>
    <title>Sidekick Library</title>
  </head>

  <body>
    <script
      type="module"
      src="https://www.aem.live/tools/sidekick/library/index.js"
    ></script>
    <script>
      const library = document.createElement('sidekick-library')
      library.config = {
        base: '/tools/sidekick/library.json',
      }

      document.body.prepend(library)
    </script>
  </body>
</html>

上記のコードでは、aem.live からサイドキックライブラリを読み込んでから、カスタム sidekick-library 要素を作成してページに追加します。 sidekick-library 要素は、サイドキックライブラリの設定に必要な config オブジェクトを受け入れます。

サポートされる設定パラメーター

パラメーター名
説明
必須
ベース
ライブラリへのパス
基本ライブラリは 読み込み
true
を拡張
への絶対 URL 拡張ライブラリ
を拡張するライブラリ 基本ライブラリ
false
plugins
含むオブジェクト 登録するプラグイン サイドキックライブラリ。
plugins オブジェクトには以下の種類があります プラグインの登録に使用 および次のデータを設定 は、に渡されます。 plugin
false

ブロックプラグインは、plugins オブジェクトを使用して設定できる次の設定プロパティをサポートしています。

ブロックプラグイン設定パラメーター

パラメーター名
説明
必須
encodeImages
ブール値 画像が次のようにする必要があるかどうかを示します コピー中に符号化される の操作
サイトにゼロがある場合 ネットワーク アクセスの信頼(ZTNA) 次のようなサービスを有効にする 次に、Cloudflare にアクセス 画像はエンコードする必要があります コピー/貼り付け操作 正しく動作する 画像。
true
viewPorts
完全またはシンプル 設定オブジェクト。を参照してください。 以下に例を示します。
上書きする設定 デフォルトの表示域サイズ。 デフォルトは 480px fo です。 モバイル、タブレット用 768 px さらに電流の 100% デスクトップのウィンドウです。
false
contentEditable
無効にするブール値 でのグローバルなコンテンツ編集 プレビュー。
無効にするには false に設定 コンテンツ編集。
false

画像のエンコード

const library = document.createElement('sidekick-library')
library.config = {
  base: '/tools/sidekick/library.json',
  plugins: {
    blocks: {
      encodeImages: true,
    }
  }
}

カスタムビューポート(短い形式)

const library = document.createElement('sidekick-library')
library.config = {
  base: '/tools/sidekick/library.json',
  plugins: {
    blocks: {
      viewPorts: [600, 900],
    }
  }
}

カスタムビューポート

const library = document.createElement('sidekick-library')
library.config = {
  base: '/tools/sidekick/library.json',
  plugins: {
    blocks: {
      viewPorts: [
        {
          width: '599px',
          label: 'Small',
          icon: 'device-phone',
        },
        {
          width: '899px',
          label: 'Medium',
          icon: 'device-tablet',
        },
        {
          width: '100%',
          label: 'Large',
          icon: 'device-desktop',
          default: true,
        },
      ],
    }
  }
}

カスタムテーブルヘッダーの色

ブロックプラグインからコピーされたブロック、セクションメタデータまたはメタデータを貼り付ける際に、テーブルヘッダーの背景色と前景色をカスタマイズできます。

デフォルトスタイルは、css 変数を使用して library.html で設定できます。

 <style>
    :root {
      --sk-block-table-background-color: #03A;
      --sk-block-table-foreground-color: #fff;

      --sk-section-metadata-table-background-color: #f30;
      --sk-section-metadata-table-foreground-color: #000;

      --sk-metadata-table-background-color: #000;
      --sk-metadata-table-foreground-color: #fff;
    }
  </style>

これらの値は、 ライブラリメタデータを使用して上書きできます。

> ユーザーのコンピュータで選択したシステムの配色(ダークモード)によっては、ユーザー補助を向上させるために選択した色が変更される場合があります。

カスタムプラグイン設定

以下の例では、設定で tags プラグインを定義しています。 plugins オブジェクトのキーは、プラグインの名前と一致する必要があります。プラグイン オブジェクトで定義されたその他のプロパティは、decorate メソッドのコンテキスト引数を介してプラグインで使用できます。

const library = document.createElement('sidekick-library')
library.config = {
  base: '/tools/sidekick/library.json',
  plugins: {
    tags: {
      src: '/tools/sidekick/plugins/tags/tags.js',
      foo: 'bar'
    }
  }
}

拡張ライブラリ

場合によっては、2 つのブロックライブラリの結合が望ましいことがあります。 拡張ライブラリが定義されると、サイドキックライブラリアプリケーションは、ベースライブラリと拡張ライブラリを、作成者の単一のライブラリリストに結合します。

次の例では、ベースライブラリと、(別のオリジン上の)ベースライブラリに結合される拡張ライブラリを定義します。

const library = document.createElement('sidekick-library')
library.config = {
  base: '/tools/sidekick/library.json',
  extends: 'https://main--repo--owner.hlx.live/tools/sidekick/library.json'
}

> サイドキックライブラリに読み込むには、拡張ライブラリの library.json およびブロックで Access-Control-Allow-Origin ヘッダーを設定する必要があります。 詳しくは、 カスタム HTTP 応答ヘッダーを参照してください。

> iframe のブラウザーで適用される同一オリジンポリシーにより、拡張ブロックのプレビューを現時点で読み込むことができません。

Sidekick config.json の設定

次に、サイドキックライブラリをサイドキックに表示するには、tools/sidekick/config.json に設定ファイルを作成する必要があります。 この設定ファイルは、コードバスで作成し、github にチェックインする必要があります。

{
  "project": "Example",
  "plugins": [
    {
      "id": "library",
      "title": "Library",
      "environments": ["edit"],
      "url": "/tools/sidekick/library.html",
      "includePaths": ["**.docx**"]
    }
  ]
}

プラグイン設定の url プロパティは、サイドキックがプラグインを読み込む必要がある場所を示します。 これは、前に作成した library.html ファイルを指している必要があります。

> プラグインをサイドキックに表示するには、サイドキック設定を main ブランチにチェックインする必要があります。

> tools/sidekick/config.json ファイルが github リポジトリに存在しない場合は、作成する必要があります。 サイドキックプラグイン設定オプションについて詳しくは、docs を参照してください。

ライブラリのブロックを作成する際の考慮事項

サイドキックライブラリは、最初にブロックの plain.html のレンディションを取得し、次にコンテンツ内の他のブロックから削除することによって、ブロックをレンダリングします(例えば、応答内にブロックのバリエーションが複数ある場合)。 次に、同じページ(.plain.html を除く)をリクエストし、main 要素を削除されたブロックに置き換え、srcdoc 属性を使用してドキュメント全体を iframe に読み込みます。

window.location の使用

srcdoc 属性を使用してブロックが iframe に読み込まれるので、サイトコードで使用される window.location オブジェクトのインスタンスには、表示される一般的な値は含まれません。

ライブラリ window.location 実行中のオブジェクトの例

{
  "host": "",
  "hostname": "",
  "href": "about:srcdoc"
  "origin": "null"
  "pathname": "srcdoc"
  "port": ""
  "protocol": "about:"
}

このため、ブロックで window.location オブジェクトを使用する必要がある場合は、次の関数を scripts.js ファイルに追加し、使用するために関数に読み込むことをお勧めします。

/**
 * Returns the true origin of the current page in the browser.
 * If the page is running in a iframe with srcdoc, the ancestor origin is returned.
 * @returns {String} The true origin
 */
export function getOrigin() {
  const { location } = window;
  return location.href === 'about:srcdoc' ? window.parent.location.origin : location.origin;
}

/**
 * Returns the true of the current page in the browser.mac
 * If the page is running in a iframe with srcdoc,
 * the ancestor origin + the path query param is returned.
 * @returns {String} The href of the current page or the href of the block running in the library
 */
export function getHref() {
  if (window.location.href !== 'about:srcdoc') return window.location.href;

  const { location: parentLocation } = window.parent;
  const urlParams = new URLSearchParams(parentLocation.search);
  return `${parentLocation.origin}${urlParams.get('path')}`;
}

lib-aem での createOptimizedPicture の使用

lib-aemcreateOptimizedPicture 関数も uses window.location.href を使用します。 この関数を使用している場合は、scripts.js に移動し、上記の getHref() 関数を使用するように変更することをお勧めします。

サイドキックライブラリが存在するかどうかの確認

ページまたはブロックがサイドキックライブラリで実行中かどうかを確認したい場合があります。 これを行うには、いくつかのオプションがあります。

1.window.location.href === 'about:srcdoc' かどうかを確認

2.main 要素とブロック要素には、sidekick-library クラスが含まれます

プラグインの作成

プラグインの開発は、AEMでブロックを作成する場合と似ています。 ユーザーがプラグインを読み込もうとすると、サイドキックライブラリがプラグイン上の decorate() メソッドをトリガーします。 このメソッドは、プラグインをレンダリングするコンテナと、プラグインシートに含まれるデータを受け取ります。

/**
 * Called when a user tries to load the plugin
 * @param {HTMLElement} container The container to render the plugin in
 * @param {Object} data The data contained in the plugin sheet
 * @param {String} query If search is active, the current search query
 * @param {Object} context contains any properties set when the plugin was registered
 */
export async function decorate(container, data, query, context) {
  // Render your plugin
}

> decorate() 関数をプラグインからエクスポートする必要があります。

プラグインのデフォルトの書き出しと検索

プラグインからのデフォルトの書き出しを使用すると、作成者は、読み込み時にヘッダーに表示されるプラグイン名をカスタマイズしたり、サイドキックライブラリ内の検索機能をアクティブ化したりできます。

export default {
  title: 'Tags',
  searchEnabled: true,
};

searchEnabled プロパティが true の場合、プラグインの読み込み時にライブラリヘッダーに検索アイコンが表示されます。 ユーザーがクエリを入力して検索を開始すると、プラグインの decorate() 関数が再度トリガーされ、今回は decorate() 関数のクエリパラメーターで渡された検索文字列がトリガーされます。

プラグイン web コンポーネント

プラグイン作成者は、カスタムプラグインを構築する際に、Spectrum から選択した一連の web コンポーネントを利用できます。

Spectrum では、次のコンポーネントを使用できます

Component
ドキュメントリンク
sp-tooltip
ドキュメント
sp-toast
ドキュメント
sp-textfield
ドキュメント
sp-sidenav-item
ドキュメント
sp-sidenav
ドキュメント
sp-search
ドキュメント
sp-progress-circle
ドキュメント
sp ピッカー
ドキュメント
sp-menu-item
ドキュメント
sp-menu-group
ドキュメント
sp-menu-divider
ドキュメント
sp-menu
ドキュメント
sp-illustrated-message
ドキュメント
sp ディバイダー
ドキュメント
sp カード
ドキュメント
sp-button-group
ドキュメント
sp-button
ドキュメント
sp-action-button
ドキュメント
オーバーレイトリガー
ドキュメント

Spectrum の以下のアイコンも使用できます

Component
ドキュメントリンク
sp-icon-search
ドキュメント
sp-icon-file-template
ドキュメント
sp-icon-file-code
ドキュメント
sp-icon-device-phone
ドキュメント
sp-icon-device-tablet
ドキュメント
sp-icon-device-desktop
ドキュメント
sp-icon-magic-wand
ドキュメント
sp-icon-copy
ドキュメント
sp-icon-preview
ドキュメント
sp-icon-info
ドキュメント
sp-icon-view-detail
ドキュメント
sp-icon-chevron-right
ドキュメント
sp-icon-chevron-left
ドキュメント

プラグインイベント

プラグイン作成者は、ローダーの表示やトーストメッセージの表示を目的として、プラグインから親サイドキックライブラリにイベントをディスパッチできます。

トーストメッセージ

import { PLUGIN_EVENTS } from 'https://www.aem.live/tools/sidekick/library/events/events.js';

export async function decorate(container, data, query) {
  // Show a toast message
  container.dispatchEvent(new CustomEvent(PLUGIN_EVENTS.TOAST,  { detail: { message: 'Toast Shown!', variant: 'positive | negative' } }))
}

ローダーの表示/非表示を切り替える

import { PLUGIN_EVENTS } from 'https://www.aem.live/tools/sidekick/library/events/events.js';

export async function decorate(container, data, query) {
  // Show loader
  container.dispatchEvent(new CustomEvent(PLUGIN_EVENTS.SHOW_LOADER))
  ...
  // Hide loader
  container.dispatchEvent(new CustomEvent(PLUGIN_EVENTS.HIDE_LOADER))
}

プラグイン例

タグプラグイン

プラグイン API の例

recommendation-more-help
10a6ce9d-c5c5-48d9-8ce1-9797d2f0f3ec