マニフェスト (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" | 対象スペース種別 |
category | PluginSidebarCategory | サイドバーカテゴリ(25 種)。プラグインの居場所を決める |
displayName | string | UI 表示名 |
description | string | 1〜2 行の説明 |
iconName | string | lucide-react のアイコン名 |
defaultRole | "PROVIDER" | "CLIENT" | "LOCAL" | 有効化時の既定ロール(下記参照) |
audiences | PluginAudience[] | 役割別(executive / employee / customer)のナビ・タブ宣言。最低 1 件必須 |
tables | PluginTableDef[] | プラグイン専用テーブル定義(不要なら [])。命名規則・自動付与列は データモデル を参照 |
paletteMetadata | PluginPaletteMetadata | 統合パレット検索用メタデータ(必須、下記) |
scopeにPRIVATEは無い: 提供元区分(scope)はOFFICIAL/CERTIFIEDの 2 値のみです。「無料で全スペース公開 / 有償で指定スペースのみ」という提供範囲の軸はvisibilityとplugin_allowed_workspace(admin が管理)が担い、scopeとは独立した別軸です。両者を混同しないでください。
paletteMetadata(必須)
統合パレットがプラグイン発見の主導線のため必須です。これが無いと検索結果に一切出てきません。niyase-plugin lint が未付与を検出します。
| フィールド | 型 | 目安 |
|---|---|---|
intentTags | string[] | 具体語のフリーテキスト 5〜15 個(例: 「経費精算したい」「領収書を仕訳に」) |
intentCategories | IntentCategory[] | 大分類 enum 1〜3 個(多すぎるとランキングが拡散する) |
capabilityKeywords | string[] | 機能ワード(例: 「OCR」「PDF」「CSV インポート」) |
scenarios | string[] | 業務シーン語(例: 「月次締め」「決算期」) |
primaryFlow? | string | パレットから選択された時に起動する最有力フロー ID(任意) |
任意フィールド
| フィールド | 型 | 説明 |
|---|---|---|
categoryTags? | PluginSidebarCategory[] | 検索用の追加カテゴリタグ |
industries? | Industry[] | 業種タグ。発見ラベルに過ぎず、インストール可否は制限しません(IT 企業が「不動産業向け」を入れることも可)。空/未指定 = 全業種向け |
longDescription? | string | マーケットプレイス詳細ページ向けの長文説明(Markdown 可) |
requiresCloud? | boolean(既定 false) | true でクラウド限定(クラウドスペースのみインストール可)。false(既定)はハイブリッド(ローカル・クラウド両方に導入可) |
pairedPluginId? | string | PROVIDER ↔ CLIENT のペア紐付け。指定する場合は requiresCloud: true が必須(zod がこの整合を強制します) |
publisherName? | string | 提供者表示名(CERTIFIED 用。OFFICIAL は自動的に "niyase") |
version? | string | semver |
bundleUrl? / bundleHash? | string | CERTIFIED の動的ロード用 URL と整合性検証用ハッシュ(submission 時にサーバーが設定) |
scheduleProvider? | ScheduleProviderDecl[] | ホームの「スケジュール」ビューに、自プラグインのテーブルの期日列を横断集約させるための宣言 |
industryPresets? | PluginIndustryPreset[] | 廃止(2026-05-30)。旧・業種別マスタ/追加テーブルの仕組み。新規プラグインでは使いません。マスタデータの投入方法は データモデル を参照 |
defaultRole と pairedPluginId — 動作パターンの宣言
プラグインは「単独」か「PROVIDER-CLIENT(2 社協業)」のいずれかの動作パターンを取ります。
defaultRole | 意味 | pairedPluginId | requiresCloud |
|---|---|---|---|
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)です。