wp-envを利用した際のメモです。
wp-envとは?

ローカルのWordPress開発環境
wp-envとは、ローカルのWordPress開発環境です。Docker Desktopと合わせて利用します。
wp-envの使い方
wp-env 入門に記載してあるクイックスタートの手順に沿って、まずは設定を行います。
設定手順
- Node.js 開発ツールのインストール
- Docker Desktopの起動
- ターミナルを利用して、グローバルへwp-envのインストール
- ターミナルにて、作業ディレクトリへの移動
- ターミナルで
wp-env start
の実行 http://localhost:8888/wp-admin
へアクセスし、ダッシュボードへログイン
Node.js 開発ツールのインストール
Node.js 開発環境に記載があるように、OSごとにNode.jsの開発環境をインストールします。Node.jsの開発環境は、ブロックエディターの開発にも利用します。
まずnvmをインストールするために、ターミナルで以下のコマンドを実行します。
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash
以下のような表示があります。
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 15916 100 15916 0 0 85046 0 --:--:-- --:--:-- --:--:-- 85112
=> Downloading nvm from git to '/Users/xxx/.nvm'
=> Cloning into '/Users/xxx/.nvm'...
remote: Enumerating objects: 381, done.
remote: Counting objects: 100% (381/381), done.
remote: Compressing objects: 100% (324/324), done.
remote: Total 381 (delta 43), reused 176 (delta 29), pack-reused 0 (from 0)
Receiving objects: 100% (381/381), 383.82 KiB | 1.06 MiB/s, done.
Resolving deltas: 100% (43/43), done.
* (HEAD detached at FETCH_HEAD)
master
=> Compressing and cleaning up git repository
=> Appending nvm source string to /Users/xxx/.zshrc
=> Appending bash_completion source string to /Users/xxx/.zshrc
=> You currently have modules installed globally with `npm`. These will no
=> longer be linked to the active version of Node when you install a new node
=> with `nvm`; and they may (depending on how you construct your `$PATH`)
=> override the binaries of modules installed with `nvm`:
/usr/local/lib
├── corepack@0.22.0
=> If you wish to uninstall them at a later point (or re-install them under your
=> `nvm` Nodes), you can remove them from the system Node as follows:
$ nvm use system
$ npm uninstall -g a_module
=> Close and reopen your terminal to start using nvm or run the following to use it now:
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
ターミナルを終了し、再度起動をします。ターミナルで次のコマンドを実行します。
nvm install --lts
以下のような表示があります。
Installing latest LTS version.
Downloading and installing node v22.14.0...
Downloading https://nodejs.org/dist/v22.14.0/node-v22.14.0-darwin-arm64.tar.xz...
######################################################################### 100.0%
Computing checksum with shasum -a 256
Checksums matched!
Now using node v22.14.0 (npm v10.9.2)
Creating default alias: default -> lts/* (-> v22.14.0)
これでnvmのインストールが完了します。
node -v
およびnpm -v
のコマンドを実行し、バージョンが表示されれば、nvmのインストールは成功です。
node -v
# v22.14.0
npm -v
# 10.9.2
Docker Desktopの起動
Docker Desktopをダウンロードし、インストールを行います。
インストールが完了したら、起動します。
グローバルへwp-envのインストール
ターミナルを使用して、グローバルへwp-envのインストールを行います。
(base) MacBook-Air ~ % npm -g install @wordpress/env
次のような表示がでます。
added 173 packages in 11s
34 packages are looking for funding
run `npm fund` for details
wp-env --version
を実行し、バージョンが表示されれば、wp-envのインストールは成功です。
wp-env --version
# 10.19.0
次にターミナルで、作業ディレクトリへ移動します。
cd DirectoryName
今回は、プラグインの開発(プラグインの名前:MyNote)を前提にして、mynoteディレクトリの配下にmynote.php
を配置しました。その場合の作業ディレクトリは、mynoteフォルダになります。
作業ディレクトリで、wp-env start
のコマンドを実行します。
wp-env start
Macの場合は実行後に次のポップアップが表示されました。OKをクリックします。

“書類”の部分は、作業フォルダを配置しているディレクトリ次第で変わります。
その後、完了すると、次のような表示がでます。
⚠ Warning: could not find a .wp-env.json configuration file and could not determine if '/Users/xxx/Desktop/mynote' is a WordPress installation, a plugin, or a theme.
WordPress development site started at http://localhost:8888
WordPress test site started at http://localhost:8889
MySQL is listening on port 49866
MySQL for automated testing is listening on port 49997
✔ Done! (in 52s 835ms)
http://localhost:8888へアクセスすると、WordPressサイトが表示されているのを確認できます。

ダッシュボードへは、ユーザー名 admin
、パスワード password
でログインが可能です。
WordPress test site started at http://localhost:8889
とあるように、http://localhost:8889/ではテストサイドが起動しております。
インストール済みプラグインを確認すると、作業ディレクトリにあるプラグインがインストールされている状態になっています。

wp-env start
のコマンドを実行した時に、インターネット環境が悪いとwp-envのインストールが終わらない時がありました。
以下の表示が出てきて、Starting WordPress.
で表示が変わらない状態が続きました。
Updating Docker Images.
Downloading WordPress.
- WordPress: 56/100%
⠹ Starting WordPress.
その際は、control + c
でターミナルで実行中のコマンドを停止して、再度wp-env start
のコマンドを実行すれば、問題ありませんでした。
wp-envのアンインストール
特定のプロジェクトのwp-envをアンインストールしたい場合は、wp-env destroy
を実行します。
またWordPressのデータベースをリセットは、wp-env clean all
を実行します。
トラブルシューティング
以下のコマンドを実行した時に発生したトラブルへの対処法です。
npm -g install @wordpress/env
以下のような表示が出ました。
npm ERR! code EACCES
npm ERR! syscall mkdir
npm ERR! path /usr/local/lib/node_modules/@wordpress
npm ERR! errno -13
npm ERR! Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules/@wordpress'
npm ERR! [Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules/@wordpress'] {
npm ERR! errno: -13,
npm ERR! code: 'EACCES',
npm ERR! syscall: 'mkdir',
npm ERR! path: '/usr/local/lib/node_modules/@wordpress'
npm ERR! }
npm ERR!
npm ERR! The operation was rejected by your operating system.
npm ERR! It is likely you do not have the permissions to access this file as the current user
npm ERR!
npm ERR! If you believe this might be a permissions issue, please double-check the
npm ERR! permissions of the file and its containing directories, or try running
npm ERR! the command again as root/Administrator.
npm ERR! A complete log of this run can be found in: /Users/xxx/.npm/_logs/2025-03-04T10_38_23_898Z-debug-0.log
この表示が出た時は、以下のようにwp-env --version
を実行してもバージョンが表示されません。
wp-env --version
# zsh: command not found: wp-env
以下の記事を参考にして、nvmを最新バージョンへすることで解決できました。
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash
参考:
https://github.com/WordPress/gutenberg/issues/22616
Resolving EACCES permissions errors when installing packages globally
複数の開発環境を起動
wp-env start
⚠ Warning: could not find a .wp-env.json configuration file and could not determine if '/Users/xxx/Documents/Development/WordPress/myblock' is a WordPress installation, a plugin, or a theme.
✖ Error while running docker compose command.
#0 building with "desktop-linux" instance using docker driver
#1 [wordpress internal] load build definition from WordPress.Dockerfile
#1 transferring dockerfile: 2.02kB done
#1 DONE 0.0s
#2 [tests-wordpress internal] load build definition from Tests-WordPress.Dockerfile
#2 transferring dockerfile: 2.03kB done
#2 DONE 0.0s
#3 [tests-wordpress internal] load metadata for docker.io/library/wordpress:latest
#3 DONE 2.4s
#4 [tests-wordpress internal] load .dockerignore
#4 transferring context: 2B done
#4 DONE 0.0s
#5 [wordpress internal] load .dockerignore
#5 transferring context: 2B done
#5 DONE 0.0s
#6 [wordpress 1/19] FROM docker.io/library/wordpress:latest@sha256:c31edd83f61ee9f524ff6a36357bd3bf6bdd4c397c32e15d7ce4708b717569e9
#6 DONE 0.0s
#7 [tests-wordpress 4/19] RUN sed -i 's|security.debian.org/debian-security stretch|archive.debian.org/debian-security stretch|g' /etc/apt/sources.list
#7 CACHED
#8 [tests-wordpress 3/19] RUN sed -i 's|deb.debian.org/debian stretch|archive.debian.org/debian stretch|g' /etc/apt/sources.list
#8 CACHED
#9 [tests-wordpress 11/19] RUN apt-get -qy install sudo
#9 CACHED
#10 [tests-wordpress 17/19] RUN php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer
#10 CACHED
#11 [tests-wordpress 15/19] RUN curl -sS https://getcomposer.org/installer -o /tmp/composer-setup.php
#11 CACHED
#12 [tests-wordpress 13/19] RUN echo 'upload_max_filesize = 1G' >> /usr/local/etc/php/php.ini
#12 CACHED
#13 [tests-wordpress 5/19] RUN sed -i '/stretch-updates/d' /etc/apt/sources.list
#13 CACHED
#14 [tests-wordpress 7/19] RUN useradd -mlo -u 501 -g 20 xxx || true
#14 CACHED
#15 [tests-wordpress 8/19] RUN apt-get -qy update
#15 CACHED
#16 [tests-wordpress 12/19] RUN echo "#501 ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
#16 CACHED
#17 [tests-wordpress 14/19] RUN echo 'post_max_size = 1G' >> /usr/local/etc/php/php.ini
#17 CACHED
#18 [tests-wordpress 18/19] RUN rm /tmp/composer-setup.php
#18 CACHED
#19 [tests-wordpress 9/19] RUN apt-get -qy install autoconf dpkg-dev file g++ gcc libc-dev make pkg-config re2c && touch /usr/local/etc/php/php.ini
#19 CACHED
#20 [tests-wordpress 6/19] RUN groupadd -o -g 20 xxx || true
#20 CACHED
#21 [tests-wordpress 2/19] RUN touch /etc/apt/sources.list
#21 CACHED
#22 [tests-wordpress 16/19] RUN export COMPOSER_HASH=`curl -sS https://composer.github.io/installer.sig` && php -r "if (hash_file('SHA384', '/tmp/composer-setup.php') === '$COMPOSER_HASH') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('/tmp/composer-setup.php'); } echo PHP_EOL;"
#22 CACHED
#23 [tests-wordpress 10/19] RUN apt-get -qy install git
#23 CACHED
#24 [tests-wordpress 19/19] RUN composer global require --dev phpunit/phpunit:"^5.7.21 || ^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0"
#24 CACHED
#25 [tests-wordpress] exporting to image
#25 exporting layers done
#25 writing image sha256:0b4ce555b20d47f5b9b352edd9a2458948e10d49b69b9393d03033e8e7e2ca30 done
#25 naming to docker.io/library/788bfc90fa3e67eac5351e32e8490c80-tests-wordpress done
#25 DONE 0.0s
#26 [wordpress] exporting to image
#26 exporting layers done
#26 writing image sha256:da58ee80a01ac86824c206a6a00bdc1fe5078d7539d45832a6e97f7b141ba0e4 done
#26 naming to docker.io/library/788bfc90fa3e67eac5351e32e8490c80-wordpress done
#26 DONE 0.0s
#27 [tests-wordpress] resolving provenance for metadata file
#27 DONE 0.0s
#28 [wordpress] resolving provenance for metadata file
#28 DONE 0.0s
#29 [tests-cli internal] load build definition from Tests-CLI.Dockerfile
#29 transferring dockerfile: 1.85kB done
#29 DONE 0.0s
#30 [cli internal] load build definition from CLI.Dockerfile
#30 transferring dockerfile: 1.85kB done
#30 DONE 0.0s
#31 [cli internal] load metadata for docker.io/library/wordpress:cli
#31 DONE 0.4s
#32 [cli internal] load .dockerignore
#32 transferring context: 2B done
#32 DONE 0.0s
#33 [tests-cli internal] load .dockerignore
#33 transferring context: 2B done
#33 DONE 0.0s
#34 [tests-cli 1/14] FROM docker.io/library/wordpress:cli@sha256:69aa36250b3d34e8b354c144fc8f77a60c0e04dc3785fd35437d34a1640e42d0
#34 DONE 0.0s
#35 [cli 4/14] RUN apk update
#35 CACHED
#36 [cli 2/14] RUN addgroup -g 20 xxx || true
#36 CACHED
#37 [cli 11/14] RUN export COMPOSER_HASH=`curl -sS https://composer.github.io/installer.sig` && php -r "if (hash_file('SHA384', '/tmp/composer-setup.php') === '$COMPOSER_HASH') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('/tmp/composer-setup.php'); } echo PHP_EOL;"
#37 CACHED
#38 [cli 9/14] RUN echo 'post_max_size = 1G' >> /usr/local/etc/php/php.ini
#38 CACHED
#39 [cli 12/14] RUN php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer
#39 CACHED
#40 [cli 13/14] RUN rm /tmp/composer-setup.php
#40 CACHED
#41 [cli 8/14] RUN echo 'upload_max_filesize = 1G' >> /usr/local/etc/php/php.ini
#41 CACHED
#42 [cli 5/14] RUN apk --no-cache add autoconf dpkg-dev dpkg file g++ gcc libc-dev make pkgconf re2c && touch /usr/local/etc/php/php.ini
#42 CACHED
#43 [cli 3/14] RUN adduser -h /home/xxx -G $( getent group 20 | cut -d: -f1 ) -u 501 yuta || true
#43 CACHED
#44 [cli 6/14] RUN apk --no-cache add sudo linux-headers
#44 CACHED
#45 [cli 10/14] RUN curl -sS https://getcomposer.org/installer -o /tmp/composer-setup.php
#45 CACHED
#46 [cli 7/14] RUN echo "#501 ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
#46 CACHED
#47 [cli 14/14] RUN composer global require --dev phpunit/phpunit:"^5.7.21 || ^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0"
#47 CACHED
#48 [tests-cli] exporting to image
#48 exporting layers done
#48 writing image sha256:808545530aa7f0d7c5867f75e8b9596c143b1662582fedad6ff7b5ca66e7119e done
#48 naming to docker.io/library/788bfc90fa3e67eac5351e32e8490c80-tests-cli done
#48 DONE 0.0s
#49 [cli] exporting to image
#49 exporting layers done
#49 writing image sha256:4c2d459a7080312d9ec51d66f56136dd2d70b19df8a7d0daafa1b30c5a4f565e done
#49 naming to docker.io/library/788bfc90fa3e67eac5351e32e8490c80-cli done
#49 DONE 0.0s
#50 [cli] resolving provenance for metadata file
#50 DONE 0.0s
#51 [tests-cli] resolving provenance for metadata file
#51 DONE 0.0s
Service tests-wordpress Building
Service wordpress Building
Service tests-wordpress Built
Service tests-cli Building
Service wordpress Built
Service cli Building
Service cli Built
Service tests-cli Built
Volume "788bfc90fa3e67eac5351e32e8490c80_mysql-test" Creating
Volume "788bfc90fa3e67eac5351e32e8490c80_mysql-test" Created
Volume "788bfc90fa3e67eac5351e32e8490c80_user-home" Creating
Volume "788bfc90fa3e67eac5351e32e8490c80_user-home" Created
Volume "788bfc90fa3e67eac5351e32e8490c80_tests-user-home" Creating
Volume "788bfc90fa3e67eac5351e32e8490c80_tests-user-home" Created
Container 788bfc90fa3e67eac5351e32e8490c80-tests-mysql-1 Creating
Container 788bfc90fa3e67eac5351e32e8490c80-mysql-1 Running
Container 788bfc90fa3e67eac5351e32e8490c80-wordpress-1 Creating
Container 788bfc90fa3e67eac5351e32e8490c80-tests-mysql-1 Created
Container 788bfc90fa3e67eac5351e32e8490c80-tests-wordpress-1 Creating
Container 788bfc90fa3e67eac5351e32e8490c80-wordpress-1 Created
Container 788bfc90fa3e67eac5351e32e8490c80-cli-1 Creating
Container 788bfc90fa3e67eac5351e32e8490c80-tests-wordpress-1 Created
Container 788bfc90fa3e67eac5351e32e8490c80-tests-cli-1 Creating
Container 788bfc90fa3e67eac5351e32e8490c80-tests-cli-1 Created
Container 788bfc90fa3e67eac5351e32e8490c80-cli-1 Created
Container 788bfc90fa3e67eac5351e32e8490c80-tests-mysql-1 Starting
Container 788bfc90fa3e67eac5351e32e8490c80-wordpress-1 Starting
Container 788bfc90fa3e67eac5351e32e8490c80-tests-mysql-1 Started
Container 788bfc90fa3e67eac5351e32e8490c80-tests-wordpress-1 Starting
Error response from daemon: driver failed programming external connectivity on endpoint 788bfc90fa3e67eac5351e32e8490c80-tests-wordpress-1 (eea09e6121960d4d54249b0029eddee008d18d7b9623c564111dccb5f2a9995c): Bind for 0.0.0.0:8889 failed: port is already allocated
実行中の開発環境で利用しているDockerを停止して、再度wp-env start
を実行すると解決できました。複数起動する方法は確認中です。