🔁 2026年リライト版 この記事は2017年4月に公開した「Docker ComposeでWordPress環境をもっと楽に管理しよう!」、2016年8月の「詳細な解説付き!今から始めるDocker for Mac!快適なWordPress開発環境を手に入れよう!」、「Docker for Macで始めるお手軽WordPress環境のさまざまなカスタマイズ」、2016年10月の「Dockerで作る最強・最速のローカルWordPress環境」の4本を、2026年時点のApple Silicon Mac前提で統合・全面書き換えしたものです。
Apple Silicon(M1〜M4世代)のMacで、WordPressのローカル開発環境を最短で立ち上げるためのDocker Compose構成を紹介します。2017年当時の links ディレクティブや version: キー、Intel専用のMySQLイメージなどは2026年現在は不要・非推奨になっており、構成は驚くほどシンプルになりました。
2026年におけるWordPressローカル開発の前提
2016〜2018年に書いた過去記事では、Docker for Mac、VCCW(Vagrant+VirtualBox)、MAMP など複数の選択肢がありましたが、2026年時点で現役の選択肢は次のどれかです。
- Docker Desktop(無料プランは個人/小規模のみ)
- OrbStack(Mac専用、Docker Desktopより軽量・高速)
- Local by Flywheel(GUI重視の非開発者向け)
- wp-env(WordPress公式のDocker簡易ラッパー)
本記事ではもっとも柔軟性の高い Docker Desktop(または OrbStack)+ Docker Compose を前提に進めます。Apple Silicon上のDocker Desktopは2022年以降成熟しており、Rosetta 2でx86_64エミュレーションも可能になっています。
❯ docker --version
Docker version 27.x, build xxxxxxx
❯ docker compose version
Docker Compose version v2.x
docker-compose(ハイフン付き)は v1 系でEOL済みです。現在は docker compose(スペース区切り)が標準です。
docker-compose.yml(2026年最小構成)
任意の作業ディレクトリに compose.yaml を作成します。Compose v2 以降はファイル名が docker-compose.yml ではなく compose.yaml が推奨されています(docker-compose.yml も引き続き動作します)。また、冒頭の version: '3' は不要になりました。
services:
db:
image: mariadb:11
restart: unless-stopped
environment:
MARIADB_ROOT_PASSWORD: root
MARIADB_DATABASE: wordpress
MARIADB_USER: wordpress
MARIADB_PASSWORD: wordpress
volumes:
- db_data:/var/lib/mysql
wordpress:
image: wordpress:6.8-php8.3-apache
restart: unless-stopped
depends_on:
- db
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DEBUG: 1
volumes:
- ./wp-content:/var/www/html/wp-content
adminer:
image: adminer:latest
restart: unless-stopped
depends_on:
- db
ports:
- "8081:8080"
volumes:
db_data:
ポイントは次のとおりです。
- MySQLではなくMariaDB 11を採用 — MariaDBはApple Silicon向けの公式ARM64イメージが提供されており、MySQL公式イメージで必要だった
platform: linux/amd64の指定が不要です。Rosettaエミュレーション経由の起動に比べて体感で数倍高速です。 wordpress:6.8-php8.3-apacheタグを固定 —latestを避けることで、開発環境の意図しない破壊的更新を防ぎます。PHPは2026年時点で8.3がWordPressコアの最小要件。php8.4も利用可能です。linksは削除 — Docker Composeの同一ネットワーク内では、サービス名(db)でDNS解決できるため、linksは不要かつ非推奨です。ports: "8080:80"— ホスト側の8080番でアクセス。http://localhost:8080を開くとWordPressのインストール画面が出ます。./wp-content:/var/www/html/wp-content— テーマ/プラグイン開発をホスト側で行うための最小限のバインドマウント。WordPressコア全体をマウントする構成にすると起動が遅くなるため、wp-contentだけに絞るのが推奨です。2016年当時の:cachedオプションはApple Silicon時代には不要です(VirtioFSが標準)。- Adminerを同梱 — phpMyAdminより軽量で単一コンテナ。
http://localhost:8081でDBを管理できます。
起動、停止、再構築
# 起動(バックグラウンド)
❯ docker compose up -d
# ログ確認
❯ docker compose logs -f wordpress
# 停止(コンテナだけ、ボリュームは残る)
❯ docker compose down
# 停止+ボリューム削除(DBも初期化される)
❯ docker compose down -v
# イメージも含めて再ビルド
❯ docker compose up -d --build
wp-contentだけではなく、WP-CLIも使いたい
WordPressの管理作業(プラグインの一括更新、ユーザー管理、DB操作など)はWP-CLIが便利です。Composeに追加します。
wpcli:
image: wordpress:cli-php8.3
depends_on:
- db
- wordpress
user: "33:33" # www-data
volumes:
- ./wp-content:/var/www/html/wp-content
working_dir: /var/www/html
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
entrypoint: wp
command: "--info"
profiles: ["cli"]
profiles: ["cli"] を付けておくと、通常の docker compose up では起動せず、必要なときだけ呼び出せます。
❯ docker compose run --rm wpcli plugin list
❯ docker compose run --rm wpcli user create demo demo@example.com --role=author --user_pass=demo
HTTPSでローカル開発する(応用)
WordPressのブロックエディタやプラグインの一部はHTTPS前提で挙動が変わるため、ローカル開発でも https://wordpress.test のような独自ドメイン+自己署名証明書を使う構成が望ましいです。mkcert をホスト側にインストールし、Traefik を前段に配置する構成が2026年の定番です。この構成は長くなるため別記事で扱います。
本番環境への持ち出し
ローカルで開発したテーマ/プラグインを本番にデプロイする方法は、
- WP-CLI で tar した wp-content を rsync — シンプルでトラブルが少ない
- GitHub ActionsでCI/CDパイプライン —
pull_request時にRewrite内容をレビュー、mainへの push で WP-CLI 経由デプロイ - WordPress Playground(WordPress.orgが公式提供) — ブラウザ上でWordPressを動かすので、プラグイン/テーマの動作確認に便利
2016年当時記事で紹介していた VCCW + WordMove は、現在は実質的に利用者が激減しています。
まとめ
compose.yaml一枚でWordPress + MariaDB + Adminer が立ち上がる- MariaDBを使えばApple Siliconでもネイティブ速度で快適
:cached、links、version:はもう書かなくてよい- WP-CLIは別サービスとしてprofilesで切り分ける