2026年11月2日

2026年11月2日

Composerを使ったWordPressの依存関係管理方法【プロ向け開発環境】

はじめに

WordPressの依存関係管理にComposerを使うことで、プラグインやライブラリのバージョン管理をコードとして扱えるようになります。チーム開発での環境差異をなくし、本番環境への安全なデプロイを実現するプロ向けの手法を解説します。

症状・原因

  • チームメンバーごとに異なるプラグインバージョンが入っており環境差異が生じている
  • プラグインを手動でダウンロード・アップロードしており、バージョン管理ができていない
  • サードパーティのPHPライブラリをWordPressで使いたいが読み込み方法が分からない
  • 本番環境へのデプロイ時に「あのプラグインを入れ忘れた」という事態が起きる

解決手順

ステップ1:composer.jsonのセットアップとWPackagist登録

WPackagist(wpackagist.org)はWordPress公式プラグイン・テーマをComposerで管理するためのミラーリポジトリです。

# Composerのインストール(グローバル)
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer

# プロジェクトの初期化
mkdir my-wordpress-project && cd my-wordpress-project
composer init
{
  "name": "mycompany/my-wordpress-site",
  "description": "WordPressプロジェクト",
  "type": "project",
  "license": "proprietary",
  "require": {
    "php": ">=8.1",
    "composer/installers": "^2.0",
    "roots/wordpress": "^6.5",
    "wpackagist-plugin/query-monitor": "^3.14",
    "wpackagist-plugin/advanced-custom-fields": "^6.2",
    "wpackagist-theme/twentytwentyfour": "^1.0"
  },
  "require-dev": {
    "wp-coding-standards/wpcs": "^3.0",
    "phpunit/phpunit": "^10.0",
    "roots/wordpress-no-content": "^6.5"
  },
  "repositories": [
    {
      "type": "composer",
      "url": "https://wpackagist.org",
      "only": ["wpackagist-plugin/*", "wpackagist-theme/*"]
    },
    {
      "type": "composer",
      "url": "https://wp-languages.github.io"
    }
  ],
  "extra": {
    "installer-paths": {
      "web/app/plugins/{$name}/": ["type:wordpress-plugin"],
      "web/app/themes/{$name}/": ["type:wordpress-theme"],
      "web/app/mu-plugins/{$name}/": ["type:wordpress-muplugin"]
    },
    "wordpress-install-dir": "web/wp"
  },
  "config": {
    "allow-plugins": {
      "composer/installers": true,
      "roots/wordpress-core-installer": true
    }
  }
}
# 依存関係のインストール
composer install

# バージョンロックファイルを更新せずにインストール(本番環境)
composer install --no-dev --optimize-autoloader

ステップ2:プラグイン・テーマのComposer管理

WPackagistを使えばWordPress公式リポジトリのプラグインをComposerで管理できます。

# プラグインをComposerで追加
composer require wpackagist-plugin/contact-form-7
composer require wpackagist-plugin/wordfence:"^7.11"

# 有料プラグインはプライベートリポジトリ経由で管理
# composer.json に追加
{
  "repositories": [
    {
      "type": "package",
      "package": {
        "name": "acf/advanced-custom-fields-pro",
        "version": "6.2.9",
        "type": "wordpress-plugin",
        "dist": {
          "type": "zip",
          "url": "https://connect.advancedcustomfields.com/index.php?p=pro&a=download&k={%ACF_PRO_KEY%}"
        }
      }
    }
  ]
}
# 環境変数でACFプロライセンスキーを渡す
ACF_PRO_KEY=your-license-key composer install

# バージョン指定でアップデート
composer update wpackagist-plugin/query-monitor

# インストール済みパッケージの一覧確認
composer show --installed

プライマリでないWordPress公式プラグインはcomposer.lockによってバージョンが固定されるため、gitリポジトリにcomposer.lockを含めることが重要です。

ステップ3:PSR-4オートロードによるカスタムプラグインクラス管理

ComposerのオートロードをカスタムプラグインのPHPクラス管理に活用します。

{
  "autoload": {
    "psr-4": {
      "MyPlugin\\": "web/app/plugins/my-plugin/src/"
    }
  },
  "autoload-dev": {
    "psr-4": {
      "MyPlugin\\Tests\\": "web/app/plugins/my-plugin/tests/"
    }
  }
}
# オートロードファイルを再生成
composer dump-autoload
composer dump-autoload --optimize  # 本番環境
<?php
// web/app/plugins/my-plugin/my-plugin.php

// Composerオートローダーを読み込む
require_once dirname( __DIR__, 3 ) . '/vendor/autoload.php';

use MyPlugin\Services\PostService;
use MyPlugin\Repositories\PostRepository;

class My_Plugin {
    
    private PostService $post_service;
    
