php-modernization について
エージェント向けのPHPモダナイゼーションスキルです。プロジェクト調査、検出事項の確認、変更適用前のdry-run実行という段階的な手順を備えています。PHPのバージョン、静的解析、フレームワーク、テスト、移行の安全性に関する参照情報も提供します。
主な機能
- 01プロジェクトの調査と概要レポート
- 02検出事項ごとの詳細チェック
- 03dry-runによるモダナイゼーション手順
- 04PHPとフレームワークの参照情報
- 05移行の安全性を守るガードレール
- 06コードとテストのチェックリスト
活用シーン
- 01PHPプロジェクトの近代化要件の評価
- 02特定の検出事項の調査
- 03PHPバージョンやフレームワークの更新計画
- 04適用前の移行変更のレビュー
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ netresearch/ php-modernization-skill --skill php-modernizationインストール後、Claude Code で/php-modernizationを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
checkpoints.yamlreferences/adapter-registry-pattern.mdapi-platform-edges.mdcomposer-package-metadata.mdcontracts-and-invariants.mdcore-rules.mddoctrine-modernization-edges.mdimmutability-boundaries.mdlexing-php-across-versions.mdmigration-strategies.mdmulti-agent-pitfalls.mdmulti-version-adapters.mdmutation-testing.mdphp-8.4.mdphp-8.5.mdphp-cs-fixer-deprecations.mdphp8-features.mdphpstan-compliance.mdphpunit-modernization.mdpsr-per-compliance.mdpsr15-middleware-architecture.mdpublic-api-inventory.mdreading-php-config-safely.mdrequest-dtos.mdstatic-analysis-tools.mdsymfony-patterns.mdtype-safety.mdscripts/_common.pyintrospect.pymodernize_loop.py詳細
PHP のモダナイゼーション
エージェントの契約
- 検出:
uv run ${CLAUDE_SKILL_DIR}/scripts/introspect.py(低コスト)、またはverify_php_project.py --summary(完全な情報、agent_actions[]を含む)。 - 詳細確認: 検出項目ごとに
... --check PM-XXを実行します。3 件を超える項目をトリアージする場合は、完全な出力を確認します。 - 適用:
uv run ${CLAUDE_SKILL_DIR}/scripts/modernize_loop.py --mode dry-runを実行します。適用前にトランスクリプトを確認します。 - リファレンス: 必要に応じて読み込みます。事前に読み込まないでください。
リファレンスの参照先
| 必要な情報 | 読むファイル |
|---|---|
| PHP 8.0-8.3 のベースライン | references/php8-features.md |
| PHP 8.4 | references/php-8.4.md |
| PHP 8.5 | references/php-8.5.md |
| PSR / PER-CS | references/psr-per-compliance.md |
| PHPStan の設定 | references/phpstan-compliance.md |
| 静的解析 | references/static-analysis-tools.md |
| PHP-CS-Fixer の非推奨事項 | references/php-cs-fixer-deprecations.md |
| DTO / VO / 入力 | references/type-safety.md, references/request-dtos.md |
| アダプター / レジストリ | references/adapter-registry-pattern.md |
| 複数バージョンの互換性 | references/multi-version-adapters.md, references/composer-package-metadata.md |
| Symfony のパターン | references/symfony-patterns.md |
| PSR-15 ミドルウェア | references/psr15-middleware-architecture.md |
| Doctrine の注意点 | references/doctrine-modernization-edges.md |
| API Platform | references/api-platform-edges.md |
| 不変性 | references/immutability-boundaries.md |
| コントラクトと不変条件 | references/contracts-and-invariants.md |
| ミューテーションテスト | references/mutation-testing.md |
| バージョンをまたいだ PHP のトークン解析 | references/lexing-php-across-versions.md |
| 移行計画 | references/migration-strategies.md |
| コンシューマーと照合する公開 API の一覧 | references/public-api-inventory.md |
| PHPUnit 12→13、モックとスタブ | references/phpunit-modernization.md |
| 複数エージェントへのディスパッチに伴う危険 | references/multi-agent-pitfalls.md |
| PHP の設定ファイルを実行せずに読む方法 | references/reading-php-config-safely.md |
厳守すべきガードレール
- Doctrine のエンティティやマップ済みスーパークラスに
readonlyを適用しないでください(埋め込み可能クラスについてはreferences/doctrine-modernization-edges.mdを参照)。 --dry-runなしで Rector を実行しないでください。vendor/bin/rectorを直接呼び出してください。Composer スクリプトのエイリアスは、設定によって--で転送されるフラグを破棄する場合があります。- ベースラインを再生成してコミットせずに、PHPStan のレベルを上げないでください。削減はしても、削除はしないでください。
- 確認なしに、モック対象や拡張ポイントへ一律に
finalを適用しないでください。 @generatedファイルや、var/cache/、vendor/、node_modules/、.Build/内のファイルを編集しないでください。- 共有ツリー内で、作業範囲外のファイルに
git checkout --を実行しないでください。git stash/git diffを使用してください。 - vendor の変更後は、PHPStan のキャッシュが最新だと信用しないでください。まず
rm -rf /tmp/phpstan-* var/cache/phpstanを実行してください。 createMockからcreateStubへの一括置換はしないでください。expects(...)->method(...)->with(...)に昇格させてください。
移行チェックリスト
- すべての場所に
declare(strict_types=1) -
@PER-CSを使用し、非推奨のエイリアスを使わない - PHPStan ≥9(
treatPhpDocTypesAsCertain: false);新規コードでは 10 - レイヤー境界に PHPat を使用
- すべてのメソッドに戻り値とパラメーターの型を指定
- 配列より DTO、定数よりバックド enum を使用
- 型ヒントには PSR インターフェースを使用
-
#[Override](8.3+)、#[SensitiveParameter](8.2+)、型付き定数(8.3+) -
readonlyは DTO / VO / イベントにのみ適用 - プロパティフック(8.4);
array_find/any/all(8.4);パイプ|>(8.5) - PHPUnit 12+:スタブには
createStub、モックにはcreateMock+expectsを使用(13 ではself::any()を使わない) - Rector は
withComposerBased(symfony: true)を使用(バージョンごとのSymfonySetList::SYMFONY_*は@deprecated)
コメント
Markdown 対応