プラグイン開発チートシート

プラグインを書いていると「これはどのファイルに書けばいいの?どの API を呼べばいいの?」と迷うことがよくあります。このチートシートで素早く確認できます。

プラグインのディレクトリ構成

yarn pm create @my-project/plugin-name でプラグインを作成すると、以下のディレクトリ構成が自動生成されます。手動でディレクトリを作成しないでください。登録手順の漏れでプラグインが動作しなくなります。詳しくははじめてのプラグインを書くをご覧ください。

plugin-name/
├── src/
   ├── client-v2/              # クライアントコード(v2)
   ├── plugin.tsx          # クライアントプラグインエントリ
   ├── locale.ts           # useT / tExpr 翻訳 hook
   ├── models/             # FlowModel(ブロック、フィールド、操作)
   └── pages/              # ページコンポーネント
   ├── client/                 # クライアントコード(v1、互換性用)
   ├── plugin.tsx
   ├── locale.ts
   ├── models/
   └── pages/
   ├── server/                 # サーバーサイドコード
   ├── plugin.ts           # サーバープラグインエントリ
   └── collections/        # データテーブル定義
   └── locale/                 # 多言語翻訳ファイル
       ├── zh-CN.json
       └── en-US.json
├── client-v2.js                # ルートエントリ(ビルド成果物の参照先)
├── client-v2.d.ts
├── client.js
├── client.d.ts
├── server.js
├── server.d.ts
└── package.json

クライアント:やりたいこと → 書き方

やりたいことどのファイルに書くか呼び出す APIドキュメント
ページルートを登録するplugin.tsxload()this.router.add()Router
プラグイン設定ページを登録するplugin.tsxload()pluginSettingsManager.addMenuItem() + addPageTabItem()Router
カスタムブロックを登録するplugin.tsxload()this.flowEngine.registerModelLoaders()FlowEngine → ブロック拡張
カスタムフィールドを登録するplugin.tsxload()this.flowEngine.registerModelLoaders()FlowEngine → フィールド拡張
カスタム操作を登録するplugin.tsxload()this.flowEngine.registerModelLoaders()FlowEngine → 操作拡張
内部テーブルをブロックのデータテーブル選択に表示するplugin.tsxload()mainDS.addCollection()Collections データテーブル
プラグインのテキストを翻訳するlocale/zh-CN.json + locale/en-US.jsoni18n 国際化

サーバーサイド:やりたいこと → 書き方

やりたいことどのファイルに書くか呼び出す APIドキュメント
データテーブルを定義するserver/collections/xxx.tsdefineCollection()Collections データテーブル
既存のデータテーブルを拡張するserver/collections/xxx.tsextendCollection()Collections データテーブル
カスタム API を登録するserver/plugin.tsload()this.app.resourceManager.define()ResourceManager
API の権限を設定するserver/plugin.tsload()this.app.acl.allow()ACL アクセス制御
プラグインインストール時に初期データを投入するserver/plugin.tsinstall()this.db.getRepository().create()Plugin プラグイン

FlowModel チートシート

やりたいこと継承する基底クラス主な API
純粋な表示ブロックを作るBlockModelrenderComponent() + define()
データテーブルにバインドするブロックを作る(カスタムレンダリング)CollectionBlockModelcreateResource() + renderComponent()
完全なテーブルブロックを作る(組み込みテーブルをベースにカスタマイズ)TableBlockModelfilterCollection() + customModelClasses
フィールド表示コンポーネントを作るClickableFieldModelrenderComponent(value) + bindModelToInterface()
操作ボタンを作るActionModelstatic scene + registerFlow({ on: 'click' })

翻訳メソッドチートシート

シーン使うものインポート元
Plugin load()this.t('key')Plugin 基底クラスに組み込み済み
React コンポーネント内const t = useT(); t('key')locale.ts
FlowModel 静的定義(define()registerFlow()tExpr('key')locale.ts

よく使う API チートシート

やりたいことPlugin 内コンポーネント内
API リクエストを送るthis.context.api.request()ctx.api.request()
翻訳を取得するthis.t()useT()
ログを出力するthis.context.loggerctx.logger
ルートを登録するthis.router.add()
ページ遷移するctx.router.navigate()
ダイアログを開くctx.viewer.dialog()

関連リンク