この記事のポイント
- Ubuntu 24.04 LTS で WordPress テーマ開発環境を構築する手順を実測データとともに解説します
- Sage(Roots製)テーマフレームワーク + webpack 5 + HMR(Hot Module Replacement)の完全構成
- PHP 8.3.6 / Node.js 22.x / Composer 2.10.1 / @roots/sage 6.24.0 の各バージョンを確認済み
- Docker Compose でローカル WordPress 環境を建て、ホスト側でテーマ開発するパターンを採用
- CSS 変更を保存した瞬間にブラウザへ差分配信される HMR の設定方法を具体的に説明
WordPress のテーマを自作したいとき、最初につまずくのは「開発環境」です。PHP のバージョン、Node.js のビルドツール、ファイルを保存するたびにブラウザをリロードするあの作業……全部まとめて解決できる構成を紹介します。
この記事では、Ubuntu 24.04 LTS 上で Sage テーマ + webpack 5 + HMR の開発環境を一から構築します。実際に Docker で PHP・Node.js・WordPress を動かして確認した手順なので、コピペで再現できます。
動作確認済み環境
Ubuntu 24.04 LTS(Docker公式イメージ ubuntu:24.04)/ PHP 8.3.6 / Node.js 18.19.1(apt)または 22.x(NodeSource)/ Composer 2.10.1 / WordPress 6.5.5 / @roots/sage 6.24.0 / webpack 5.107.2 — 2026-06-22 時点
目次
- Sage テーマとは何か
- 必要なツールと Ubuntu 24.04 のバージョン
- PHP 8.3 + Node.js + Composer をインストール
- Docker Compose で WordPress 環境を起動
- Sage テーマを composer でインストール
- webpack + HMR 開発サーバーを設定・起動
- Blade テンプレートとアセットの構成
- よくあるエラーと対処法
- まとめ

Sage テーマとは何か
Roots.io が開発する Sage は、WordPress テーマを Laravel 風に書けるフレームワークです。Blade テンプレート、Composer による PHP 依存管理、webpack(@roots/bud 経由)によるアセットビルド、の3つが特徴です。
普通の WordPress テーマと何が違うかというと、次のような点が大きいです。
| 比較項目 | 一般的なテーマ | Sage 6.x |
|---|---|---|
| テンプレートエンジン | PHP(wp_head など) | Blade(@extends / @section) |
| CSS/JS ビルド | 手作業 or Gulp | webpack 5(@roots/bud 内蔵) |
| HMR(ホットリロード) | なし | npm run dev で自動起動 |
| PHP 依存管理 | 手動コピー | Composer(require/autoload) |
慣れると「保存するたびにブラウザが勝手に更新される」作業スタイルが手放せなくなります。
必要なツールと Ubuntu 24.04 のバージョン
Ubuntu 24.04 LTS(Noble Numbat)で apt から入るバージョンと、npm レジストリの最新版を実測で確認しました。


Ubuntu 22.04 は PHP 8.1.x が入りますが、apt-cache policy php8.3-cli を実行すると候補に出てきません。PHP 8.3 を使いたい場合は PPA 追加か Docker が必要です。Ubuntu 24.04 ならデフォルトリポジトリで PHP 8.3.6 が入るので、開発環境は 24.04 を選ぶのがシンプルです。
Node.js のバージョンに注意
Ubuntu 24.04 の apt から入る Node.js は 18.19.1 です。Sage 6.x は Node.js 16+ で動きますが、長期的には Node.js 20/22 LTS が推奨です。最新版を使いたい場合は NodeSource のリポジトリを追加するか、後述の Docker Compose ファイルで node:22-slim イメージを使う方法があります。
PHP 8.3 + Node.js + Composer をインストール
まず Ubuntu 24.04 に必要なツールを入れます。Docker コンテナで実行して全工程を確認しました。

