WordPressプラグインをEmDashに移植する
プラグインのユーザーから見える動作とデータモデルを保持しつつ、PHPを1行ずつ翻訳しないでください。WordPressとEmDashでは責任範囲の分割方法が異なるため、まず各機能をサイトスキーマ、Astroコード、サンドボックスプラグイン、信頼済みネイティブプラグインのいずれに割り当てるかを決定します。
プラグインコードを実装する前にプラグインの作成を読み込んでください。移植によってコレクション、シード、クエリ、フロントエンドテンプレートが変更される場合はEmDashサイトの構築を読み込んでください。これらのスキルは現在のAPIを定義し、このスキルは移行に関する判断をカバーします。
ソースを理解する
プラグインのソースコード、インストール動作、データベースの変更、フック、RESTエンドポイント、スケジュールジョブ、管理画面、ショートコードまたはブロック、フロントエンド出力、権限、外部サービスを調査します。WordPress固有の実装とは別に、ユーザーが依存する動作を特定します。
記録する項目:
- 必要なコンテンツと設定データ;
- データを変更または公開するアクション;
- 認可と信頼の境界;
- バックグラウンドまたはリトライ動作;
- フロントエンドと管理者の操作;
- インポート、移行、ロールバックの要件;
- コピーされたアセットやコードのライセンス義務。
ソース、期待される動作、またはターゲットのEmDash環境が不明な場合は、同等のものを考案する代わりにギャップを報告します。
各責任を割り当てる
| WordPressの責任 | EmDashの宛先 |
|---|---|
| カスタム投稿タイプ、タクソノミー、メタデータ | サイトスキーマまたはシードを通じて作成されたコレクション、タクソノミー、フィールド |
| サイト全体の表示設定 | Astroテンプレートが読み取るサイト設定 |
| プラグイン所有のユーザー設定 | ctx.settings;暗号化されたsecretフィールドとして資格情報を宣言 |
| プラグイン所有のカーソル、キャッシュ、内部状態 | プラグインスコープのctx.kv |
| プラグイン所有の検索可能なレコード | 宣言されたctx.storage.<collection>ストレージ |
| コンテンツの発見、翻訳、公開 | ケーパビリティで制限されたctx.contentとctx.schema;ポリシーフックとアクションは別の権限を持つ |
| 実行時のタクソノミーまたはリダイレクト管理 | 狭い読み取り/書き込み権限を持つctx.taxonomiesまたはctx.redirects |
| コメント管理 | ctx.comments;読み取りは個人データを公開し、モデレーションは期待されるステータスを使用 |
| WordPress RESTエンドポイント | 明示的なメソッド、入力、ヘッダー、レスポンスモードを持つ宣言されたプラグインルート |
| スケジュールイベント | cronフックとctx.cronスケジューリング |
| 管理ページまたはフォーム | サンドボックスプラグインにはBlock Kit;信頼済みネイティブプラグインにのみReact |
| 投稿エディターメタボックスまたは保存エントリアクション | プライベートルート上のadmin.editorPanelsまたはadmin.editorActions |
| ユーザーまたは著者の検索 | users:read権限を持つctx.users |
| 送信HTTPリクエスト | network:requestとallowedHostsエントリを持つctx.http.fetch() |
| メディア操作 | メタデータ、バイト読み取り、メタデータ書き込み、アップロード/削除の権限を分離 |
WP_Queryまたはテンプレートタグ | Astroサイトコード内のEmDashコンテンツAPI |
| ショートコードまたはエディターブロック | 可能な場合は既存のPortable Textコンテンツ;カスタムPortable Textブロックには信頼済みネイティブプラグインが必要 |
| 生のヘッドマークアップまたはスクリプト | 信頼済みネイティブpage:fragments;レジストリインストール済みプラグインは検証済みpage:metadataのみ提供可能 |
EmDashのシステムテーブルに直接アクセスしてコレクションやタクソノミーを作成しないでください。パブリックスキーマ、シード、CLI、管理境界を使用してください。存在しないサンドボックスAPIを模倣するために内部RESTルートを使用しないでください。
権限を分離しておく:メディアメタデータの読み取りはバイトへのアクセスを許可せず、モデレーションは削除を許可せず、公開ポリシーは公開アクションを許可せず、コンテンツ復元は通常のコンテンツ読み取りを許可しません。
プラグイン形式を選択する
デフォルトではサンドボックスプラグインを使用します。インストール時の信頼契約を通じて、ポータブルフック、ルート、宣言ストレージ、メディア、ネットワークアクセス、MCPツール、Block Kit管理UIをサポートします。
信頼済みネイティブプラグインは、機能がホストプロセスアクセス、React管理コード、Astroレンダリングコンポーネント、生のページフラグメント、またはカスタムPortable Textブロック定義を必要とする場合にのみ使用します。移行計画で追加の権限と配布制限を明記します。
一部のWordPressプラグインはEmDashプラグインを必要としません。カスタム投稿タイプとフロントエンドテンプレートは、スキーマ、シードデータ、Astroページのみで構成される場合があります。静的なサイト構造で動作がカバーできる場合は、ランタイム拡張を追加しないでください。
データ移動を計画する
ランタイムコードを作成する前に、既存のWordPressデータのマッピング方法を記述します:
- 投稿ID、スラッグ、ロケール、著者、ステータス、改訂履歴、公開日をマッピングする;
- 投稿、ターム、メディア、プラグイン所有レコード間の関係を維持する;
- 一度きりのインポートと継続的な同期が必要なデータを区別する;
- インポートを再開可能にし、重複の検出方法を定義する;
- 調整やリダイレクトに必要な場合はソース識別子を保持する;
- プロダクト上の判断なしでは表現できないコンテンツを特定する。
新しいサイトの初期スキーマとサンプルコンテンツにはシードデータを使用します。既存サイトの本番データにはインポーターまたは移行パスを使用します。シードはバックアップや継続的な同期メカニズムではありません。
同等の動作を検証する
ユーザーとランタイムが実行する境界を通じてテストします:
- コンテンツモデル変更に対するスキーマとインポートデータのアサーション;
- サンドボックスフック、ルート、ストレージ、権限に対する本番境界プラグインテスト;
- 管理画面とフロントエンドの操作に対するブラウザ検証;
- 再起動、重複配信、認可、失敗ケースのテスト(ソース機能がそれらに依存する場合)。
内部構造ではなく観察可能な動作を比較します。意図的な違いと、未サポートのまま残るWordPress機能を文書化します。
移植成果物を提供する
以下を提供します:
- WordPressの動作とデータの簡潔なインベントリ;
- 責任マップとサンドボックス/ネイティブの判断;
- データ移行またはシード計画;
- プラグインとサイトコードにわたる実装;
- 検証証拠と既知のギャップ;
- 再利用されたコードやアセットの帰属とライセンス通知。