カスタムエディタ
どのパネルにも存在しない、あなただけの業務があります。仕入先の計算式による価格の再計算、外部の会計システムとのカタログ照合、ロットの特性を一括で入力する画面などです。**「カスタムエディタ」**セクションでは、そのようなミニエディタを自分で作成し(または依頼し)、管理画面内で実行できます。サンドボックス内で、許可したデータだけにアクセスできます。
開くには:管理パネル → カスタムエディタ(admin.cenaly.com/custom-editors)。このセクションはアプリストアの**「カスタムエディタ(SDK)」カードで有効になります。デフォルトでは非表示です。ページ上の「📌 サイドバーに追加」**ボタンで、頻繁に使う場合にサイドメニューへ移動できます。
このセクションとは#
プラグインは、ビルド済みスクリプト(index.js)とその説明(manifest.json)で構成されます。パネルはスクリプトを分離されたフレームに読み込みます。フレームはあなたのセッション、管理画面のコード、ネットワークのいずれにもアクセスできません。データとやり取りできるのはブリッジを通じてのみで、許可されたリクエストのセットであり、それぞれが付与された権限に基づいて検証されます。
ページは以下のブロックで構成されています:
| ブロック | 内容 |
|---|---|
| インストール済みエディタ | プラグインのカード:名前、「バージョン」、「権限」、「配置」、「許可されたネットワークホスト」、「更新日」、ソース(リポジトリとタグへのリンク)。操作:「開く」、「有効化」/「無効化」、更新の確認、「削除」 |
| エディタをインストール | ディスク上のファイルからのインストール |
| GitHub からインストール | 公開リポジトリのアドレスとタグによるインストール |
| 🤖 AI による開発(バイブコーディング) | プロジェクトテンプレート、AI エージェント用プロンプト、テストデータとしてのカタログスナップショット |
| 👩💻 開発者アクセス | 開発モードに対する請負業者への一時的なグラント |
| 🛠️ 開発モード | インストールせずに、あなたのコンピュータから直接プラグインを実行 |
開いたエディタは全画面を占め、ページのアドレスには ?app=<識別子> が付きます。このリンクはアクセス権を持つ人と共有できます。
起動に必要なもの#
| 項目 | 理由 |
|---|---|
| アプリストアの**「カスタムエディタ(SDK)」**カード | このセクションはニッチであり、デフォルトでは無効です |
| あなたがアカウントのオーナーであること | プラグインのインストール、有効化、削除、グラントの発行はオーナーのみが行えます。従業員は読み取り専用のリストを表示できます |
ビルド済みプラグイン:index.js + manifest.json |
あなた自身、開発者、または公開 GitHub リポジトリのリリースのいずれか |
| 開発の場合 — 開発者用の従業員アカウント | 開発モードは、その作業ログインのメールアドレスに対して発行されます |
ステップ 1. 誰がエディタを書くかを決める#
3 つの方法があり、コードを誰が保持するかが異なります:
| 方法 | 向いている人 | 方法 |
|---|---|---|
| 当社のテンプレートを使った AI エージェント | タスクを言葉で説明できるオーナー | 「AI による開発」ブロック:テンプレート + プロンプト → エージェントがリリースをビルド → あなたがインストール |
| 自身または外部の開発者 | 請負業者またはチーム内に開発者がいる | 開発モードのグラントを発行し、開発者が実際のアカウントで作成・デバッグし、あなたが完成したリリースをインストール |
| GitHub からの既成リリース | プラグインがすでに書かれている(あなたまたはあなたのために) | 「GitHub からインストール」:リポジトリのアドレスとタグ |
3 つのケースすべてで、インストールはオーナーが行います。グラントを持つ開発者であっても、自分の開発モードでコードを実行できるだけで、アカウントにインストールすることはできません。
ステップ 2. AI による開発(バイブコーディング)#
**「🤖 AI による開発(バイブコーディング)」**ブロックは、AI エージェント(Claude Code、Cursor など)にタスクを渡し、コントラクトをゼロから説明する手間を省くための 4 つを提供します:
- 「⬇️ プロジェクトテンプレートをダウンロード(zip)」 — プラグインの既成の骨組み:マニフェスト、エントリポイント、コントラクトの説明(
GUIDE.en.md)、エージェント用の指示。アーカイブはブラウザ内で直接作成され、外部から何もダウンロードする必要はありません。 - 「📋 エージェント用プロンプトをコピー」 — 英語のタスクテキスト:テンプレートから開始し、ガイドと照合し、結果をどう検証するか。
- エージェント用ツールセットの設定 — これによりエージェントはプラグインをビルドし、サンドボックスのローカルスタンドコピーを立ち上げ、スクリーンショットと状態スナップショットを撮り、最後にリリースをビルドします:手動インストール用の zip または GitHub のリリース。
- 「⬇️ カタログスナップショットをダウンロード(テストフィクスチャ)」 — あなたのカテゴリとアイテムをファイルとして提供し、エージェントが架空のデータではなく実際のデータでテストできるようにします。
⚠️ スナップショットからは他のプラグインのカスタムフィールドが完全に除外されます。他の拡張機能があなたのカードに保存しているデータは、フィクスチャとともにアカウントから出ることはありません。
ステップ 3. エディタをインストール#
ファイルから。 「エディタをインストール」ブロック:「バンドル(index.js)」と「マニフェスト(manifest.json)」を選択 → 「確認してインストール」。パネルはまずマニフェストを検証します — 識別子、ローカライズされた名前、バージョン、SDK の最小バージョン、配置、権限、ネットワークホストのリスト — その後コンセントを表示します:「このエディタが要求するもの:」と権限のリストを平易な言葉で示します。「インストール」を押すまで、何もインストールされません。
GitHub から。 「GitHub からインストール」ブロック:「リポジトリ(URL または owner/repo)」フィールド、「タグ(空 = 最新リリース)」フィールド、「リポジトリを確認」ボタン。規約はシンプルです:リポジトリのルートに manifest.json、タグにビルド済みの dist/index.js、タグは v{バージョン} の形式。マニフェストとバンドルはあなたのブラウザから直接取得されます。どちらの場合も、インストール時に**バンドルのフィンガープリント(sha256)**が計算され記憶されます。後でファイルが差し替えられた場合、実行はブロックされ、パネルはエディタの再インストールを求めます。
権限と配置場所#
権限(スコープとも呼ばれます)はプラグインがマニフェストで要求し、インストール時にユーザーが承認します。全リストは以下のとおりで、ブリッジはこれ以上何もできません:
| 権限 | 開かれるもの |
|---|---|
| カタログの読み取り | カテゴリ、アイテム、特性、カードのカスタムフィールド |
| カタログアイテムの作成と変更 | アイテムの作成と編集、バッチインポート、独自フィールドと特性定義 |
| 店舗ごとの価格・在庫状況・ストップリストの変更 | 店舗メニューのパネルが行うことと同じ |
| 商品の倉庫台帳の読み取り | 倉庫の品目を読み取り専用で |
| 独自設定をユーザーのストレージに保存 | アカウント内のプラグイン独自キー(キーあたり最大1 MB) |
| 拡張機能のサーバーサイド | 当社サーバー上でのプラグインコードの呼び出し — プラグインがインターネットにアクセスする唯一の方法 |
リストにまったくないものは、どのような設定でもプラグインは取得できません:ゲストと顧客、注文、領収書、財務、従業員、メッセージのやり取り、通話をブリッジは渡しません。
配置場所(スロット)は三つ:
| スロット | 表示される場所 |
|---|---|
| 専用ページ | 「カスタムエディタ」セクション内の項目で、全画面で開きます |
| カタログページのボタン | アイテムカタログの隣のツール |
| 「倉庫」セクションのタブ | プラグインが倉庫のタブとして描画されます — 当社の組み込み拡張機能「VetIS」はこの形式です |
開発者モードと委託先へのアクセス#
開発者モード(「🛠️ 開発者モード」ブロック)はプラグインをお使いのコンピュータから直接マウントします:「バンドルURL」フィールドはlocalhost / 127.0.0.1のアドレスのみを受け付け、隣に「マニフェストのJSON」、ボタン「devセッションを開始」があります。この場合フィンガープリントは固定されず、セッションはタブを閉じるまで有効です。「devセッションを停止」で即座に終了します。
開発者へのグラント(「👩💻 開発者アクセス」ブロック)は、オーナー以外が開発する場合に必要です。開発者用に通常の従業員アカウントを作成し、その後オーナーがグラントを発行します:「開発者のメール(そのstaffログイン)」、「許可する権限」、「有効期限(日数)」、任意のメモ → 「アクセスを付与」。いつでも「取り消す」ボタンで取り消せます。
グラントが与えるもの、与えないもの:
- 与える — チェックした権限での開発者モードのみ(デフォルト期間は14日、最大90日);
- 権限は積集合で絞られます:マニフェストが要求するものかつグラントで付与されたもの。マニフェストで要求しても、余分な権限はプラグインに与えられません;
- 与えない — プラグインのインストール、有効化、削除:これはオーナーに残ります。
更新、有効化、削除#
| 操作 | 方法 |
|---|---|
| 開く | カードの「開く」ボタン(または?app=…付きリンク) |
| 一時的に無効化 | 「無効化」 — プラグインはインストールされたままですが、実行されず、配置場所にも表示されません |
| 更新 | GitHubからのプラグインは「更新を確認」、次に「…に更新」;バージョンが最新の場合、パネルは「最新バージョンがインストールされています」と表示します。ファイルからのプラグインは再インストールで更新されます |
| 削除 | 確認付きの「削除」:設定と項目が削除され、アップロード済みリリースはストレージに残ります |
自動更新は意図的にありません:他人のコードの新バージョンは新しいフィンガープリントであり、場合によっては新しい権限でもあるため、更新は常にオーナーの意識的な操作です。
組み込み拡張機能#
当社自身のモジュールの一部は同じ形式でパッケージされています — 挙動からそれがわかりますが、インストールする必要はありません:これらはパネルと一緒に配布され、このセクションではなくアプリストアのカードで有効化されます。
現在そのようなモジュールは一つ — ロシア向けの**「Mercury/VetIS」**です:「倉庫」セクションのタブとして存在し、同じサンドボックスと同じフィンガープリント検証で実行されます。組み込み拡張機能はインストール済みエディタのリストには含まれません。
エディタにできることとできないこと#
| できる | できない |
|---|---|
| 付与された権限の範囲内でカタログを読み取り、変更する | パスワードを知ることやセッションを利用すること |
| 独自のインターフェース、通知、確認リクエストを表示する | 周囲の管理画面のコードやデータを開くこと |
| パネルのネイティブなアイテムエディタを開く | プラグインのウィンドウから直接インターネットにアクセスすること |
| 独自設定をアカウントに保存する | カード上で別のプラグインのデータを見ること |
| サーバーサイドを通じてインターネットにアクセスする — しかもマニフェストに列挙されたhttpsアドレスのみ(最大八つ) | ファイルの差し替え後に実行されること:フィンガープリントの不一致が起動をブロックします |
サードパーティのプラグインはカード上で警告が表示されます:「サンドボックス内のサードパーティアプリ — パスワードを求めることは決してありません。」 プラグインがパネルのログイン情報、支払いデータ、SMSコードを求める場合、それは拡張機能の動作ではなく詐欺です。
制限事項#
- このセクションはデフォルトで無効であり、コードを書く人(またはその依頼をする人)向けです。一般のオーナーがここでやることはありません。
- 閲覧以外はすべてアカウントのオーナーのみ。 従業員はハブを読み取り専用で閲覧でき、開発者モードは有効なグラントがある場合のみ利用できます。
- プライベートGitHubリポジトリには対応していません — リポジトリは公開である必要があり、インストールはタグ単位で行われます。
- 自動更新はありません:プラグインの更新は常にオーナーが実行します。
- 他人のプラグインのストアはありません。 既製の拡張機能はパネルを通じて公開・販売されません — ソースはご自身のファイルまたはリポジトリのみです。
- スロットは3つ(専用ページ、カタログのボタン、倉庫のタブ)— パネルの任意の画面にプラグインを組み込むことはできません。
- ブリッジはゲスト、注文、財務、従業員、やり取りを渡しません — 権限でこれを回避することはできず、そもそもそのようなリクエストは存在しません。
- 「プラグインが何をしたか」という専用のログはありません。 権限はカードに表示され、カタログの変更は通常のアイテム履歴に記録されます。管理が必要な場合は、読み取り専用の権限のみを付与したプラグインから始めてください。
- 技術的な上限: バンドルは最大4 MB、マニフェスト内のネットワークアドレスは最大8件、ストレージの1キーあたり最大1 MB、サーバー実行は最大30秒で1回あたり最大50件のインターネットリクエスト。
- プラグインデータはお客様のブランドのクラウドに残ります:
cenaly.ruのアカウントでは、サーバー側の状態はロシアの領域に保存されます。
トラブルシューティング#
| 症状 | 確認事項 |
|---|---|
| メニューにセクションがない | アプリストアで「カスタムエディター(SDK)」カードが有効になっているか。「📌 サイドバーへ」ボタンでセクションを配置したか |
| 従業員にインストールボタンが表示されない | これは仕様です。インストール、削除、グラントはアカウントのオーナーのみが行えます |
| 「ストレージ内のバンドルがインストール済みのフィンガープリントと一致しません。起動をブロックしました」 | インストール後にプラグインファイルが差し替えられています — 新しいフィンガープリントを記録するためエディターを再インストールしてください |
| 「エディターが時間内に起動しませんでした(10秒以内に connect() がありません)」 | プラグインが接続できていません。コードのエラーか、誤ったファイルがビルドされています |
| 「エディターのバンドルを読み込めませんでした」 | リリースが利用できないか、ファイルが破損しています — 再インストールしてください |
?app=… のリンクにアクセスした際に「エディターが見つからないか無効です」 |
プラグインが削除されているか、カードで無効になっています |
| 「GitHubからエディターを取得できませんでした」 | リポジトリがプライベート、ルートに manifest.json がない、タグに dist/index.js がない、またはタグが v{バージョン} の命名規則に従っていない |
| 「許可されるのは localhost / 127.0.0.1 のアドレスのみです」 | 開発者モードは外部アドレスを意図的に受け付けません — ビルドをローカルで起動してください |
| プラグインが必要なデータを認識しない | カードの「権限」を確認してください。グラントを持つ開発者の権限は、さらにグラントとの積集合で制限されます |
| プラグインが外部サービスにアクセスできない | サンドボックスから直接ネットワークには出られません。アクセスはサーバー側で行い、アドレスはマニフェストに記載する必要があります |
| 「エディターが未保存の変更を報告しています。それでも閉じますか?」 | プラグイン自体が下書きを通知しています — 閉じる前にプラグイン内で作業を保存してください |
よくある質問#
プログラミングのスキルは必要ですか?#
既製のリリースをインストールするだけなら不要です。リリース自体を用意するには必要です。リリースは「AIによる開発」ブロックのテンプレートに沿って、開発者またはAIエージェントが作成します。このセクションはコードのためのツールであり、「マウス操作」のコンストラクターではありません。
他人のプラグインが自分の顧客や売上を見ることはできますか?#
いいえ。プラグインはサンドボックス内で動作し、データはブリッジを通じてのみ取得します。ブリッジができることはちょうど6つです:カタログ、価格とストップリスト、倉庫の台帳、自身のストレージ、自身のサーバー側の呼び出し、インターフェース要素。ゲスト、注文、領収書、財務、従業員、やり取りはそもそも存在しません。特定のプラグインに何が許可されているかは、常にカードの「権限」の行で確認できます。
開発を請負業者に任せつつ、アカウント全体に入れないようにするには?#
その人に従業員のアカウントを作成し、「開発者アクセス」ブロックでグラントを発行します。必要な権限だけを選択し、期間を設定します(デフォルトは14日、最大90日)。その人は開発者モードのみを取得し、それ以上は何も得られません。プラグインのインストールは依然としてお客様が行います。グラントは1つのボタンで取り消せます。
作者が新しいバージョンをリリースしたら、プラグインは自動で更新されますか?#
いいえ。更新はオーナーが実行します:「更新を確認」→「…に更新」。こうすることで、人の関与なしに新しいバージョンがアカウントに現れることはありません — バージョンとともに要求される権限も変わる可能性があるためです。
プラグインは設定とデータをどこに保存しますか?#
お客様のアカウント内の、その識別子専用のストレージ(1キーあたり最大1 MB)に保存され、さらにプラグインがそれらを使用する場合は、お客様のカードのカスタムフィールドにも保存されます — 各プラグインは自分の領域のみを認識します。cenaly.ru のアカウントでは、サーバー側とその状態はロシアの領域に留まります。
APIやMCPとは何が違いますか?#
開発者向けAPIと自社PBXのMCPは、プログラムが外部で動作する場合に必要です:自社サイト、他社のアカウントシステム、AIエージェントなど。カスタムエディターは逆に、パネル内部のインターフェースです。従業員は通常の管理画面ページとして開き、作業ウィンドウから離れることはありません。
関連セクション#
- アプリストア — セクションと組み込み拡張機能を有効にする場所
- 倉庫 — 「VetIS」などの拡張機能が存在するタブと、商品の台帳
- カタログのインポート — タスクがこれだけであれば、アイテムを読み込む標準的な方法
- 自社コードのショーケース(headless) — 外部サイト向けのオープンなデータコントラクト
- 自社PBXのAPIとMCPとAIエージェント向けGuest API — パネル内部ではなく外部での作業
- 従業員とシフト — 開発者用アカウントとロール
- セキュリティとデータ — データの保存場所とアクセス権を持つ人
- サポート — プラグインが不審な動作をする場合の連絡先