😎

WordPressプラグイン開発:PHP 7と8の両方をサポートするGitHub Actions設定

に公開

WordPressの世界では、PHP 7.4から8.2以上まで幅広いPHPバージョンで動作するプラグインの開発が求められています。特にレンタルサーバーなどではPHP 7系を使用している環境も多く、プラグイン開発者は複数のバージョンをサポートする必要があります。

この記事では、GitHub Actionsを使用してPHP 7.4とPHP 8.2の両方でテストを実行する方法を解説します。

なぜ複数のPHPバージョンをサポートする必要があるのか?

  1. 幅広いユーザーベース: WordPressは様々な環境で使用されており、すべてのユーザーが最新のPHPバージョンを使用しているわけではありません
  2. レガシー環境: 多くのレンタルサーバーやホスティングサービスは旧バージョンのPHPを提供しています
  3. 互換性の確保: プラグインの安定性と信頼性を高めるためには、サポート対象のすべてのPHPバージョンでテストする必要があります

PHP 7と8の依存関係の互換性問題

最新のPHPライブラリ(AWS SDK、Symfony、Guzzleなど)はPHP 8以上を要求するケースが増えています。一方、PHP 7.4をサポートする必要もあります。この矛盾をどう解決するか?

問題点:

  • PHP 8.x向けに開発された最新ライブラリはPHP 7.4では動作しない
  • composer.lockに最新のパッケージバージョンを記録していると、PHP 7.4環境でのインストールが失敗する
  • PHP 7.4向けに古いパッケージを使うと、PHP 8.x環境での機能や性能が制限される

解決策:PHPバージョン別の依存関係管理

GitHub Actionsのマトリックスビルドとバージョン別のcomposer.jsonファイルを使用して、この問題を解決します。

ステップ1:マトリックス設定を作成する

strategy:
  matrix:
    include:
      - php: 7.4
        wp: 6.7
        composer_file: composer-php7.json
      - php: 8.2
        wp: 6.7
        composer_file: composer.json

ステップ2:PHPバージョン別の依存関係インストール

- name: Install plugin dependencies for PHP 7.4
  if: ${{ matrix.php == '7.4' }}
  run: |
    if [ -f "${{ matrix.composer_file }}" ]; then
      cp ${{ matrix.composer_file }} composer.json
    fi
    composer update --optimize-autoloader --prefer-dist
    
- name: Install plugin dependencies for PHP 8.2
  if: ${{ matrix.php == '8.2' }}
  run: |
    composer install --optimize-autoloader --prefer-dist

ステップ3:composer-php7.jsonファイルの作成

PHP 7.4互換のパッケージバージョンを記述したcomposer-php7.jsonファイルを作成します。例えば:

{
  "require": {
    "php": ">=7.4",
    "aws/aws-sdk-php": "^3.240.0",
    "guzzlehttp/guzzle": "^7.5.0",
    "symfony/deprecation-contracts": "^2.5",
    "doctrine/instantiator": "^1.4"
  },
  "require-dev": {
    "phpunit/phpunit": "^9.0"
  }
}

この方法のメリット

  1. 幅広い互換性: PHP 7.4と8.2の両方で動作確認ができる
  2. 自動テスト: 各PHPバージョンで自動的にテストが実行される
  3. 段階的な移行: PHP 8への完全移行前の過渡期に有効
  4. コード品質の向上: 複数環境での互換性が保証される

実装時の注意点

  1. メンテナンスコスト: 複数のcomposer設定ファイルを管理する必要がある
  2. コードの互換性: 依存関係だけでなく、自身のコードもPHP 7.4と8.2の両方に対応させる必要がある
  3. テストカバレッジ: 両方のPHPバージョンでカバレッジを確保する
  4. セキュリティ考慮: PHP 7.4はEOLを迎えているため、将来的にはPHP 8への完全移行を検討するべき

まとめ

WordPressプラグイン開発では、幅広いユーザー環境をサポートすることが重要です。GitHub Actionsとバージョン別の依存関係管理を組み合わせることで、PHP 7.4とPHP 8.2の両方での互換性を確保できます。

ただし、これは移行期の一時的な解決策であり、長期的にはPHP 8.x以上のみをサポートする方向に進むことをお勧めします。WordPress自体もPHP 8へのサポートを強化しており、プラグイン開発も同様の流れに沿っていくことが重要です。

この方法を使って、より多くのユーザーに安定したプラグインを提供しましょう!

デジタルキューブ

Discussion