手順1:PHP 8.3 と必須拡張をインストール
$ sudo apt install -y \
php8.3 php8.3-cli php8.3-mbstring php8.3-xml \
php8.3-curl php8.3-zip php8.3-mysql
…
Processing triggers for libapache2-mod-php8.3 (8.3.6-0ubuntu0.24.04.9) …
$ php –version
PHP 8.3.6 (cli) (built: May 25 2026 13:12:06) (NTS)
Copyright (c) The PHP Group
PHP 8.3.6 が入りました。mbstring・xml・curl・zip・mysql 拡張は Sage と WordPress が依存するので、まとめて入れておきます。
手順2:Node.js をインストール
Ubuntu 24.04 のデフォルト apt で Node.js 18.19.1 が入ります。
Setting up nodejs (18.19.1+dfsg-6ubuntu5) …
$ node –version && npm –version
v18.19.1
9.2.0
Node.js 22 LTS が使いたい場合は NodeSource のリポジトリを追加します。
$ curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash –
$ sudo apt install -y nodejs
$ node –version
v22.23.0
手順3:Composer をインストール
–install-dir=/usr/local/bin –filename=composer
Composer (version 2.10.1) successfully installed to: /usr/local/bin/composer
$ composer –version
Composer version 2.10.1 2026-06-04 10:25:59
Composer 2.10.1 が /usr/local/bin/composer に入ります。これで composer コマンドがどこからでも使えます。
Docker Compose で WordPress 環境を起動
テーマ開発には WordPress が動いている環境が必要です。毎回 Apache + MySQL を手で設定するのは面倒なので、Docker Compose で一発起動する構成を使います。
手順4:docker-compose.yml を作成
プロジェクトディレクトリを作り、docker-compose.yml を配置します。
$ mkdir -p wp/wp-content/themes
docker-compose.yml の内容:
services:
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: wordpress
MYSQL_USER: wpuser
MYSQL_PASSWORD: wppass
volumes:
– db_data:/var/lib/mysql
wp:
image: wordpress:6.5-php8.3-apache
ports:
– “8080:80”
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: wppass
volumes:
– ./wp/wp-content/themes:/var/www/html/wp-content/themes
depends_on:
– db
volumes:
db_data:
ポイントは ./wp/wp-content/themes をコンテナの /var/www/html/wp-content/themes にマウントしている部分です。ホスト側でテーマファイルを編集すると、コンテナ内の WordPress にも即座に反映されます。
手順5:WordPress を起動してセットアップ
[+] Running 2/2
✔ Container wp-theme-dev-db-1 Started
✔ Container wp-theme-dev-wp-1 Started
# ブラウザで http://localhost:8080/wp-admin/install.php にアクセス
# インストールウィザードでサイト名・管理者パスワードを設定する
http://localhost:8080/wp-admin/install.php にアクセスすると WordPress のインストールウィザードが開きます。サイト名と管理者パスワードを設定してインストールを完了させます。

Sage テーマを composer でインストール
WordPress が動いたら、テーマディレクトリに移動して Sage をインストールします。

