😎
WordPressプラグイン開発:PHP 7と8の両方をサポートするGitHub Actions設定
WordPressの世界では、PHP 7.4から8.2以上まで幅広いPHPバージョンで動作するプラグインの開発が求められています。特にレンタルサーバーなどではPHP 7系を使用している環境も多く、プラグイン開発者は複数のバージョンをサポートする必要があります。
この記事では、GitHub Actionsを使用してPHP 7.4とPHP 8.2の両方でテストを実行する方法を解説します。
なぜ複数のPHPバージョンをサポートする必要があるのか?
- 幅広いユーザーベース: WordPressは様々な環境で使用されており、すべてのユーザーが最新のPHPバージョンを使用しているわけではありません
- レガシー環境: 多くのレンタルサーバーやホスティングサービスは旧バージョンのPHPを提供しています
- 互換性の確保: プラグインの安定性と信頼性を高めるためには、サポート対象のすべての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"
}
}
この方法のメリット
- 幅広い互換性: PHP 7.4と8.2の両方で動作確認ができる
- 自動テスト: 各PHPバージョンで自動的にテストが実行される
- 段階的な移行: PHP 8への完全移行前の過渡期に有効
- コード品質の向上: 複数環境での互換性が保証される
実装時の注意点
- メンテナンスコスト: 複数のcomposer設定ファイルを管理する必要がある
- コードの互換性: 依存関係だけでなく、自身のコードもPHP 7.4と8.2の両方に対応させる必要がある
- テストカバレッジ: 両方のPHPバージョンでカバレッジを確保する
- セキュリティ考慮: PHP 7.4はEOLを迎えているため、将来的にはPHP 8への完全移行を検討するべき
まとめ
WordPressプラグイン開発では、幅広いユーザー環境をサポートすることが重要です。GitHub Actionsとバージョン別の依存関係管理を組み合わせることで、PHP 7.4とPHP 8.2の両方での互換性を確保できます。
ただし、これは移行期の一時的な解決策であり、長期的にはPHP 8.x以上のみをサポートする方向に進むことをお勧めします。WordPress自体もPHP 8へのサポートを強化しており、プラグイン開発も同様の流れに沿っていくことが重要です。
この方法を使って、より多くのユーザーに安定したプラグインを提供しましょう!
Discussion