開発者ドキュメント
マニフェスト·

マニフェスト (PluginManifest)

manifest.ts と defineManifest() で宣言する PluginManifest の必須・任意フィールド全量と zod 検証。

manifest.ts はプラグインの SSOT(Single Source of Truth) です。 defineManifest() で型補完を効かせながら宣言します。ここで宣言した内容から、テーブル・サイドメニュー・タブ・権限・統合パレットへの露出まで、プラグインのほぼ全体が導出されます。

// src/manifest.ts
import { defineManifest } from "@niyase/plugin-sdk/manifest";

export const manifest = defineManifest({
  id: "@your-org/tasks",
  scope: "CERTIFIED",
  visibility: "PUBLIC",
  targetWorkspace: "BUSINESS",
  category: "extension",
  displayName: "タスク",
  description: "シンプルな業務タスク管理",
  iconName: "ListTodo",
  defaultRole: "LOCAL",
  audiences: [
    {
      role: "executive",
      nav: {
        label: "タスク",
        href: "/plugin/tasks",
        activeColor: "text-primary",
      },
      tabs: [{ value: "list", label: "一覧" }],
    },
  ],
  tables: [
    {
      name: "task",
      resource: "task",
      columns: {
        title: { type: "TEXT", notNull: true },
        status: { type: "TEXT" },
      },
    },
  ],
  paletteMetadata: {
    intentTags: [
      "タスクを追加",
      "TODO 管理",
      "担当者を割り当て",
      "期限を設定",
      "進捗を確認",
    ],
    intentCategories: ["project"],
    capabilityKeywords: ["タスク管理", "TODO"],
    scenarios: ["朝の段取り", "週次レビュー"],
  },
});

必須フィールド

フィールド型説明
id@scope/nameグローバル一意 ID。scope は claim 済みの名前空間(公式は @niyase、認定は自社名等)
scope"OFFICIAL" | "CERTIFIED"提供元区分。niyase 製か、外部開発者 + niyase 審査済みか
visibility"PUBLIC" | "PRIVATE"マーケット可視性。PUBLIC は全スペースから検索・有効化可能、PRIVATE は許可したスペースのみに表示
targetWorkspace"BUSINESS" | "PERSONAL" | "BOTH"対象スペース種別
categoryPluginSidebarCategoryサイドバーカテゴリ(25 種)。プラグインの居場所を決める
displayNamestringUI 表示名
descriptionstring1〜2 行の説明
iconNamestringlucide-react のアイコン名
defaultRole"PROVIDER" | "CLIENT" | "LOCAL"有効化時の既定ロール(下記参照)
audiencesPluginAudience[]役割別(executive / employee / customer)のナビ・タブ宣言。最低 1 件必須
tablesPluginTableDef[]プラグイン専用テーブル定義(不要なら [])。命名規則・自動付与列は データモデル を参照
paletteMetadataPluginPaletteMetadata統合パレット検索用メタデータ(必須、下記)

scope に PRIVATE は無い: 提供元区分(scope)は OFFICIAL / CERTIFIED の 2 値のみです。「無料で全スペース公開 / 有償で指定スペースのみ」という提供範囲の軸は visibility と plugin_allowed_workspace(admin が管理)が担い、scope とは独立した別軸です。両者を混同しないでください。

paletteMetadata(必須)

統合パレットがプラグイン発見の主導線のため必須です。これが無いと検索結果に一切出てきません。niyase-plugin lint が未付与を検出します。

フィールド型目安
intentTagsstring[]具体語のフリーテキスト 5〜15 個(例: 「経費精算したい」「領収書を仕訳に」)
intentCategoriesIntentCategory[]大分類 enum 1〜3 個(多すぎるとランキングが拡散する)
capabilityKeywordsstring[]機能ワード(例: 「OCR」「PDF」「CSV インポート」)
scenariosstring[]業務シーン語(例: 「月次締め」「決算期」)
primaryFlow?stringパレットから選択された時に起動する最有力フロー ID(任意)

任意フィールド

フィールド型説明
categoryTags?PluginSidebarCategory[]検索用の追加カテゴリタグ
industries?Industry[]業種タグ。発見ラベルに過ぎず、インストール可否は制限しません(IT 企業が「不動産業向け」を入れることも可)。空/未指定 = 全業種向け
longDescription?stringマーケットプレイス詳細ページ向けの長文説明(Markdown 可)
requiresCloud?boolean(既定 false)true でクラウド限定(クラウドスペースのみインストール可)。false(既定)はハイブリッド(ローカル・クラウド両方に導入可)
pairedPluginId?stringPROVIDER ↔ CLIENT のペア紐付け。指定する場合は requiresCloud: true が必須(zod がこの整合を強制します)
publisherName?string提供者表示名(CERTIFIED 用。OFFICIAL は自動的に "niyase")
version?stringsemver
bundleUrl? / bundleHash?stringCERTIFIED の動的ロード用 URL と整合性検証用ハッシュ(submission 時にサーバーが設定)
scheduleProvider?ScheduleProviderDecl[]ホームの「スケジュール」ビューに、自プラグインのテーブルの期日列を横断集約させるための宣言
industryPresets?PluginIndustryPreset[]廃止(2026-05-30)。旧・業種別マスタ/追加テーブルの仕組み。新規プラグインでは使いません。マスタデータの投入方法は データモデル を参照

defaultRole と pairedPluginId — 動作パターンの宣言

プラグインは「単独」か「PROVIDER-CLIENT(2 社協業)」のいずれかの動作パターンを取ります。

defaultRole意味pairedPluginIdrequiresCloud
LOCAL単独プラグイン。自スペース内で完結不要任意(クラウド機能に依存するなら true にできる)
PROVIDER協業の提供側。データを集約し CLIENT と共有する対の CLIENT プラグイン ID を指定true 必須
CLIENT協業の受け手側。PROVIDER が共有したデータのみ見える対の PROVIDER プラグイン ID を指定true 必須

有効化時にユーザーが選ぶロールとは別に、defaultRole は「このプラグインを有効化したときの既定ロール」を宣言します。PROVIDER / CLIENT のペアは必ずクラウド限定(requiresCloud: true)になります——ローカルスペースには相手方が存在しえないためです。ロールと、UI に表示される executive / employee / customer の関係は UI 統合 を参照してください。

検証

niyase-plugin lint が validateManifest()(zod)でマニフェストを検証します。 これは申請時にサーバー側が使うバリデータと同一なので、lint が通れば申請も通ります。

niyase-plugin lint
# ✓ tsc --noEmit
# ✓ manifest 検証 OK (@your-org/tasks)

型定義の正本は packages/plugins/src/types.ts(PluginManifest)です。