Plugin プラグイン

NocoBase では、サーバーサイドプラグイン(Server Plugin) はサーバーサイドの機能を拡張するための主要な方法です。プラグインディレクトリの src/server/plugin.ts@nocobase/server が提供する Plugin 基底クラスを継承し、さまざまなライフサイクル段階でイベント、インターフェース、権限などのカスタムロジックを登録できます。

プラグインクラス

基本的なプラグインクラスの構造は以下の通りです:

import { Plugin } from '@nocobase/server';

export class PluginHelloServer extends Plugin {
  async afterAdd() {}

  async beforeLoad() {}

  async load() {}

  async install() {}

  async afterEnable() {}

  async afterDisable() {}

  async remove() {}

  async handleSyncMessage(message: Record<string, any>) {}

  static async staticImport() {}
}

export default PluginHelloServer;

ライフサイクル

プラグインのライフサイクルメソッドは以下の順序で実行され、各メソッドには特定の実行タイミングと用途があります:

ライフサイクルメソッド実行タイミング説明
staticImport()プラグインのロード前クラスの静的メソッドで、アプリケーションやプラグインの状態に依存しない初期化フェーズで実行されます。プラグインインスタンスに依存しない初期化作業に使用します。
afterAdd()プラグインが PluginManager に追加された直後に実行この時点ではプラグインインスタンスは作成されていますが、すべてのプラグインの初期化が完了しているわけではありません。基本的な初期化作業を実行できます。
beforeLoad()すべてのプラグインの load() の前に実行この時点ですべての有効化されたプラグインインスタンスにアクセスできます。データベースモデルの登録、データベースイベントのリッスン、ミドルウェアの登録などの準備作業に適しています。
load()プラグインのロード時に実行すべてのプラグインの beforeLoad() が完了した後に load() が開始されます。リソース、API インターフェースなどのコアビジネスロジックの登録に適しています(例:resourceManager によるカスタム REST API の登録)。注意: load() 段階ではデータベースの同期がまだ完了していないため、データベースのクエリや書き込み操作は実行できません。データベース操作は install() またはリクエスト処理関数内で行ってください。
install()プラグインが初めて有効化された時に実行プラグインが最初に有効化されたときに 1 回だけ実行されます。通常、データベーステーブル構造の初期化、初期データの挿入などのインストールロジックに使用します。install() は初回有効化時にのみ実行されます。後続のバージョンでテーブル構造の変更やデータ移行が必要な場合は、Migration アップグレードスクリプトを使用してください。
afterEnable()プラグインが有効化された後に実行プラグインが有効化されるたびに実行されます。定時タスクの開始、接続の確立などに使用できます。
afterDisable()プラグインが無効化された後に実行リソースのクリーンアップ、タスクの停止、接続のクローズなどに使用できます。
remove()プラグインが削除された時に実行アンインストールロジックの記述に使用します(例:データベーステーブルの削除、ファイルのクリーンアップなど)。
handleSyncMessage(message)マルチノードデプロイメント時のメッセージ同期アプリケーションがマルチノードモードで実行されている場合に、他のノードから同期されたメッセージを処理するために使用します。

実行順序の説明

ライフサイクルメソッドの典型的な実行フローは以下の通りです:

  1. 静的初期化フェーズstaticImport()
  2. アプリケーション起動フェーズafterAdd()beforeLoad()load()
  3. プラグイン初回有効化フェーズafterAdd()beforeLoad()load()install()
  4. プラグイン再有効化フェーズafterAdd()beforeLoad()load()
  5. プラグイン無効化フェーズ:プラグイン無効化時に afterDisable() が実行されます
  6. プラグイン削除フェーズ:プラグイン削除時に remove() が実行されます

app と関連メンバー

プラグイン開発では、this.app を通じてアプリケーションインスタンスが提供するさまざまな API にアクセスできます。これはプラグインの機能拡張のコア入口です。app オブジェクトにはシステムのさまざまな機能モジュールが含まれており、プラグインのライフサイクルメソッド内でこれらを使用できます。

app メンバーリスト

メンバー名型/モジュール主な用途
loggerLoggerシステムログの記録。info、warn、error、debug などのレベルをサポートします。詳細は Logger ログ を参照してください。
dbDatabaseORM 層の操作、モデル登録、イベントリッスン、トランザクション制御など。詳細は Database データベース を参照してください。
resourceManagerResourceManagerREST API リソースと操作ハンドラーの登録・管理。詳細は ResourceManager リソース管理 を参照してください。
aclACL権限、ロール、リソースアクセス戦略の定義。詳細は ACL 権限制御 を参照してください。
cacheManagerCacheManagerシステムレベルのキャッシュ管理。Redis、メモリキャッシュなど複数のバックエンドをサポートします。詳細は Cache キャッシュ を参照してください。
cronJobManagerCronJobManager定時タスクの登録と管理。Cron 式をサポートします。詳細は CronJobManager 定時タスク を参照してください。
i18nI18n多言語翻訳とローカライゼーション。詳細は I18n 国際化 を参照してください。
cliCLIカスタムコマンドの登録。NocoBase CLI を拡張します。詳細は Command コマンドライン を参照してください。
dataSourceManagerDataSourceManager複数のデータソースインスタンスとその接続の管理。詳細は DataSourceManager データソース管理 を参照してください。
pmPluginManagerプラグインの動的なロード、有効化、無効化、削除、およびプラグイン間の依存関係の管理。
提示

各モジュールの詳細な使用方法については、対応するドキュメントの章を参照してください。

関連リンク