logologo
スタート
マニュアル
開発
プラグイン
API
English
简体中文
日本語
한국어
Deutsch
Français
Español
Português
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
スタート
マニュアル
開発
プラグイン
API
logologo

クイックスタート

プラグイン開発概要
最初のプラグインを作成
プロジェクトディレクトリ構造

サーバーサイド開発

概要
プラグイン
コレクション
データベース操作
データソース管理
リソース管理
ACL権限制御
ミドルウェア
キャッシュ
イベント
リクエストコンテキスト
マイグレーション
ロガー
I18n 国際化
コマンド
定時タスク管理
テスト

クライアントサイド開発

概要
プラグイン
コンテキスト
ルーター
ACL権限制御
データソース管理
リソース
リクエスト
スタイルとテーマ
ロガー
I18n 国際化
テスト

その他

プラグインアップグレードガイド
言語一覧
依存関係の管理
ビルド
Previous PageI18n 国際化
Next Page定時タスク管理
TIP

このドキュメントはAIによって翻訳されました。不正確な情報については、英語版をご参照ください

#コマンド

NocoBase では、コマンドはアプリケーションやプラグインに関連する操作をコマンドラインで実行するために使われます。例えば、システムタスクの実行、マイグレーションや同期操作、設定の初期化、あるいは実行中のアプリケーションインスタンスとの連携などに利用できます。開発者はプラグイン用にカスタムコマンドを定義し、app オブジェクトを通じて登録できます。これらのコマンドはCLIで nocobase <command> の形式で実行します。

#コマンドの種類

NocoBase では、コマンドの登録方法は以下の2種類に分けられます。

タイプ登録方法プラグインの有効化が必要か典型的なシナリオ
動的コマンドapp.command()✅ 必要プラグインのビジネス関連コマンド
静的コマンドApplication.registerStaticCommand()❌ 不要インストール、初期化、メンテナンスコマンド

#動的コマンド

app.command() を使ってプラグインコマンドを定義します。これらのコマンドは、プラグインが有効化されてから実行できます。コマンドファイルはプラグインディレクトリ内の src/server/commands/*.ts に配置してください。

#示例

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

export default function (app: Application) {
  app
    .command('echo')
    .option('-v, --version')
    .action(async ([options]) => {
      console.log('Hello World!');
      if (options.version) {
        console.log('Current version:', await app.version.get());
      }
    });
}

#説明

  • app.command('echo'):echo という名前のコマンドを定義します。
  • .option('-v, --version'):コマンドにオプションを追加します。
  • .action():コマンドの実行ロジックを定義します。
  • app.version.get():現在のアプリケーションバージョンを取得します。

#コマンドの実行

nocobase echo
nocobase echo -v

#静的コマンド

Application.registerStaticCommand() を使って登録します。静的コマンドはプラグインを有効化しなくても実行でき、インストール、初期化、マイグレーション、デバッグなどのタスクに適しています。プラグインクラスの staticImport() メソッド内で登録します。

#示例

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

export default class PluginHelloServer extends Plugin {
  static staticImport() {
    Application.registerStaticCommand((app: Application) => {
      app
        .command('echo')
        .option('-v, --version')
        .action(async ([options]) => {
          console.log('Hello World!');
          if (options.version) {
            console.log('Current version:', await app.version.get());
          }
        });
    });
  }
}

#コマンドの実行

nocobase echo
nocobase echo --version

#説明

  • Application.registerStaticCommand() は、アプリケーションがインスタンス化される前にコマンドを登録します。
  • 静的コマンドは通常、アプリケーションやプラグインの状態に依存しないグローバルなタスクを実行するために使われます。

#コマンドAPI

コマンドオブジェクトは、コマンドの実行コンテキストを制御するための3つのオプションのヘルパーメソッドを提供します。

メソッド役割例
ipc()実行中のアプリケーションインスタンスと通信(IPC経由)app.command('reload').ipc().action()
auth()データベース設定が正しいか検証app.command('seed').auth().action()
preload()アプリケーション設定をプリロード(app.load()を実行)app.command('sync').preload().action()

#設定の説明

  • ipc()
    デフォルトでは、コマンドは新しいアプリケーションインスタンスで実行されます。
    ipc() を有効にすると、コマンドはプロセス間通信(IPC)を通じて現在実行中のアプリケーションインスタンスと連携します。これは、キャッシュの更新や通知の送信といったリアルタイム操作コマンドに適しています。

  • auth()
    コマンド実行前にデータベース設定が利用可能かチェックします。
    データベース設定が誤っているか、接続に失敗した場合、コマンドはそれ以上実行されません。データベースへの書き込みや読み取りを伴うタスクでよく使われます。

  • preload()
    コマンド実行前にアプリケーション設定をプリロードします。これは app.load() の実行に相当します。
    設定やプラグインのコンテキストに依存するコマンドに適しています。

その他のAPIメソッドについては、AppCommand を参照してください。

#よくある例

#デフォルトデータの初期化

app
  .command('init-data')
  .auth()
  .preload()
  .action(async () => {
    const repo = app.db.getRepository('users');
    await repo.create({ values: { username: 'admin' } });
    console.log('Initialized default admin user.');
  });

#実行中のインスタンスにキャッシュを再ロードさせる(IPCモード)

app
  .command('reload-cache')
  .ipc()
  .action(async () => {
    console.log('Requesting running app to reload cache...');
  });

#インストールコマンドの静的登録

Application.registerStaticCommand((app) => {
  app
    .command('setup')
    .action(async () => {
      console.log('Setting up NocoBase environment...');
    });
});