Rudel
リクエストで選択できるWordPressのオーバーレイ環境でサンドボックスを実現します。
composer require rudel/rudel最新リリース v0.10.0 GPL-2.0-or-later WordPress 6.4+, PHP 8.2+
wp rudel create \
--name=feature-a \
--owner=dennis \
--labels=agent,qa \
--purpose="Test checkout changes" \
--ttl-days=7実践例
ホストサイトからサンドボックスを作成し、WP-CLIまたはHTTPリクエストの接続先に設定します。
サンドボックスを作成してルーティングする
wp rudel createはホストのテーブルを新しいプレフィックスで複製し、テーマをサンドボックスディレクトリにコピーして、サンドボックスIDを出力します。
WP-CLIではRUDEL_ENVIRONMENTにそのIDを渡し、HTTPではX-Rudel-Environmentヘッダーまたはrudel_environmentCookieに指定します。PHPAPIは同じサンドボックスをライフサイクルメタデータ付きで作成します。
wp rudel create --name=alpha --theme=twentytwentyfour
RUDEL_ENVIRONMENT=alpha-1234 wp option get siteurl
curl -H 'X-Rudel-Environment: alpha-1234' http://localhost:8000/$sandbox = Rudel::create( 'alpha', [
'theme' => 'twentytwentyfour',
'owner' => 'dennis',
'labels' => [ 'qa', 'agent' ],
'ttl_days' => 7,
] );サンドボックス
開発、テスト、AIエージェント向けの使い捨てオーバーレイ環境。
リクエストによる選択
X-Rudel-Environmentヘッダー、rudel_environment Cookie、またはWP-CLIのRUDEL_ENVIRONMENTで、リクエストをサンドボックスにルーティングできます。認証は行わず、サンドボックスIDだけで選択します。
オーバーレイランタイム
有効化するとwp-config.phpにブートストラップ行が追加されます。各サンドボックスは専用プレフィックスの下に複製テーブルと有効なテーマのコピーを持ち、WordPressのコア、プラグインファイル、アップロードは共有されます。
Gitワークツリー
PHPネイティブのGitクローン、プッシュ、ワークツリー操作を内蔵し、ホストにgitバイナリは不要です。
スナップショット
サンドボックスのテーブルと管理対象テーマファイルをコピーする、名前付きの復旧ポイント。WP-CLIまたはPHPから作成・復元できます。
リクエストの分離
リクエストごとにテーブルプレフィックス、テーマルート、一時ディレクトリ、オブジェクトキャッシュキーのソルトを分け、メールをブロックします。
WP-CLI & PHP API
wp rudelコマンドとRudel\Rudelの静的メソッドで、サンドボックスの作成、一覧表示、更新、スナップショット、復元、削除ができます。
エージェント対応
コーディングエージェントに使い捨てのWordPressコピーを提供します。WP-CLIはRUDEL_ENVIRONMENTで対象を絞り、外部メールはブロックされます。
Rudelを選ぶ理由
1つのインストールで複数のサンドボックス
Rudelは通常のWordPressインストール内で動作し、マルチサイトも2つ目のWordPressインストールも不要です。サンドボックスを指定しないすべてのリクエストには、ホストサイト自身のデータが引き続き提供されます。
テーブルと1つのテーマをコピー
サンドボックスには、ユーザーを含むホストテーブルのコピーが専用プレフィックスの下に作られ、有効なテーマのコピーも含まれます。子テーマの場合は親テーマもコピーされます。WordPressのコア、プラグインファイル、アップロードはホストに残ります。
期限付きサンドボックス
サンドボックスに所有者、ラベル、目的、日数単位のTTLを設定できます。1時間ごとのWP-Cronジョブが期限切れのサンドボックスを削除し、保護対象のものはスキップします。
安全にプレビュー
サンドボックス内のリクエストは外部メールをブロックし、ブロックした各メッセージを記録します。wp-config.phpで独自に設定しない限り、オブジェクトキャッシュキーのソルトはサンドボックスIDから生成されるため、永続キャッシュではホストとサンドボックスのキーが分離されます。
との比較
Rudelは既存のサイト内で動作します。以下のツールは関連するニーズに対応します。
| ツール | 得意なこと | Rudelとの違い |
|---|---|---|
| WordPress Multisite | 得意なこと1組のコアファイルで仮想サイトのネットワークを運用します。プラグインとテーマを共有し、サイトごとにデータベーステーブルとアップロードディレクトリを分けます。 | Rudelとの違いRudelではマルチサイトは不要です。既存サイトのテーブルと有効なテーマをコピーし、ヘッダー、Cookie、またはWP-CLI環境変数でリクエストごとに選択します。 |
| wp-env | 得意なこと追加設定なしで、Dockerを使ってローカルのWordPressサイトをセットアップし、プラグインやテーマを開発・テストできます。 | Rudelとの違いRudelでは2つ目のWordPressインストールは不要です。既存サイトのコンテンツからサンドボックスを作成し、テーブルはホストと同じMySQLデータベースに保存します。サンドボックス専用のPHPランタイムやデータベースサーバーは用意しません。 |
| WordPress Playground | 得意なことバックエンドなしでWebAssembly上のWordPressクライアントを実行します。ブラウザー内に隔離され、ブラウザー外に永続的な副作用はありません。 | Rudelとの違いRudelは実サイトとそのMySQLデータベースの隣でサーバー上に動作します。サンドボックスはそのサイトの現在のコンテンツから作られ、WP-CLIと任意のHTTPクライアントからアクセスできます。 |
質問と回答
Rudelのドキュメントから、簡潔に回答します。
WordPressのコア、プラグインファイル、アップロードされたメディアです。各サンドボックスには、生成されたプレフィックスの下にユーザーを含むデータベーステーブルの独自コピーと、有効なテーマのコピーがあります。
HTTPリクエストでX-Rudel-Environmentヘッダーまたはrudel_environment Cookieを送信するか、WP-CLIでRUDEL_ENVIRONMENTを設定します。Rudelは任意のクライアントからIDを受け付けるため、選択機能はアクセス制御ではありません。
いいえ。サンドボックス内のリクエストはpre_wp_mailフィルターで外部メールを停止し、ブロックした各メッセージの宛先と件名を記録します。
ホストデータベース内の2つのテーブル、wp_rudel_environmentsとwp_rudel_worktreesに、デフォルトのプレフィックスで保存します。ランタイムJSON設定ファイルもSQLiteストアもありません。
有効化するとランタイムテーブルを作成し、wp-config.phpにブートストラップ行を追加して、クリーンアップイベントをスケジュールします。その時点でWordPressにはwp-config.phpへの書き込み権限が必要です。無効化すると行は削除されます。
はい。wp rudel snapshotでサンドボックスのテーブルとテーマファイルを名前付きで保存し、wp rudel restoreに--snapshotを指定すると復元できます。
プラグインをインストールし、自分のサイトからサンドボックスを作成して、はじめにガイドに従って最初のリクエストを送信しましょう。