WordPress/wordpress-develop

⭐ 2,892 🍴 2,967 PHP📄 GNU General Public License v2.0以降 GitHubで見る →

主な特徴

  • **包括的な開発環境**: Dockerベースのローカル開発環境を提供
  • **モダンなJavaScriptビルド**: Webpackを使用したブロックエディタ、Reactコンポーネント
  • **幅広いテストカバレッジ**: PHP 7.2-8.4、複数のMySQL/MariaDBバージョン対応
  • **現代的なアーキテクチャ**: REST API、ブロックエディタ、OOP設計
  • **CI/CDパイプライン**: 40以上のGitHub Actionsワークフロー
  • **コミュニティ主導**: オープンソースコミュニティによる積極的な開発
  • **後方互換性**: PHP 7.2以降をサポート、慎重な非推奨プロセス

リポジトリ解析: WordPress/wordpress-develop

基本情報

  • リポジトリ名: WordPress/wordpress-develop
  • 主要言語: PHP
  • スター数: 2,892
  • フォーク数: 2,967
  • 最終更新: 継続的に更新中(アクティブな開発)
  • ライセンス: GNU General Public License v2.0以降
  • トピックス: WordPress Core Development, CMS, PHP, JavaScript, React, Block Editor, REST API

概要

一言で言うと

wordpress-developは、世界で最も人気のあるCMSであるWordPressの公式コア開発リポジトリ。WordPressコアのすべての開発がここで行われ、リリース前の最新コードを含む。

詳細説明

このリポジトリはWordPress SubversionリポジトリのGitミラーで、WordPressコア開発の中心拠点。開発は主にTrac(core.trac.wordpress.org)で管理されているが、GitHubのプルリクエストも受け付けている。プラグインやテーマ開発ではなく、WordPressコア自体の開発に特化している。現在のバージョン6.9.0で、継続的に機能拡張と改善が行われている。

主な特徴

  • 包括的な開発環境: Dockerベースのローカル開発環境を提供
  • モダンなJavaScriptビルド: Webpackを使用したブロックエディタ、Reactコンポーネント
  • 幅広いテストカバレッジ: PHP 7.2-8.4、複数のMySQL/MariaDBバージョン対応
  • 現代的なアーキテクチャ: REST API、ブロックエディタ、OOP設計
  • CI/CDパイプライン: 40以上のGitHub Actionsワークフロー
  • コミュニティ主導: オープンソースコミュニティによる積極的な開発
  • 後方互換性: PHP 7.2以降をサポート、慎重な非推奨プロセス

使用方法

インストール

前提条件

  • Node.js 20.x および npm 10.x(公式サポートバージョン)
  • Docker Desktop
  • Git
  • PHP 7.2以降(テスト実行時)
  • MySQL 5.7以降またはMariaDB

インストール手順

# 方法1: Dockerを使用したクイックスタート
git clone https://github.com/WordPress/wordpress-develop.git
cd wordpress-develop
npm install
npm run build:dev
npm run env:start
npm run env:install

# 方法2: GitHub Codespacesを使用
# GitHub上で直接「Code」ボタンからCodespacesを開始

基本的な使い方

Hello World相当の例

// シンプルなプラグインの例(Hello Dolly風)
<?php
/**
 * Plugin Name: My First Plugin
 * Description: A simple WordPress plugin example
 */

// ダイレクトアクセス防止
if ( ! defined( 'ABSPATH' ) ) {
    die();
}

// 管理画面にメッセージを表示
function my_admin_notice() {
    echo '<div class="notice notice-success"><p>Hello from My Plugin!</p></div>';
}
add_action( 'admin_notices', 'my_admin_notice' );

実践的な使用例

// フックとフィルターの使用例
// functions.phpまたはプラグイン内で使用

// コンテンツにカスタムテキストを追加
function add_custom_content( $content ) {
    if ( is_single() && in_the_loop() && is_main_query() ) {
        $custom_text = '<p class="custom-message">' . 
                      __( 'Thanks for reading!', 'textdomain' ) . 
                      '</p>';
        $content .= $custom_text;
    }
    return $content;
}
add_filter( 'the_content', 'add_custom_content' );