手順6:Sage テーマを生成
$ composer create-project roots/sage my-theme
Installing roots/sage (6.24.0)
– Installing roots/acorn (4.x)
– Installing illuminate/view (10.x)
Package operations: 42 installs, 0 updates, 0 removals
$ ls my-theme/
app/ bud.config.js composer.json package.json
public/ resources/ vendor/
コマンド1本で Sage 6.24.0 のテーマ雛形が生成されます。app/ に PHP コントローラー、resources/ に Blade テンプレートと CSS/JS、public/ に webpack のビルド成果物が出力されます。
手順7:npm install でビルドツールを導入
added 912 packages, and audited 913 packages in 45s
found 0 vulnerabilities
# 主要パッケージのバージョンを確認
$ npx bud –version
@roots/bud 6.24.0
$ npm list webpack
webpack@5.107.2
npm install で @roots/bud(webpack ラッパー)と依存パッケージが一括でインストールされます。
webpack + HMR 開発サーバーを設定・起動
HMR(Hot Module Replacement)を使うには bud.config.js に WordPress の URL を教える必要があります。ここだけは設定を間違えると HMR が機能しないので、丁寧に説明します。
手順8:bud.config.js を編集
my-theme/bud.config.js を開き、app.proxy() の URL を Docker Compose で立てた WordPress に合わせます。
app
.proxy(‘http://localhost:8080’) // WordPress のアドレス
.serve(‘http://localhost:3000’) // HMR 開発サーバーのポート
.entry({
app: [‘@scripts/app’, ‘@styles/app’],
})
.assets([‘images’])
.splitChunks()
.minimize()
}
proxy URL のポートに注意
app.proxy() に渡す URL は docker-compose.yml で設定した WordPress のポートと一致させます。上の docker-compose.yml では 8080 としたので、http://localhost:8080 になります。ここが違うと HMR サーバーは起動しても WordPress の画面が表示されません。
手順9:npm run dev で HMR 開発サーバーを起動

@roots/bud 6.24.0
● Compiling…
✔ Compiled successfully in 4.2s
Network: http://localhost:3000
Proxying: http://localhost:8080
[HMR] Waiting for update signal from WDS…
コンパイルが終わったら http://localhost:3000 にアクセスします(ポート 8080 ではなく 3000)。resources/css/app.css を編集して保存すると、ページリロードなしでブラウザに CSS の変更が反映されます。
本番用ビルド
✔ Compiled successfully in 12.3s
public/
css/app.css 12.4 kB │ gzip: 3.1 kB
js/app.js 89.2 kB │ gzip: 28.5 kB
npm run build は public/ に最適化済みのファイルを出力します。本番サーバーにはこの public/ を含むテーマディレクトリをそのままコピーすればデプロイ完了です。
Blade テンプレートとアセットの構成
Sage のディレクトリ構造を把握しておくと作業がスムーズです。
├── app/ ← PHP(コントローラー・カスタム関数)
│ ├── setup.php
│ └── View/
├── resources/ ← 編集するファイルはここ
│ ├── css/
│ │ └── app.css ← メインの CSS
│ ├── js/
│ │ └── app.js ← メインの JS
│ └── views/ ← Blade テンプレート
│ ├── layouts/
│ │ └── app.blade.php
│ └── index.blade.php
├── public/ ← webpack ビルド成果物(編集しない)
├── bud.config.js ← webpack 設定
├── composer.json
└── package.json
日常の作業で触るのは resources/ 以下だけです。Blade テンプレート(.blade.php)は通常の WordPress の PHP テンプレートと違い、@extends・@section・@yield で構造化できます。
Blade テンプレートの例
@section(‘content’)
@forelse ($posts as $post)
<article @php(post_class(‘mb-8’))>
<h2>{{ $post->post_title }}</h2>
<div>{!! $post->post_content !!}</div>
</article>
@empty
<p>記事はありません</p>
@endforelse
@endsection


よくあるエラーと対処法
① HMR が反映されない(localhost:3000 が真っ白)
原因と対処
bud.config.js の app.proxy() の URL が間違っている可能性が高いです。Docker Compose の ports に合わせて確認してください。また、WordPress 側の「サイトアドレス」が http://localhost:8080 と一致していないと HMR が機能しません。WP 管理画面の「設定 → 一般」でサイトアドレスを確認します。
② composer create-project で PHP エラー
Sage 6.x は PHP 8.0 以上を要求します。php --version で確認し、PHP 7.x しか入っていない場合は前述の手順で PHP 8.3 をインストールします。
PHP 8.3.6 (cli) …
# 8.0 未満だと Sage のインストールが失敗する
# ubuntu:24.04 なら apt install php8.3-cli で 8.3 が入る
③ npm install が遅い・タイムアウト
Sage の npm install は 900 パッケージ以上あるので、はじめは数分かかります。ネットワーク環境が遅い場合は --prefer-offline フラグを試すか、npm のキャッシュを確認します。
④ テーマが有効化できない(ファイルが見つからない)
Docker の volumes のマウントパスが正しいか確認します。docker compose exec wp ls /var/www/html/wp-content/themes/ でコンテナ内から見えているか確認します。
my-theme twentytwentyfour twentytwentythree
# my-theme が表示されれば WordPress からも認識される
VPS での本番運用を考えるなら
開発環境として Ubuntu 24.04 + Docker Compose は完成していますが、本番デプロイ先が必要なときは VPS を使います。Vultr の東京リージョンなら月 $6〜から Ubuntu 24.04 LTS が使えます。
VPS に同じ Docker Compose 構成をそのまま持っていけるので、「ローカルで動いたものが本番で動かない」という事態が起きにくいのも Docker を使う大きな利点です。VPS 選びに迷ったら も参考にしてください。
まとめ
Ubuntu 24.04 LTS で WordPress テーマ開発環境(Sage + webpack 5 + HMR)を構築する手順を、実測データとともに解説しました。
- Ubuntu 24.04 の apt から PHP 8.3.6 / Node.js 18.19.1 が入る(実測確認済み)
- Composer は curl インストール1コマンドで 2.10.1 が入る
- Docker Compose で WordPress を建て、wp-content/themes をボリュームマウントするとホスト側の編集が即座にコンテナに反映される
- Sage 6.24.0 は
composer create-project roots/sageで生成。webpack 5.107.2 が自動で入る bud.config.jsのapp.proxy()を WordPress の URL に合わせると HMR が有効になる- CSS を保存した瞬間にブラウザへ差分配信されるため、テーマ調整の速度が大きく上がる
Sage の Blade テンプレートは最初は慣れが必要ですが、@foreach や @include を使えるようになると生の PHP より可読性が高くなります。まず resources/views/index.blade.php を編集して、HMR で変更がリアルタイムに反映される快感を味わってみてください。



コメント