WordPressを新規インストール状態に初期化するバッチ(個人用)


 まったくもって個人用なのだが、最近WordPressのプラグイン開発をしていて、テストで新規インストール状態のWordPressに頻繁に戻す必要が生じた。毎度々、コンソールからDBドロップして、コアファイル消して、新規インストールして……みたいなことやってるのはあまりにも非効率なので、バッチ化してワンコマンドで実行できるようにした。
 今後の開発用にスニペットとして残しておく。

Windowsマシン用

 「XAMPP」環境下、「wp-cli」導入済み、かつ「Git for Windows」のoptional Unix toolsを有効にしてコマンドプロンプトでUnixコマンドが使えるようになっていることが前提。

init.bat
@rem 自分以外のファイルをすべて削除
ls -a | grep -v -E "^\.$^\.\.$|^init.bat" | xargs rm -rf
@rem DBから初期化するWordPress用のデータベースを削除する
mysql -u {DB_USER} -p{DB_PASSWORD} -P 3306 --default-character-set=utf8mb4 -e "DROP DATABASE IF EXISTS {DB_NAME}"
@rem WordPressの最新版をダウンロード
php %USERPROFILE%\wp-cli.phar core download --locale=ja --version=latest
@rem WordPressの設定ファイル wp-config.php を作成する
php %USERPROFILE%\wp-cli.phar config create --dbname={DB_NAME} --dbuser={DB_USER} --dbpass={DB_PASSWORD} --dbhost=localhost:3306 --dbprefix={DB_PREFIX} --dbcharset=utf8mb4
@rem DBを新規作成する
php %USERPROFILE%\wp-cli.phar db create
@rem WordPressをインストールする
php %USERPROFILE%\wp-cli.phar core install --url={WP_SITE_URL} --title="{WP_SITE_NAME}" --admin_user={WP_SUPER_ADMIN_USER} --admin_password={WP_SUPER_ADMIN_PASSWORD} --admin_email={WP_SUPER_ADMIN_EMAIL}
@rem 有効化されているテーマ以外のテーマを削除
php %USERPROFILE%\wp-cli.phar theme list --status=inactive --field=name | xargs -I {} rm -rf "./wp-content/themes/{}"
@rem 開発中のプラグインを取得してカレントディレクトリに展開する
tar --exclude "my-plugin/.git" --exclude "my-plugin/node_modules" --exclude "my-plugin/.eslintrc" --exclude "my-plugin/.gitignore" --exclude "my-plugin/babel.config.js" --exclude "my-plugin/package.json" --exclude "my-plugin/webpack.config.js" --exclude "my-plugin/*.log" --exclude "my-plugin/*.lock" -C C:\xampp\htdocs\{PATH_TO_DEVELOPMENT}\wp-content\plugins -zcf _temp.tgz my-plugin
mv C:\xampp\htdocs\{PATH_TO_DEVELOPMENT}\wp-content\plugins\_temp.tgz .
tar -zxf _temp.tgz
rm -rf ./_temp.tgz
@rem 開発中のプラグインをWordPressにインストールする
mv ./my-plugin ./wp-content/plugins/.

使う時は、コマンドプロンプトから初期化したいWordPressのドキュメントルートにinit.batを設置して、

> init

──するか、もしくはバッチファイルをダブルクリックで実行する。

 なお、バッチファイル中では doskey に登録したマクロは使えないので、マクロ化する前のフルパスコマンドを発行する必要がある。

Linuxマシン(Mac等)用

 こちらも、「wp-cli」導入済みが前提。

init.sh
#!/bin/bash

# `wp`コマンドでwp-cliを呼び出せない場合は、phpとwp-cliのパスを指定する
wpcli=`which wp-cli.phar`
wp="/usr/bin/php $wpcli"

# 自分以外のファイルをすべて削除
ls -a | grep -v -E "^\.$^\.\.$|^init.sh" | xargs rm -rf
# DBから初期化するWordPress用のデータベースを削除する
mysql -u {DB_USER} -p{DB_PASSWORD} -h localhost --default-character-set=utf8mb4 -e "DROP DATABASE IF EXISTS {DB_NAME}"
# WordPressの最新版をダウンロード
$wp core download --locale=ja --version=latest
# WordPressの設定ファイル wp-config.php を作成する
$wp config create --dbname={DB_NAME} --dbuser={DB_USER} --dbpass={DB_PASSWORD} --dbhost=127.0.0.1 --dbprefix={DB_PREFIX} --dbcharset=utf8mb4
# DBを新規作成する
$wp db create
# WordPressをインストールする
$wp core install --url={WP_SITE_URL} --title="{WP_SITE_NAME}" --admin_user={WP_SUPER_ADMIN_USER} --admin_password={WP_SUPER_ADMIN_PASSWORD} --admin_email={WP_SUPER_ADMIN_EMAIL}
# 有効化されているテーマ以外のテーマを削除
$wp theme list --status=inactive --field=name | xargs -I {} rm -rf "./wp-content/themes/{}"
# 開発中のプラグインを取得してカレントディレクトリに展開する
tar --exclude "my-plugin/.git" --exclude "my-plugin/node_modules" --exclude "my-plugin/.eslintrc" --exclude "my-plugin/.gitignore" --exclude "my-plugin/babel.config.js" --exclude "my-plugin/package.json" --exclude "my-plugin/webpack.config.js" --exclude "my-plugin/*.log" --exclude "my-plugin/*.lock" -C /Users/{PATH_TO_DEVELOPMENT}/wp-content/plugins -zcf _temp.tgz my-plugin
mv /Users/{PATH_TO_DEVELOPMENT}/wp-content/plugins/_temp.tgz .
tar -zxf _temp.tgz
rm -rf ./_temp.tgz
# 開発中のプラグインをWordPressにインストールする
mv ./my-plugin ./wp-content/plugins/.

 init.sh ファイルには実行権限(chmod a+x init.shをしておく)が必要。

 使い方は、ターミナル(コマンドライン)から初期化したいWordPressのインストールルートにinit.shを設置して、

> ./init.sh

──でOK。

 もし初期化前にDBバックアップがしたい場合は、データベースをドロップする前にmysqldumpコマンドを追加してバックアップすれば良い。