// カスタム投稿タイプの登録
function create_custom_post_type() {
    register_post_type( 'product',
        array(
            'labels' => array(
                'name' => __( 'Products', 'textdomain' ),
                'singular_name' => __( 'Product', 'textdomain' )
            ),
            'public' => true,
            'has_archive' => true,
            'supports' => array( 'title', 'editor', 'thumbnail' ),
            'menu_icon' => 'dashicons-cart',
        )
    );
}
add_action( 'init', 'create_custom_post_type' );

高度な使い方

// REST APIエンドポイントの作成
class My_Custom_REST_Controller extends WP_REST_Controller {
    
    public function __construct() {
        $this->namespace = 'myplugin/v1';
        $this->rest_base = 'items';
    }
    
    public function register_routes() {
        register_rest_route( $this->namespace, '/' . $this->rest_base, array(
            array(
                'methods'             => WP_REST_Server::READABLE,
                'callback'            => array( $this, 'get_items' ),
                'permission_callback' => array( $this, 'get_items_permissions_check' ),
                'args'                => $this->get_collection_params(),
            ),
            'schema' => array( $this, 'get_public_item_schema' ),
        ) );
    }
    
    public function get_items( $request ) {
        $items = array();
        // カスタムロジックでアイテムを取得
        
        $response = rest_ensure_response( $items );
        return $response;
    }
    
    public function get_items_permissions_check( $request ) {
        return true; // またはcurrent_user_can( 'read' )
    }
}

// REST APIコントローラーの登録
function register_my_rest_routes() {
    $controller = new My_Custom_REST_Controller();
    $controller->register_routes();
}
add_action( 'rest_api_init', 'register_my_rest_routes' );

ドキュメント・リソース

公式ドキュメント

サンプル・デモ

  • wp-config-sample.php: WordPress設定ファイルのテンプレート
  • src/wp-content/plugins/hello.php: Hello Dollyプラグイン(シンプルなプラグインの例)
  • src/wp-content/themes/: Twenty Twentyシリーズのデフォルトテーマ

チュートリアル・ガイド

  • 開発者ハンドブック: コードスタンダード、APIリファレンス
  • プラグイン開発ガイド: プラグイン開発のベストプラクティス
  • テーマ開発ガイド: テーマ開発の基礎
  • Block Editor Handbook: ブロックエディタ開発ガイド

技術的詳細

アーキテクチャ

全体構造

WordPressはプラグインアーキテクチャを採用し、フックシステム(アクションとフィルター)を中心に拡張可能な設計。初期化フローはwp-load.php→wp-config.php→wp-settings.phpの順で実行され、コア機能、プラグイン、テーマが順次読み込まれる。

ディレクトリ構成

wordpress-develop/
├── src/                    # ソースファイル(開発はここで行う)
│   ├── wp-admin/          # 管理画面インターフェース
│   ├── wp-includes/       # コアWordPressファイル
│   │   ├── blocks/        # ブロック定義
│   │   ├── rest-api/      # REST API実装
│   │   ├── js/             # JavaScriptライブラリ
│   │   └── css/            # スタイルシート
│   ├── wp-content/        # テーマ、プラグイン用ディレクトリ
│   └── *.php              # コアWordPressファイル
├── build/                 # ビルドされたファイル(自動生成)
├── tests/                 # テストスイート
│   ├── phpunit/          # PHPユニットテスト
│   ├── e2e/              # E2Eテスト(Playwright)
│   ├── performance/      # パフォーマンステスト
│   └── qunit/            # JavaScriptテスト
├── tools/                 # ビルド・開発ツール
└── .github/workflows/     # CI/CD設定(40+ワークフロー)