    public function __construct() {
        // DIコンテナ的な初期化
        $repository        = new PostRepository();
        $this->post_service = new PostService( $repository );
        
        add_action( 'init', [ $this, 'init' ] );
    }
    
    public function init(): void {
        $this->post_service->register_post_type();
    }
}

new My_Plugin();
<?php
// web/app/plugins/my-plugin/src/Services/PostService.php
namespace MyPlugin\Services;

use MyPlugin\Repositories\PostRepository;

class PostService {
    
    public function __construct(
        private readonly PostRepository $repository
    ) {}
    
    public function register_post_type(): void {
        register_post_type( 'product', [
            'label'  => '商品',
            'public' => true,
        ] );
    }
}

ステップ4:BedrockスタイルのWordPressディレクトリ構成

Bedrock(Roots.io)は、Composerを前提としたWordPressのモダンなディレクトリ構造です。

# Bedrockプロジェクトの作成
composer create-project roots/bedrock my-site
cd my-site
my-site/
├── composer.json
├── composer.lock
├── .env                    # 環境変数(gitignore)
├── .env.example           # テンプレート
├── config/
│   ├── application.php    # wp-config.php の代わり
│   └── environments/
│       ├── development.php
│       ├── staging.php
│       └── production.php
└── web/                   # ドキュメントルート
    ├── app/               # wp-content の代わり
    │   ├── plugins/
    │   ├── mu-plugins/
    │   └── themes/
    ├── wp/                # WordPress本体(gitignore)
    └── index.php
# .env ファイルの設定
DB_NAME=my_database
DB_USER=db_user
DB_PASSWORD=secure_password
DB_HOST=localhost

WP_ENV=development
WP_HOME=https://mysite.local
WP_SITEURL=${WP_HOME}/wp

# セキュリティキー(wp-cli/wp-cli からも生成可能)
AUTH_KEY='...'
SECURE_AUTH_KEY='...'
<?php
// config/application.php
use Roots\WPConfig\Config;
use function Roots\WPConfig\config;

Config::define( 'DB_NAME', env( 'DB_NAME' ) );
Config::define( 'DB_USER', env( 'DB_USER' ) );
Config::define( 'WP_HOME', env( 'WP_HOME' ) );
Config::define( 'WP_SITEURL', env( 'WP_SITEURL' ) );

// 環境別設定を読み込む
$application_config = __DIR__ . '/environments/' . env( 'WP_ENV' ) . '.php';
if ( file_exists( $application_config ) ) {
    require_once $application_config;
}

Config::apply();

ステップ5:本番環境へのComposerデプロイ

本番環境では開発依存を除外し、オートローダーを最適化します。

#!/bin/bash
# deploy.sh — 本番デプロイスクリプト

set -euo pipefail

DEPLOY_PATH="/var/www/production"
REPO_URL="git@github.com:mycompany/my-site.git"

echo "=== デプロイ開始 ==="

# 最新コードをpull
cd "$DEPLOY_PATH"
git pull origin main

# Composerで本番インストール
# --no-dev: 開発依存を除外
# --no-interaction: インタラクティブ入力を無効
# --optimize-autoloader: クラスマップを生成して高速化
# --prefer-dist: zipダウンロードで高速化
composer install \
    --no-dev \
    --no-interaction \
    --optimize-autoloader \
    --prefer-dist

# WordPressのキャッシュをクリア
wp --path="$DEPLOY_PATH/web/wp" cache flush --allow-root

# データベースマイグレーション(必要な場合)
wp --path="$DEPLOY_PATH/web/wp" core update-db --allow-root

echo "=== デプロイ完了 ==="
# composer.lock の整合性チェック
composer validate
composer check-platform-reqs

# セキュリティ脆弱性チェック
composer audit

# 利用可能なアップデートを確認(実際には更新しない)
composer outdated --minor-only

注意事項

  • vendor/ディレクトリとweb/wp/(WordPressコア)は.gitignoreに追加し、Gitで管理しないようにしてください。composer.lockのみをコミットすることでバージョンを固定します
  • 有料プラグインのソースコードをWPackagistや公開リポジトリ経由で配布することはライセンス違反になる場合があります。プライベートSatisサーバーやComposer Artifactを使って配布してください
  • composer install --no-devを本番で実行する際は、事前にステージング環境で同じコマンドをテストし、必要な依存関係がrequire(devでない)に含まれていることを確認してください

まとめ

ComposerとWPackagistを組み合わせることで、WordPressプロジェクトの依存関係をコードとして管理できます。Bedrock構成を採用することで、セキュリティ向上と環境ごとの設定分離も実現できます。チーム開発の品質を高め、デプロイの信頼性を大幅に向上させましょう。

関連記事:PHPUnitを使ったWordPressプラグインのユニットテスト実装方法

お気軽にご相談ください

お見積りへ お問い合わせへ
▲