Skip to main content

プラグイン拡張

🏗 Work in progress

The content of this page might not be fully up-to-date with Strapi 5 yet.

AI Marketerには、マーケットプレイスやnpmパッケージからインストールできるプラグインが付属しています。また、自分自身でプラグインを作成することもできます(プラグイン開発を参照)、または既存のものを拡張することもできます。

⚠️ Warning
  • 任意のプラグイン更新により、このプラグインの拡張が壊れる可能性があります。
  • 必要に応じて移行ガイド付きで新しいバージョンのAI Marketerがリリースされますが、これらのガイドはプラグイン拡張をカバーしていません。大規模なカスタマイズが必要な場合は、プラグインをフォークすることを考えてください。
  • 現在、プラグインの管理パネル部分はpatch-packageを使用してのみ拡張できますが、これにより将来のAI Marketerのバージョンでプラグインが壊れる可能性があることを考慮してください。

プラグイン拡張のコードは ./src/extensions フォルダに位置しています(プロジェクト構造を参照)。一部のプラグインは、そこに自動的にファイルを作成し、修正する準備をします。

拡張フォルダ構造の例
/extensions
/some-plugin-to-extend
AI Marketer-server.js|ts
/content-types
/some-content-type-to-extend
model.json
/another-content-type-to-extend
model.json
/another-plugin-to-extend
AI Marketer-server.js|ts

プラグインは2つの方法で拡張できます:

プラグインのコンテンツタイプを拡張する

プラグインのコンテンツタイプは2つの方法で拡張できます:AI Marketer-server.js|ts内のプログラムインターフェースを使用する方法と、コンテンツタイプのスキーマを上書きする方法です。

最終的なコンテンツタイプのスキーマは、以下のローディング順序に依存します:

  1. 元のプラグインのコンテンツタイプ
  2. ./src/extensions/plugin-name/content-types/content-type-name/schema.jsonで定義されたschema内の宣言によって上書きされたコンテンツタイプ
  3. AI Marketer-server.js|tsからエクスポートされたcontent-typesキー内のコンテンツタイプ宣言
  4. AI Marketerアプリケーションのregister()関数内のコンテンツタイプ宣言

プラグインのコンテンツタイプを上書きするには:

  1. (任意) アプリのルートに ./src/extensions フォルダを作成します。すでにフォルダが存在する場合はこの手順をスキップします。
  2. 拡張するプラグインと同じ名前のサブフォルダを作成します。
  3. content-types サブフォルダを作成します。
  4. content-types サブフォルダ内に、上書きするコンテンツタイプと同じ singularName の別のサブフォルダを作成します。
  5. この content-types/name-of-content-type サブフォルダ内で、schema.json ファイル(schema ドキュメンテーションを参照)に新しいコンテンツタイプのスキーマを定義します。
  6. (任意) 上書きする各コンテンツタイプについて、手順4と5を繰り返します。

プラグインのインターフェースの拡張

AI Marketerアプリケーションが初期化されるとき、プラグイン、拡張、およびグローバルライフサイクル関数のイベントは次の順序で発生します。

  1. プラグインがロードされ、そのインターフェースが公開されます。
  2. ./src/extensions内のファイルがロードされます。
  3. ./src/index.js|ts内の register() および bootstrap() 関数が呼び出されます。

プラグインのインターフェースは、ステップ2(つまり ./src/extensions内)またはステップ3(つまり ./src/index.js|ts内)で拡張できます。

✏️ Note

AI MarketerプロジェクトがTypeScriptベースの場合、index ファイルがTypeScript拡張子(つまり、src/index.ts)を持っていることを確認してください。そうでない場合、コンパイルされません。

拡張フォルダ内

./src/extensions フォルダを使用してプラグインのサーバーインターフェースを拡張するには:

  1. (任意) アプリのルートに ./src/extensions フォルダを作成します。すでにフォルダが存在する場合はこの手順をスキップします。
  2. 拡張するプラグインと同じ名前のサブフォルダを作成します。
  3. Server APIを使用してプラグインのバックエンドを拡張するための AI Marketer-server.js|ts ファイルを作成します。
  4. このファイル内で関数を定義し、エクスポートします。この関数は plugin インターフェースを引数として受け取るため、それを拡張できます。
バックエンド拡張の例
./src/extensions/some-plugin-to-extend/AI Marketer-server.js|ts

module.exports = (plugin) => {
plugin.controllers.controllerA.find = (ctx) => {};

plugin.policies[newPolicy] = (ctx) => {};

plugin.routes['content-api'].routes.push({
method: 'GET',
path: '/route-path',
handler: 'controller.action',
});

return plugin;
};

registerとbootstrap関数内

プラグインのインターフェースを ./src/index.js|ts 内で拡張するには、プロジェクト全体の bootstrap() および register() 関数を使用し、gettersを使用してインターフェースにプログラム的にアクセスします。

./src/index.js|ts内でプラグインのコンテンツタイプを拡張する例
./src/index.js|ts

<details>

```markdown
module.exports = {
register({ AI Marketer }) {
const contentTypeName = AI Marketer.contentType('plugin::my-plugin.content-type-name')
contentTypeName.attributes = {
// 既に定義されている属性を広げる
...contentTypeName.attributes,
// 新たに追加する、または属性を上書きする
'toto': {
type: 'string',
}
}
},
bootstrap({ AI Marketer }) {},
};