ReadAware

プラグインをビルドする

まず役立つアクションを1つ作ります。機能、権限、ランタイムの動作が見える状態を保ちながら拡張してください。

テンプレートと型を取得する

公開プラグインリポジトリにはテンプレート、宣言、レジストリ、パッケージチェックがあります。未公開APIについては現在のソース契約と比較し、対応する開発ビルドを使ってください。最新の公開アプリはこのドキュメントより古い場合があります。

リポジトリのスクリプトにはBunを使います。template/をplugins/<your-plugin-id>/へコピーし、ディレクトリ名をマニフェストIDと一致させてください。

最小限のコマンド

この例は有効化中にコマンドを登録し、ユーザーが実行したときだけUI効果を発生させます。

json
{
  "id": "hello-reader",
  "name": "Hello Reader",
  "version": "0.1.0",
  "schemaVersion": 1,
  "main": "main.js",
  "requires": {
    "contributions": { "commands": "^1.1.0" },
    "services": { "ui": "^1.17.0" }
  }
}
typescript
export default {
  activate(ctx) {
    ctx.contributions.commands.register({
      id: "hello",
      title: "Say hello",
      run: () => ctx.services.ui.showToast("Hello, reader!"),
    });
  },
};

エントリモジュールを自己完結したmain.jsへコンパイルします。上のマニフェストは現在文書化されているバージョンを意図的に要求しています。古い範囲を使うのは、その契約を確認してテストしてからにしてください。

必要最小限の権限を追加する

Explorerでメソッドを探し、開始用マニフェスト断片をコピーします。断片は機能を宣言するものです。個々の操作に必要な付与を補完してください。

  • ライブラリデータの読み取りにはlibrary:read、変更にはlibrary:writeが必要です。
  • 設定では正確なsettingsAccessのパスと操作を使います。
  • 任意のHTTPにはservice:networkと、許可されたnetworkAccess.originsが必要です。
  • 権限不要のUIサービスにある読書関連メソッドでも、reading:readまたはreading:writeが必要な場合があります。
  • 本の付与はホストの同意で選択され、ctx.grants.bookに公開されます。マニフェストから別の本へのアクセスを自分に与えることはできません。

ctx.capabilitiesを確認し、任意の名前空間が存在しない場合を処理します。ReadAwareが所有するデータはドメインで扱い、プラグインストレージは独自のレコード、設定、チェックポイントに使ってください。

観測とキャンセルを扱う

不要になったハンドルは解放します。対応する呼び出しにはAbortSignalを渡し、実際の結果を待ってください。キャンセルしても、すでに発生した書き込みやリモート副作用は取り消されません。

自動反応では、awaitの後を含め、結果の処理にctx.withEvent(delivery)を使います。契約が求める場合は、因果サブスクリプションに安定したruleIdを与えます。ユーザー起点のアクションには元の有効化コンテキストを使います。これにより、ホストは独立した操作を混同せずループを検出できます。

ローカルでビルドしてインストールする

チェックアウトのパッケージスクリプトに従います。公開プラグインリポジトリの通常のチェックは次のとおりです。

bash
bun run build
bun run typecheck
bun test
bun run validate

ReadAware → 設定 → プラグイン → プラグインをインストールを開き、ビルド済みフォルダーを選択して同意の概要を確認します。デスクトップアプリで機能を試し、更新を確認するために再ビルドして再インストールします。

プライベートデータのバージョン管理

schemaVersionはパッケージバージョンとは独立しています。保存済みKVまたはドキュメントの形が変わったら、migrate(storageCtx, change)を通じて対応するアップグレードとダウングレードを提供します。

成功だけでなく失敗する移行もテストしてください。以前のパッケージとコミット済みデータが使える状態で残らなければなりません。通常のコード更新に不要なスキーマ変更を追加しないでください。

機能が使う境界をテストする

実際のWorker/Tauri動作、権限と本のスコープによる拒否、キャンセル、無効化/再有効化、障害からの復旧を確認します。UIプラグインではキーボード操作、長いテキスト、狭いウィンドウも含めます。データを変更するプラグインでは、永続性が重要な場合に同時編集と再起動も含めてください。

スケジュールはアプリが開いている間に実行され、永続ジョブはホストの型付きプランだけを扱います。どちらも一般的なバックグラウンドプロセスや任意コードのジョブランナーではありません。APIリファレンスで制限を説明しています。

公開する

宣言した最小契約でビルド済みパッケージが動作したら、公開手順に従います。