主要コンポーネント

  • wp-load.php: WordPress初期化のエントリポイント

    • 場所: src/wp-load.php
    • 依存: wp-config.php
    • インターフェース: ABSPATH設定、wp-config読み込み
  • wp-settings.php: コア初期化処理

    • 場所: src/wp-settings.php
    • 依存: 全コアコンポーネント
    • インターフェース: エラーハンドリング、DB初期化、プラグイン/テーマ読み込み
  • WP_Hookクラス: フックシステムの中核

    • 場所: src/wp-includes/class-wp-hook.php
    • 依存: なし
    • インターフェース: add_filter(), do_action(), apply_filters()
  • REST APIコントローラー: モダンなAPI実装

    • 場所: src/wp-includes/rest-api/
    • 依存: WP_REST_Controller基底クラス
    • インターフェース: register_rest_route(), RESTエンドポイント

技術スタック

コア技術

  • 言語: PHP 7.2-8.4(幅広いバージョンサポート)
  • JavaScript: モダンJavaScript(ES6+)、React(ブロックエディタ)
  • データベース: MySQL 5.7+, 8.0, 8.4 / MariaDB
  • 主要ライブラリ:
    • @wordpress/* packages: コアJavaScriptパッケージ
    • jQuery: 後方互換性のため
    • Lodash, Moment.js: ユーティリティ
    • React, Redux: ブロックエディタのUI

開発・運用ツール

  • ビルドツール:
    • Grunt: メインビルドシステム
    • Webpack: モダンJavaScriptバンドル
    • npm scripts: タスク管理
  • テスト:
    • PHPUnit: PHPユニットテスト
    • QUnit: レガシーJavaScriptテスト
    • Playwright: E2Eテスト
    • カバレッジ: Codecovへのレポート
  • CI/CD:
    • GitHub Actions: 40+ワークフロー
    • マトリックステスト: 複数PHP/DBバージョン
    • 自動依存関係更新
  • デプロイ: Dockerベースのローカル環境

設計パターン・手法

  • プラグインアーキテクチャ: フックシステムによる拡張可能な設計
  • イベント駆動: アクションとフィルターによる処理
  • テンプレート階層: 柔軟なテーマカスタマイズ
  • オブジェクト指向: 新しいコードではOOP採用
  • 国際化(i18n): __(), _e()等の翻訳関数
  • セキュリティパターン:
    • 直接アクセス防止: if ( ! defined( 'ABSPATH' ) )
    • 出力エスケープ: esc_html(), esc_attr()
    • 入力サニタイズ: sanitize_text_field()

データフロー・処理フロー

1. HTTPリクエスト
   ↓
2. wp-load.php (初期化開始)
   ↓
3. wp-config.php (設定読み込み)
   ↓
4. wp-settings.php (コア初期化)
   ↓
5. プラグイン読み込み
   ↓
6. テーマ functions.php
   ↓
7. initアクション実行
   ↓
8. クエリ解析とルーティング
   ↓
9. テンプレート選択・読み込み
   ↓
10. コンテンツ出力

API・インターフェース

公開API

フックAPI

  • アクション: 特定のタイミングで処理を実行
// アクションの使用
function my_init_function() {
    // 初期化処理
}
add_action( 'init', 'my_init_function' );

// 優先度付き
add_action( 'wp_head', 'my_head_function', 10 );
  • フィルター: 値を変更して返す
// フィルターの使用
function my_title_filter( $title ) {
    return $title . ' - My Site';
}
add_filter( 'the_title', 'my_title_filter' );

// 複数パラメータ
add_filter( 'the_content', 'my_content_filter', 10, 2 );

REST API

  • エンドポイント: /wp-json/wp/v2/
// カスタムエンドポイント登録
register_rest_route( 'myplugin/v1', '/data/', array(
    'methods' => 'GET',
    'callback' => 'my_api_callback',
    'permission_callback' => '__return_true',
) );

function my_api_callback( $request ) {
    return new WP_REST_Response( array( 'data' => 'value' ), 200 );
}

設定・カスタマイズ

設定ファイル

// wp-config.phpの主要設定
define( 'DB_NAME', 'database_name' );
define( 'DB_USER', 'username' );
define( 'DB_PASSWORD', 'password' );
define( 'DB_HOST', 'localhost' );
define( 'DB_CHARSET', 'utf8mb4' );
define( 'DB_COLLATE', '' );

// セキュリティキー(必ず変更)
define( 'AUTH_KEY', 'unique phrase' );
define( 'SECURE_AUTH_KEY', 'unique phrase' );
// ... 他のキー

// デバッグ設定
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
define( 'SCRIPT_DEBUG', true );

// マルチサイト
define( 'WP_ALLOW_MULTISITE', true );

拡張・プラグイン開発

// プラグインヘッダーの標準形式
/**
 * Plugin Name: My Plugin
 * Plugin URI: https://example.com/
 * Description: Plugin description
 * Version: 1.0.0
 * Author: Author Name
 * License: GPL v2 or later
 * Text Domain: my-plugin
 */

