WordPress のデータベース検索置換ツールとして定番の Better Search Replace(以下 BSR)を、複数の検索/置換ペアを一度に実行できるよう拡張するパッチファイルを GitHub で公開しました。

👉 sarap422/wp-better-search-replace-plural

    きっかけ:ドメイン移行で毎回感じていた不便さ

    BSR は WordPress のドメイン移行や URL 変換には欠かせないプラグインです。ただ、検索/置換の入力欄が 1組しかない ため、複数の文字列を置換したい場合は何度も実行し直す必要がありました。

    たとえばドメイン移行では、こういった置換を順番にこなす必要があります。

    • https://old.example.comhttps://new.example.com
    • get_theme_file_uri(); ?>/img/get_theme_file_uri(); ?>/images/
    • commons/img/commons/images/

    1回ずつ実行するのが面倒で、「まとめて一発でできれば…」と思っていました。

    何ができるようになるか

    複数ペア一括置換

    「+ Add Pair」ボタンでペアを追加していくだけで、複数の検索/置換をまとめて一度に実行できます。ペアは上から順番に適用されます。

    Dry Run(試し実行)後もペアが画面に復元されるので、確認 → 本実行のフローがスムーズです。

    Import / Export

    ペアのセットを JSON ファイルとして保存・読み込みできます。

    • Export Pairsな画面のペアをそのまま JSON でダウンロード
    • Import Pairsな保存しておいた JSON を読み込んでペアを復元

    よく使う置換パターン(たとえば「画像パスの統一」「旧ドメイン→新ドメイン」)をファイルに保存しておけば、次回以降は読み込むだけで準備完了です。全処理はブラウザ内で完結するので、サーバーへの余分な通信もありません。

    導入方法

    プラグイン本体(Better Search Replace v1.4.10)を通常インストールしたあと、このリポジトリのファイルを上書きコピーするだけです。

    cp -r plugin/better-search-replace/* /path/to/wp-content/plugins/better-search-replace/
    

    WordPress.org のプラグインを土台にしたパッチ方式を採用しているため、配布ファイルは変更した9ファイルのみです。本体全体を抱え込まないので、BSR がアップデートされたときも差分の追従だけで対応できます。

    ⚠️ データベースを直接書き換えます。適用前に必ずバックアップを取得してください。

    実装の話

    なぜパッチ方式なのか

    最初はアドオン(別プラグイン)として実装できないか検討しました。しかし BSR 本体が提供している WordPress フックは権限チェック用の3つだけで、UI 拡張や AJAX 処理への介入ポイントが一切ありませんでした。

    そのため、変更が必要なファイルだけを差し替えるパッチセット方式を採用しています。全60ファイル中、変更したのは9ファイルです。

    設計上の工夫

    開発では Multi Grep Replacer(自作の Electron アプリ)での経験が直接役立ちました。テキスト置換ツールならではの落とし穴として、以下を設計に織り込んでいます。

    • trim 禁止な検索文字列の前後スペースを消さない
    • 空の置換先を許容な空文字への置換(=削除)は正当な操作
    • createElement + textContent でDOM生成なinnerHTML によるXSSリスクを回避
    • ペアIDはカウンター増加のみな削除後のID重複を防ぐ

    Import/Export もサーバー保存なしのクライアントサイド完結で実装しました。Blob + URL.createObjectURL + FileReader の組み合わせで、AJAX エンドポイントもnonce検証も不要です。

    Claude Code で実装

    実装は Claude Code を使って進めました。探索 → 計画 → 実装 → レビューのフローで、BSR 本体のコード読解から複数ペア対応の実装まで、約90分で完成しています。

    Import/Export 機能の追加(約75分)も同様のフローで進め、合計4セッション・数時間の開発でリリースまで到達しました。

    ライセンス・動作環境

    項目内容
    ライセンスGPL-2.0(Better Search Replace 本体に準拠)
    対象 BSR バージョンv1.4.10 のみ
    WordPress5.0+
    PHP7.4+

    Better Search Replace のバージョンが上がったら、変更ファイルの差分を確認してパッチをマージする必要があります。追従手順は README に記載しています。

    ドメイン移行や画像パスの一括変換など、複数の文字列をまとめて置換したい場面でぜひ使ってみてください。

    👉 GitHub: sarap422/wp-better-search-replace-plural


    関連記事

    複数ルールで一括grep置換ツール「Multi Grep Replacer」 Web開発やプログラミングで、こんな経験はありませんか?🔄 同じ置換作業を何度も繰り返している😓 サクラエディタで5つの置換パターンを1つずつ実行するのが面倒めんどくさかったので、複数ルールで一括置換できる「Multi Grep Replacer」 を作ってみ...  続きを読む