×
Copy
Open
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
PHP 8.4がリリース! あなたはもうアップデートしましたか? pixiv Inc. 当田 昇(@picopico_dev) 2024.03.09
Slide 2
Slide 2 text
2 会社 ピクシブ株式会社 経歴 2023年4⽉ 新卒⼊社 職種 pixiv事業本部ウェブエンジニアリング部 兼 インフラ部SREチーム 当⽥ 昇 @picopico_dev
Slide 3
Slide 3 text
PHPのアップデート、してますか?
Slide 4
Slide 4 text
https://www.php.net/supported-versions.php
Slide 5
Slide 5 text
PHP8.0は既にEnd of life PHP8.1~8.2もSecurity fixes only
Slide 6
Slide 6 text
ところで・・・
Slide 7
Slide 7 text
2024/11/21にPHP8.4がリリースされました🎉
Slide 8
Slide 8 text
とはいえ、まだアップデートしていない人も多いはず ・・・
Slide 9
Slide 9 text
目次 1. PHPアップデートの全貌 2. PHP8.4移行の試練
Slide 10
Slide 10 text
目次 1. PHPアップデートの全貌 2. PHP8.4移行の試練
Slide 11
Slide 11 text
PHPアップデートの全貌 1. PHP8.4環境の作成
Slide 12
Slide 12 text
PHPアップデートの全貌 1. PHP8.4環境の作成 2. 自動化テストのパス
Slide 13
Slide 13 text
PHPアップデートの全貌 1. PHP8.4環境の作成 2. 自動化テストのパス 3. E2Eテスト or 主要な機能の動作確認
Slide 14
Slide 14 text
PHPアップデートの全貌 1. PHP8.4環境の作成 2. 自動化テストのパス 3. E2Eテスト or 主要な機能の動作確認 4. 段階的リリース
Slide 15
Slide 15 text
PHPアップデートの全貌 1. PHP8.4環境の作成 2. 自動化テストのパス 3. E2Eテスト or 主要な機能の動作確認 4. 段階的リリース 5. 100%リリース
Slide 16
Slide 16 text
目次 1. PHPアップデートの全貌 2. PHP8.3→8.4移行の試練
Slide 17
Slide 17 text
https://www.php.net/manual/ja/migration84.php
Slide 18
Slide 18 text
https://www.php.net/manual/ja/migration84.php
Slide 19
Slide 19 text
● exit() の動作の変更 ● 比較中の再帰 ● readonly プロパティの間接的な変更 ● 定数の型の変更 ● 一時ファイル名の長さ ● E_STRICT エラーレベルの削除 ● 型が追加された拡張クラスの定数 ● リソースからオブジェクトへの移行 ● 暗黙的な nullable パラメータ ● trigger_error() で E_USER_ERROR を使用 ● CURLOPT_BINARYTRANSFER 定数は非推奨 ● …
Slide 20
Slide 20 text
3つピックアップ!
Slide 21
Slide 21 text
その1: PECL拡張が対応してない そもそもPECL拡張が8.4に対応してない。 PRを送る or GitHubの最新対応版を自前でビルドして使う
Slide 22
Slide 22 text
その2: exitの関数化 何故かPHP8.4でテストを実行すると、テストが落ちても正常終了する問題
Slide 23
Slide 23 text
その2: exitの関数化 何故かPHP8.4でテストを実行すると、テストが落ちても正常終了する問題
Slide 24
Slide 24 text
その2: exitの関数化 CIでregister_shutdown_function()内でexit()を呼び出すコードがあった。 PHP8.4以前は終了コードが引き継がれていたが、PHP8.4以後はパラメータが無い時 にデフォルト値0が適用される。 よって、テストが落ちているのに何故か正常終了してしまっていた。
Slide 25
Slide 25 text
register_shutdown_function(function () { if (...) { exit(); // 終了コードが0になる破壊的変更 } }
Slide 26
Slide 26 text
その3: 暗黙的なnullable型の非推奨 デフォルト値null(=nullable)で型にnullが無い場合を非推奨に function foo(string $param = null) {}
Slide 27
Slide 27 text
Rectorで一掃する https://getrector.com/rule-detail/explicit-nullable-param-type-rector
Slide 28
Slide 28 text
ライブラリ側でエラーが発生したら? (以下は対症療法です。 出来ればPR送ってライブラリ側で修正するかフォークして下さい)
Slide 29
Slide 29 text
cweagans/composer-patchesでパッチを当てる https://docs.cweagans.net/composer-patches/
Slide 30
Slide 30 text
cweagans/composer-patchesでパッチを当てる 1. vendor/配下をgitに追加 2. vendor/配下にRectorを適用 3. git diff – vendor/hoge > patches/hoge-php84.patch 4. composer.jsonにパッチを追加
Slide 31
Slide 31 text
アップデート頑張ろう!