// アクティベーション・ディアクティベーションフック
register_activation_hook( __FILE__, 'my_plugin_activate' );
register_deactivation_hook( __FILE__, 'my_plugin_deactivate' );

// アンインストールフック
register_uninstall_hook( __FILE__, 'my_plugin_uninstall' );

パフォーマンス・スケーラビリティ

パフォーマンス特性

  • キャッシュ: オブジェクトキャッシュ、ページキャッシュ対応
  • 最適化手法:
    • Lazy Loading: 画像、iframeの遅延読み込み
    • Script/Styleの最小化と結合
    • PHP OPcache対応
    • データベースクエリ最適化
  • パフォーマンステスト:
    • Core Web Vitals対応
    • Lighthouseスコア最適化

スケーラビリティ

  • マルチサイト: 単一WordPressで複数サイト運用
  • ロードバランシング: HyperDB等でDB分散
  • CDN統合: 静的ファイルのCDN配信
  • プラグインアーキテクチャ: 機能分離によるスケール

制限事項

  • 技術的な制限:

    • PHPのシングルスレッドモデル
    • データベース依存のアーキテクチャ
    • ファイルシステムへの依存
  • 運用上の制限:

    • 定期的なセキュリティ更新が必須
    • プラグインの互換性問題
    • バージョンアップグレードの慎重な計画

評価・所感

技術的評価

強み

  • 成熟したエコシステム: 20年以上の歴史、幅広いプラグイン/テーマ
  • 拡張性: フックシステムによる高いカスタマイズ性
  • 使いやすさ: 非技術者でも管理可能なUI
  • 後方互換性: 古いサイトも継続運用可能
  • アクティブな開発: 継続的な機能改善とセキュリティ更新
  • 充実したドキュメント: 開発者向けリソースが豊富

改善の余地

  • パフォーマンス: デフォルト設定では速度が課題
  • モダンなアーキテクチャ: レガシーコードの存在
  • JavaScriptフレームワーク: jQuery依存からの移行途中
  • テストカバレッジ: 全体的なカバレッジ向上の余地

向いている用途

  • 企業サイト: 柔軟なCMSとして
  • ブログ・メディア: コンテンツ管理に最適
  • ECサイト: WooCommerce等で完全なEC構築
  • 会員制サイト: ユーザー管理機能が充実
  • 多言語サイト: 完全なi18nサポート

向いていない用途

  • 大規模Webアプリケーション: CMS機能が不要な場合
  • リアルタイムアプリ: WebSocket等が必要な場合
  • 高度なカスタムロジック: フレームワークの制約が強い場合

総評

wordpress-developは、世界で最も成功したCMSのコア開発リポジトリ。その成功の鍵は、後方互換性を保ちながら最新技術を取り入れるバランス、プラグインアーキテクチャによる無限の拡張性、そして活発なコミュニティにある。Dockerベースの開発環境、包括的なテストスイート、GitHub ActionsによるCI/CDなど、モダンな開発手法も積極的に採用されている。コントリビュータとして参加するにはハードルがあるが、Web開発の基礎を学ぶ上でも価値のあるリポジトリ。