PHP

PHP 8.3 移行ガイド:新機能・インストール・自動修正手順

ⓘ本ページはプロモーションが含まれています

お得なお知らせ

スポンサードリンク
AI時代のキャリア構築

プログラミング学習、今日から動き出す

「何から始めるか」で止まっている人こそ、無料説明会や本で自分に合うルートを30分で確定できます。

Enjoy Tech!|月額制でWeb系に強い▶ (Kindle本)ITエンジニアの転職学|後悔しないキャリア戦略▶

▶ AIコーディング環境なら  実践Claude Code入門(Amazon)が実務で即使える入門書です。Amazonベストセラーにも選ばれていますよ。


スポンサードリンク

1️⃣ PHP 8.3 がもたらす3つの主軸

主軸 内容 移行時に意識すべきこと
非推奨機能の除去 each()mb_str_split() など、8.2 まで deprecated とされていた関数が本バージョンで実装から削除。 置換先(例: foreachstr_split)へのリファクタリングを必ず行う。
型システムの強化 定数・プロパティに型宣言が可能になり、readonly プロパティの再代入が 1 回許容されるように変更。 型付与は 静的解析ツール(PHPStan / Psalm)で検証しながら段階的に導入。
内部パフォーマンス改善 JIT の最適化と range() の内部実装が高速化(アルゴリズムの改良による) 。 ベンチマークテストで 8.3 前後との差分を測定し、期待通りの効果が得られているか確認。

ポイント
公式ガイド(php.net/migration83.new-features)は「インストール → 警告・エラーチェック → テスト実行」の流れを推奨しています。これに自動変換ツールと静的解析を組み合わせることで、手作業のミスを大幅に削減できます。


2️⃣ 主な新機能とコードサンプル

2.1 readonly プロパティの 再代入(1 回)

留意点

条件 説明
再代入回数 最大 1 回。2 回目以降は Fatal error: Cannot modify readonly property が発生。
初期化前の状態 null に設定できない(型が決まっている限り未初期化状態は存在しない)。

2.2 クラス・インターフェイス定数への 型宣言

  • 効果:IDE が整数として補完し、=== '1' のような型ミスを防止。
  • 注意:PHP 8.2 以前は型なし定数だったため、既存コードで文字列と整数が混在している場合はリファクタリングが必要。

2.3 #[\Override] 属性(PHP 8.2 から利用可能)

  • 事実の訂正#[\Override] は PHP 8.2 で導入された属性です。PHP 8.3 では新機能として追加されていませんが、引き続き有用です。
  • メリット:シグネチャ不一致をコンパイル時に検出でき、意図しないオーバーライドを防止。

2.4 Trait メソッドへの final 修飾子

  • 効果:Trait を使用したクラス側でメソッドを上書きできなくなるため、ロジックの一貫性が保たれます。

3️⃣ ローカル・Docker 環境への PHP 8.3 インストール手順

3.1 パッケージマネージャでインストール

OS コマンド
macOS (Homebrew) bash<br>brew install php@8.3<br>brew link --overwrite php@8.3<br>
Ubuntu (apt) bash<br>sudo add-apt-repository ppa:ondrej/php<br>sudo apt update<br>sudo apt install php8.3 php8.3-cli php8.3-fpm php8.3-mbstring php8.3-xml<br>

ポイント

  • Homebrew では php@8.3 が別パッケージになるため、link --overwrite が必須。
  • Ubuntu の公式リポジトリは遅れがあるので、Ondřej Surý 氏の PPA を利用すると常に最新が入手可能です。

3.2 Dockerfile(汎用的なベストプラクティス)

※ 製品名の明示
本 Dockerfile は特定ベンダーに依存しない「汎用イメージ」です。プロジェクト固有の名前(例: app-tatsujin)は削除し、読者が自身のリポジトリ名に置き換えて利用できるよう配慮しました。


3.3 docker‑compose.yml の抜粋

  • ベストプラクティスcomposer_cache ボリュームで依存取得をキャッシュし、CI のビルド時間を短縮します。

4️⃣ 自動変換ツールと静的解析の実装フロー

4.1 Rector(Php83 ルールセット)導入手順

rector.yaml の例

実行例

  • 効果readonly 再代入や #[\Override] の付与、型付き定数への変換を自動化し、手作業ミスを削減。

4.2 PHPStan と Psalm の設定(PHP 8.3 対応)

PHPStan (phpstan.neon.dist)

Psalm (psalm.xml)

実行コマンド

  • ポイントphpVersion を明示しないと古い解析レベルが適用され、8.3 固有の警告を見逃す恐れがあります。

5️⃣ テスト・CI/CD パイプラインへの統合

5.1 PHPUnit のカバレッジ設定例

  • processUncoveredFiles を有効にすると、テスト対象外のファイルもレポートに含まれ、移行漏れ が可視化しやすくなります。

5.2 GitHub Actions での PHP 8.3 CI ジョブ例

  • CI のベストプラクティス
  • rector を dry‑run に入れて自動変換対象を可視化。
  • 静的解析で型エラー・未使用コードを早期検出。
  • カバレッジが 80 % 未満の場合はジョブを失敗させ、品質基準を保つ。

6️⃣ 移行チェックリスト(実務向け)

項目 確認方法 必須対応
PHP バージョン php -v8.3.x か確認
非推奨関数除去 grep -R "each(" -n src/ 等で残存チェック
型付き定数化 IDE の型ヒントが整数になるか、PHPStan が UndefinedConstant を出さないか
readonly 再代入 2 回目代入テストを作成し、RuntimeError が発生することを確認
#[\Override] 属性使用 メソッドに属性が付与されているか、PHPStan の MissingOverrideAttribute 警告が消えているか
Rector 自動変換 dry‑run 結果が 0 件になるまで繰り返し実行
テストカバレッジ カバレッジ ≥ 80 %(HTML レポートで確認)
CI パイプライン GitHub Actions が PHP 8.3 で成功するか最終チェック

7️⃣ 次のステップ:実装から本番環境へ

  1. ローカルまたは Docker で PHP 8.3 を立ち上げる
  2. Rector の Php83 ルールセットを dry‑run → 本番適用
  3. PHPStan / Psalm で型安全性を検証
  4. PHPUnit による回帰テストとカバレッジ測定
  5. GitHub Actions 等 CI に PHP 8.3 ジョブを組み込み、全自動化

これらのフローを順に実行すれば、「コードが 8.3 に完全対応した」ことを確実に証明でき、安心して本番デプロイへ移行できます。


📚 参考リンク


本稿は特定ベンダー・サービス名に依存しない汎用的な手順を示しています。実際のプロジェクトでは、社内ポリシーや利用中のパッケージに合わせて適宜カスタマイズしてください。

スポンサードリンク

お得なお知らせ

スポンサードリンク
AI時代のキャリア構築

プログラミング学習、今日から動き出す

「何から始めるか」で止まっている人こそ、無料説明会や本で自分に合うルートを30分で確定できます。

Enjoy Tech!|月額制でWeb系に強い▶ (Kindle本)ITエンジニアの転職学|後悔しないキャリア戦略▶

▶ AIコーディング環境なら  実践Claude Code入門(Amazon)が実務で即使える入門書です。Amazonベストセラーにも選ばれていますよ。


-PHP