拡張機能マニフェスト
拡張機能の基本ディレクトリには、extension.json
という名前のファイルを作成する必要があります。 このファイルには、Adobe Experience Platform が拡張機能を適切に使用できるようにするための重要な詳細が含まれています。 内容の一部は、npm のpackage.json
の形式に従って構成されます。
extension.json
の例は、Hello World 拡張機能 の GitHub リポジトリにあります。
拡張機能マニフェストは、次のプロパティで構成する必要があります。
name
platform
web
のみです。version
displayName
description
iconPath
(オプション).svg
が付いた SVG ファイルを参照する必要があります。 SVG は正方形にする必要があり、Platform で拡大縮小できます。author
「author」は、次の構造を持つオブジェクトです。
name
:拡張機能の作成者の名前。または、会社名を使用することもできます。url
(オプション):拡張機能の作成者の詳細を参照できる URL。email
(オプション):拡張機能の作成者のメールアドレス。
この構造は、npm 作成者フィールドのルールと一致します。
exchangeUrl
(公開拡張機能に必要)https://www.adobeexchange.com/experiencecloud.details.######.html
と一致する必要があります。viewBasePath
src/view/
内に含まれている場合、viewBasePath
の値は src/view/
になります。hostedLibFiles
(オプション)このオプションには、ホストする必要があるサードパーティのライブラリファイルの相対パスを使用した配列が含まれます。
main
(オプション)このモジュールは常にランタイムライブラリに含まれ、実行されます。このモジュールは常にランタイムライブラリに含まれるため、モジュールが必須の場合は「メイン」モジュールのみを使用し、コードサイズを最小限に抑えることをお勧めします。
このモジュールが最初に実行される保証はありません。その前に他のモジュールが実行される場合があります。
configuration
(オプション)sharedModules
(オプション)共有モジュール定義オブジェクトの配列。 配列内の共有モジュールオブジェクトは、それぞれ次のように構造化する必要があります。
付録
命名規則 naming-rules
extension.json
内の name
フィールドの値は、次のルールに従う必要があります。
- 214 文字以下にする必要があります。
- ドットまたはアンダースコアを先頭に使用することはできません。
- 大文字を含めることはできません。
- URL に使用できる文字のみを含める必要があります。
これらのルールは、npm パッケージ名ルールと一致します。
設定オブジェクトのプロパティ config-object
設定オブジェクトは、次のように構造化する必要があります。
viewPath
viewBasePath
に対する相対位置であり、スラッシュで始まらないようにします。 拡張子 .html
を持つ HTML ファイルを参照する必要があります。 クエリ文字列およびフラグメント識別子(ハッシュ)のサフィックスを使用できます。schema
拡張機能の設定表示から保存される有効なオブジェクトの形式を記述する JSON スキーマ のオブジェクト。 設定表示の開発者は、保存した settings オブジェクトがこのスキーマと一致することを確認する必要があります。このスキーマは、ユーザーが Platform サービスを使用してデータを保存しようとした場合の検証にも使用されます。
スキーマオブジェクトの例を次に示します。
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"delay": {
"type": "number",
"minimum": 1
}
},
"required": [
"delay"
],
"additionalProperties": false
}
手動でスキーマをテストするには、JSON Schema validator などのツールを使用することをお勧めします。
transforms
(オプション)タイプの定義 type-definitions
タイプの定義とは、イベント、条件、アクションまたはデータ要素の各タイプを記述するために使用されるオブジェクトです。 このオブジェクトは、次の内容で構成されます。
name
displayName
categoryName
(オプション)displayName
が UI 内の categoryName
の下に一覧表示されます。 同じ categoryName
を持つすべてのタイプが同じカテゴリに一覧表示されます。例えば、拡張機能で keyUp
イベントタイプと keyDown
イベントタイプが指定され、どちらのタイプも Keyboard
の categoryName
を持つ場合、ユーザーがルールを作成する際に使用可能なイベントタイプのリストから選択するときに、両方のイベントタイプが Keyboard カテゴリに表示されます。 categoryName
の値は人間が判読できる必要があります。libPath
.js
を持つ JavaScript ファイルを参照する必要があります。viewPath
(オプション)viewBasePath
に対する相対 URL であり、スラッシュで始まらないようにする必要があります。 拡張子 .html
を持つ HTML ファイルを参照する必要があります。 クエリ文字列とフラグメント識別子(ハッシュ)を使用できます。タイプのライブラリモジュールがユーザーの設定を使用しない場合、このプロパティを除外すると、Platform では、代わりに、設定が不要であることを示すプレースホルダーが表示されます。schema
ユーザーが保存できる有効な settings オブジェクトの形式を記述する JSON スキーマのオブジェクト。 設定は通常、ユーザーがデータ収集ユーザーインターフェイスを使用して設定および保存します。 このような場合、拡張機能の表示では、ユーザーが指定した設定を検証するために必要な手順を実行できます。 一方で、ユーザーインターフェイスを使用せずに、タグ API を直接使用するユーザーも存在します。このスキーマの目的は、ユーザーインターフェイスが使用されているかどうかに関係なく、ユーザーが保存する settings オブジェクトが、実行時に settings オブジェクト対して実行されるライブラリモジュールと互換性のある形式であることを、Platform が適切に検証できるようにすることです。
スキーマオブジェクトの例を次に示します。
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"delay": {
"type": "number",
"minimum": 1
}
},
"required": [
"delay"
],
"additionalProperties": false
}
手動でスキーマをテストするには、JSON Schema validator などのツールを使用することをお勧めします。
transforms
(オプション)変換 transforms
特定のユースケースでは、拡張機能を使用するには、ビューから保存した settings オブジェクトを Platform で変換してから、タグのランタイムライブラリに発行する必要があります。 extension.json
内でタイプ定義を定義する際に、transforms
プロパティを設定することで、これらの 1 つ以上の変換を実行するように要求できます。 transforms
プロパティはオブジェクトの配列です。各オブジェクトは、実行する必要のある変換を表します。
すべての変換には type
と propertyPath
が必要です。 type
は、function
、remove
、file
のいずれかである必要があり、Platform が settings オブジェクトに適用する必要がある変換を示します。propertyPath
はピリオドで区切られた文字列で、変更が必要なプロパティが settings オブジェクト内のどこにあるかをタグに伝えます。次に、設定オブジェクトと propertyPath
の例を示します。
{
foo: {
bar: "A string",
baz: [
"A",
"B",
"C"
]
}
}
foo.bar
のpropertyPath
を設定すると、"A string"
値が変換されます。foo.baz[]
のpropertyPath
を設定すると、baz
配列の各値が変換されます。foo.baz
のpropertyPath
を設定すると、baz
配列が変換されます。
プロパティパスは、配列とオブジェクト表記の組み合わせを使用して、 設定オブジェクトの任意のレベルで変換を適用できます。
propertyPath
属性での配列表記の使用(例:foo.baz[]
)は、拡張機能サンドボックス*ツールではまだサポートされていません。以下の節では、利用可能な変換とその使用方法について説明します。
関数変換
関数変換を使用すると、Platform ユーザーが記述したコードを、発行されたタグのランタイムライブラリ内のライブラリモジュールによって実行できます。
「カスタムスクリプト」アクションタイプを指定するとします。 「カスタムスクリプト」アクションビューには、ユーザーがコードを入力できるテキスト領域があります。ユーザーがテキスト領域に次のコードを入力したとします。
console.log('Welcome, ' + username +'. This is ZomboCom.');
ユーザーがルールを保存すると、表示で保存される設定オブジェクトは次のようになります。
{
foo: {
bar: "console.log('Welcome, ' + username +'. This is ZomboCom.');"
}
}
タグのランタイムライブラリ内でアクションを使用するルールが起動した場合、ユーザーのコードを実行し、ユーザー名を渡します。
設定オブジェクトがアクションタイプのビューから保存された時点で、ユーザーのコードは単なる文字列になります。 この動作には、JSON との間でコードを適切にシリアル化できるため利点もありますが、通常、コードは実行可能な関数ではなく、文字列としてタグのランタイムライブラリに発行されるため、欠点もあります。eval
または Function コンストラクターを使用して、アクションタイプのライブラリモジュール内のコードを実行しようとしても、コンテンツのセキュリティポリシーによって実行がブロックされる可能性があるので、この操作は推奨されません。
この状況の回避策として、タグのランタイムライブラリでユーザーのコードが発行されたときに、関数変換を使用して、そのコードを実行可能な関数に含めるよう Platform に指示します。 この例の問題を解決するには、extension.json
でタイプの定義の変換を次のように定義します。
{
"transforms": [
{
"type": "function",
"propertyPath": "foo.bar",
"parameters": ["username"]
}
]
}
type
は、設定オブジェクトに適用する必要のある変換のタイプを定義します。propertyPath
は、設定オブジェクト内で変更する必要があるプロパティをどこで見つけるかを Platform に指示する、ピリオドで区切られた文字列です。parameters
は、ラッピング関数のシグネチャに含める必要があるパラメーター名の配列です。
settings オブジェクトがタグのランタイムライブラリで発行されると、次のように変換されます。
{
foo: {
bar: function(username) {
console.log('Welcome, ' + username +'. This is ZomboCom.');
}
}
}
その後、ライブラリモジュールは、ユーザーのコードを含む関数を呼び出し、username
引数に渡すことができます。
ファイル変換
ファイル変換を使用すると、Platform ユーザーが記述したコードを、タグのランタイムライブラリとは別のファイルに発行できます。このファイルは、タグのランタイムライブラリと共にホストされ、必要に応じて、実行時に拡張機能で読み込むことができます。
「カスタムスクリプト」アクションタイプを指定するとします。 アクションタイプのビューには、ユーザーがコードを入力できるテキスト領域が表示される場合があります。 ユーザーがテキスト領域に次のコードを入力したとします。
console.log('This is ZomboCom.');
ユーザーがルールを保存すると、表示で保存される設定オブジェクトは次のようになります。
{
foo: {
bar: "console.log('This is ZomboCom.');"
}
}
ユーザーのコードを、タグのランタイムライブラリ内ではなく別のファイルに配置する必要があります。 タグのランタイムライブラリ内でアクションを使用するルールが起動する場合、ドキュメントの本文にスクリプト要素を追加して、ユーザーのコードを読み込みます。この例の問題を解決するには、extension.json
のアクションタイプの定義の変換を次のように定義します。
{
"transforms": [
{
"type": "file",
"propertyPath": "foo.bar"
}
]
}
type
は、設定オブジェクトに適用する必要のある変換のタイプを定義します。propertyPath
は、設定オブジェクト内で変更する必要があるプロパティをどこで見つけるかを Platform に指示する、ピリオドで区切られた文字列です。
settings オブジェクトがタグのランタイムライブラリで発行されると、次のように変換されます。
{
foo: {
bar: "//launch.cdn.com/path/abc.js"
}
}
この場合、foo.bar
の値は URL に変換されています。 正確な URL は、ライブラリの構築時に決定されます。 ファイルには常に拡張子 .js
が付き、JavaScript 対応の MIME タイプを使用して配信されます。 将来、他の MIME タイプのサポートが追加される可能性があります。
変換の削除
デフォルトでは、settings オブジェクトのすべてのプロパティは、タグのランタイムライブラリに発行されます。特定のプロパティが拡張機能の表示のみに使用される場合、特に機密情報( 例:シークレットトークン)が含まれる場合は、変換の削除を使用して、情報がタグのランタイムライブラリに発行されないようにする必要があります。
新しいアクションタイプを指定するとします。 アクションタイプのビューでは、特定の API への接続を許可する秘密キーをユーザーが入力できる場合があります。 ユーザーが次のテキストを入力したとします。
ABCDEFG
ユーザーがルールを保存すると、表示で保存される設定オブジェクトは次のようになります。
{
foo: {
bar: "ABCDEFG"
}
}
タグのランタイムライブラリ内に bar
プロパティを含めないでください。 この例の問題を解決するには、extension.json
のアクションタイプの定義の変換を次のように定義します。
{
"transforms": [
{
"type": "remove",
"propertyPath": "foo.bar"
}
]
}
type
は、設定オブジェクトに適用する必要のある変換のタイプを定義します。propertyPath
は、設定オブジェクト内で変更する必要があるプロパティをどこで見つけるかを Platform に指示する、ピリオドで区切られた文字列です。
settings オブジェクトがタグのランタイムライブラリで発行されると、次のように変換されます。
{
foo: {
}
}
この場合、foo.bar
の値は設定オブジェクトから削除されています。