Skip to content

WordPress開発ガイド

このガイドでは、本プロジェクトにおけるWordPressサイトの開発手法、データ管理、および機能実装の具体的な手順について解説します。

docs/presentation/content_ideas.md に記載されているアイデアを実装する際は、このガイドの手順に従ってください。

1. システムアーキテクチャとデータ永続化

このプロジェクトでは、Docker Composeを使用してWordPressとMariaDBを連携させています。

ボリューム構成

docker-compose.yml の設定により、以下のデータがホスト側のディレクトリに永続化(バインドマウント)されています。

サービスコンテナ内パスホスト側パス内容
WordPress/var/www/html/home/${USER}/data/wordpressWordPressコア、テーマ、プラグイン、アップロード画像など
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 ディレクトリにあるファイルを直接編集することで、コンテナ内に即座に反映されます。

  1. テーマ編集: /home/${USER}/data/wordpress/wp-content/themes/<現在のテーマ>/
  2. プラグイン作成: /home/${USER}/data/wordpress/wp-content/plugins/

TIP

VSCodeなどのエディタで /home/${USER}/data/wordpress を開くことで、快適にコーディングが可能です。

C. CLIでの開発 (Command Line)

wp-cli ツールを使用して、コンテナ内部からWordPressを操作する手法です。大量のデータ作成や設定の自動化に便利です。

bash
# WordPressコンテナに入る
docker compose -f ./srcs/docker-compose.yml exec wordpress bash

# wp-cliコマンドの実行例(プラグイン一覧表示)
wp plugin list --allow-root

3. データのバージョン管理 (MariaDB)

データベースの内容(記事や設定)はGitで管理できないため、SQLファイルとしてエクスポート・インポートすることで管理します。

バックアップ (Export)

現在のデータベースの状態をSQLファイルに保存します。

bash
# ホスト側で実行
docker compose -f ./srcs/docker-compose.yml exec mariadb \
  mysqldump -u$MYSQL_USER -p$MYSQL_PASSWORD $MYSQL_DATABASE > backup.sql

リストア (Import)

保存したSQLファイルからデータベースを復元します。

bash
# ホスト側で実行
docker compose -f ./srcs/docker-compose.yml exec -T mariadb \
  mysql -u$MYSQL_USER -p$MYSQL_PASSWORD $MYSQL_DATABASE < backup.sql

NOTE

srcs/.env ファイルに定義されている環境変数 (MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE) が使用されます。

自動化: Makefileにバックアップ用コマンドを追加済みです。以下のコマンドで簡単に実行できます。

bash
# バックアップ
make backup-db

# リストア
make restore-db

4. content_ideas.md 実装の具体的フローと自動化

自動化スクリプトによる実装 (推奨)

手作業でのコマンド実行ミスを防ぎ、再構築(make clean後の復旧)を容易にするため、セットアップスクリプトを用意しました。 このスクリプトは以下の処理を一括で行います:

  1. 高速化設定: 外部HTTPリクエストのブロック (WP_HTTP_BLOCK_EXTERNAL)
  2. テーマ: Astraをインストール・有効化
  3. プラグイン: Elementor, Polylang, Contact Form 7, Yoast SEO, Classic Editor, Redis Cache等のインストール・有効化
  4. コンテンツ作成: 固定ページ(Home, About, Works, Contact, Redis Test), カテゴリ, ダミー記事
  5. 設定: フロントページを「Home」に固定、メニュー作成を作成・割り当て
  6. ボーナス: Redisオブジェクトキャッシュを有効化

実行方法:

bash
# ホスト側からスクリプトを実行
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 としてプロジェクトリポジトリ内で管理しています。コンテナ再起動で消えることはありません。

手動での実装フロー

(※自動化スクリプトを使わない場合の手順)

  1. テーマのインストール (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 に外部通信ブロック設定を追加します(自動化スクリプトに含まれています)。

php
define( 'WP_HTTP_BLOCK_EXTERNAL', true );

Q2. メニュー項目が重複している

原因: 自動化スクリプト等を複数回実行した際、既存チェックを行わずに wp menu item add-post を連打すると発生します。 対策: 一度メニューを削除して作り直すのが早いです。

bash
# メニュー削除
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管理)

... (以下既存の内容)

Released under the MIT License.