WordPress開発ガイド
このガイドでは、本プロジェクトにおけるWordPressサイトの開発手法、データ管理、および機能実装の具体的な手順について解説します。
docs/presentation/content_ideas.md に記載されているアイデアを実装する際は、このガイドの手順に従ってください。
1. システムアーキテクチャとデータ永続化
このプロジェクトでは、Docker Composeを使用してWordPressとMariaDBを連携させています。
ボリューム構成
docker-compose.yml の設定により、以下のデータがホスト側のディレクトリに永続化(バインドマウント)されています。
| サービス | コンテナ内パス | ホスト側パス | 内容 |
|---|---|---|---|
| WordPress | /var/www/html | /home/${USER}/data/wordpress | WordPressコア、テーマ、プラグイン、アップロード画像など |
| MariaDB | /var/lib/mysql | /home/${USER}/data/mariadb | 記事データ、設定、ユーザー情報などのデータベース |
IMPORTANT
コンテナやネットワークは make clean で削除されますが、ホスト側のボリュームデータ (/home/${USER}/data/) は保持されます。 データを完全に消去して初期化したい場合は、make fclean (コンテナ+データ削除) または手動で sudo rm -rf を実行する必要があります。
2. 開発ワークフロー
開発には主に3つのアプローチがあります。
A. GUIでの開発 (NoCode / LowCode)
WordPressの管理画面から行う最も標準的な開発手法です。
- URL:
https://<あなたのドメイン>/wp-admin - 主な作業: 記事投稿、固定ページ作成、テーマカスタマイズ、プラグイン設定、ウィジェット配置。
- メリット: プログラミング知識不要で素早く構築できる。
B. PHPファイルでの開発 (Coding)
テーマファイル (style.css, functions.php) やカスタムプラグインを直接編集する手法です。 ホスト側の /home/${USER}/data/wordpress ディレクトリにあるファイルを直接編集することで、コンテナ内に即座に反映されます。
- テーマ編集:
/home/${USER}/data/wordpress/wp-content/themes/<現在のテーマ>/ - プラグイン作成:
/home/${USER}/data/wordpress/wp-content/plugins/
TIP
VSCodeなどのエディタで /home/${USER}/data/wordpress を開くことで、快適にコーディングが可能です。
C. CLIでの開発 (Command Line)
wp-cli ツールを使用して、コンテナ内部からWordPressを操作する手法です。大量のデータ作成や設定の自動化に便利です。
# WordPressコンテナに入る
docker compose -f ./srcs/docker-compose.yml exec wordpress bash
# wp-cliコマンドの実行例(プラグイン一覧表示)
wp plugin list --allow-root3. データのバージョン管理 (MariaDB)
データベースの内容(記事や設定)はGitで管理できないため、SQLファイルとしてエクスポート・インポートすることで管理します。
バックアップ (Export)
現在のデータベースの状態をSQLファイルに保存します。
# ホスト側で実行
docker compose -f ./srcs/docker-compose.yml exec mariadb \
mysqldump -u$MYSQL_USER -p$MYSQL_PASSWORD $MYSQL_DATABASE > backup.sqlリストア (Import)
保存したSQLファイルからデータベースを復元します。
# ホスト側で実行
docker compose -f ./srcs/docker-compose.yml exec -T mariadb \
mysql -u$MYSQL_USER -p$MYSQL_PASSWORD $MYSQL_DATABASE < backup.sqlNOTE
srcs/.env ファイルに定義されている環境変数 (MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE) が使用されます。
自動化: Makefileにバックアップ用コマンドを追加済みです。以下のコマンドで簡単に実行できます。
# バックアップ
make backup-db
# リストア
make restore-db4. content_ideas.md 実装の具体的フローと自動化
自動化スクリプトによる実装 (推奨)
手作業でのコマンド実行ミスを防ぎ、再構築(make clean後の復旧)を容易にするため、セットアップスクリプトを用意しました。 このスクリプトは以下の処理を一括で行います:
- 高速化設定: 外部HTTPリクエストのブロック (
WP_HTTP_BLOCK_EXTERNAL) - テーマ: Astraをインストール・有効化
- プラグイン: Elementor, Polylang, Contact Form 7, Yoast SEO, Classic Editor, Redis Cache等のインストール・有効化
- コンテンツ作成: 固定ページ(Home, About, Works, Contact, Redis Test), カテゴリ, ダミー記事
- 設定: フロントページを「Home」に固定、メニュー作成を作成・割り当て
- ボーナス: Redisオブジェクトキャッシュを有効化
実行方法:
# ホスト側からスクリプトを実行
docker compose -f ./srcs/docker-compose.yml exec -T wordpress bash < srcs/tools/setup_content.sh注意点: /tmp/setup_content.sh について
過去の履歴で出てきた /tmp/setup_content.sh は、一時的にコンテナ内に作成した使い捨てスクリプトです。 現在は srcs/tools/setup_content.sh としてプロジェクトリポジトリ内で管理しています。コンテナ再起動で消えることはありません。
手動での実装フロー
(※自動化スクリプトを使わない場合の手順)
- テーマのインストール (CLI/GUI) ... (以下略: 必要に応じて参照)
5. データ管理とチーム開発戦略
開発を安定させ、ミスを防ぐためのデータ管理方法です。
A. バックアップ運用ルール
make backup-db で生成される backup.sql は、その時点のスナップショットです。 開発フェーズごとにファイル名を変えて管理することを推奨します。
- ファイル命名規則:
backup_YYYYMMDD_phase.sql- 例:
backup_20240206_init.sql(初期状態) - 例:
backup_20240207_plugins_added.sql(プラグイン追加後)
- 例:
- 保存場所:
- 個人開発: ローカルの
data_backup/ディレクトリ(Git管理外) - チーム開発: Dropbox, Google Drive, S3 などの共有ストレージ、またはGit LFS(ただし大容量には不向き)
- 個人開発: ローカルの
B. プロジェクトリポジトリでの管理
「コンテンツの構成(ページ構造や初期設定)」は、バイナリのSQLダンプではなく、可能な限り**再現可能なコード(今回の setup_content.sh)**としてGit管理するのがベストプラクティスです。 SQLダンプは「最終手段」や「ユーザーデータ(コメント等)の保存」として扱い、基本構築はスクリプトで行うと、誰でも同じ環境を再現できます。
6. トラブルシューティング
Q1. サイトの読み込みが非常に遅い (10秒以上かかる)
原因: WordPressが外部サーバー(更新チェック等)への通信を試みてタイムアウトしています。オフライン環境やファイアウォール内ではよく発生します。 対策: wp-config.php に外部通信ブロック設定を追加します(自動化スクリプトに含まれています)。
define( 'WP_HTTP_BLOCK_EXTERNAL', true );Q2. メニュー項目が重複している
原因: 自動化スクリプト等を複数回実行した際、既存チェックを行わずに wp menu item add-post を連打すると発生します。 対策: 一度メニューを削除して作り直すのが早いです。
# メニュー削除
docker compose -f ./srcs/docker-compose.yml exec wordpress wp menu delete "Main Menu" --allow-root
# (その後、修正済みの setup_content.sh を実行)Q3. ping コマンドが見つからない
原因: WordPressの公式Dockerイメージは軽量化のため ping 等のツールが含まれていない(Debian Slimベースなど)ことがあります。 対策: 疎通確認には curl やPHPの fsockopen 等を使用するか、一時的に apt-get update && apt-get install iputils-ping でインストールします。
7. 他ツールとの連携
Adminer (DB管理)
... (以下既存の内容)