インフィニットループ仙台支社のプログラマー、いがらしです。
PHP 界隈の気になったことをまとめ、不定期に宮城県仙台市からお送りします。前回出したのは昨年 11 月 29 日でした。
※ なお、画像のPHP ロゴは作者の Colin Viebrock さんによってリリースされ、CC BY-SA 4.0 でライセンスされているものです。
php-src / internals
PHP 8.2 Released!
- PHP 8.2 がリリース
- 現在は 8.2.2 まで出ている
All PHP 7.x versions are now EOL
- PHP 7.4 のサポートが終了
PHP RFC: Readonly amendments
- PHP 8.2 で入った readonly class の修正提案の投票が終了
- 非 readonly で継承可能にするほうは 7:12 で否決
- clone 時の readonly プロパティ再初期化は 26:0 で PHP 8.3 向けで受理
PHP RFC: Dynamic class constant fetch
- 動的なクラス定数参照が PHP 8.3 向け 15:4 で受理された
PHP RFC: Asymmetric Visibility
- 非対称可視性の投票は 14:12 で否決
[PHP_DEV] [RFC] Add file_descriptor() function
- ストリームからファイルディスクリプタを取れるようにする提案
- Windows でどうするという話がないように見えるのが少し気になる
[RFC] Path to Saner Increment/Decrement operators
- PHP の int / float 以外へインクリメント / デクリメントを使った場合の挙動修正提案
- += 1 などとする場合とくらべて挙動に一貫性がなかった
[RFC] Saner array_(sum|product)()
- PHP の array_sum と array_product の挙動修正提案
- 現状は要素に配列やオブジェクトを渡すと無視する謎の挙動がある
- array_reduce で同等品を実装しようとする場合と挙動が異なる
- イミフだから直そうぜという話
Measuring Proposal Reaction
- PHP で STDOUT と STDERR を cli 以外でも定義するという提案
- RFC 起草前の意見聞きと見える
- 悪くはないと思うものの、STDERR や STDOUT でないものをそう呼ぶのははたして適切なのかなという気もする
[RFC] [Discussion] Typed class constants
- 型付クラス定数の提案
- PHP の定数はオーバーライドが可能だが、型宣言ができないので子クラスで型ごと互換性のない値に変わる可能性がある
- 定数での型宣言を可能にするとともに、covariant として子クラスで型を狭くするのは可能とする
- 定数は読み込み専用なので返り値と同様の制約でよいという話
private
の場合は子クラスに波及しないので制約なし
Official Preprocessor
- 言語に公式プリプロセッサを導入する議論
- 静的解析のような機能を導入しやすくなる
- 良い案だとは思うものの、もっと具体化された提案でないと議論を広げるのは難しそうに見える
PHP 9 向けに JIT が書き直されている
- https://github.com/dstogov/ir
- https://github.com/dstogov/php-src/tree/php-ir/ext/opcache/jit
- PHP 8 の JIT エンジンを作った人により、大がかりな JIT 実装の修正が行われている
PHP build for the wasm32-wasi target
- VMWare CTO 室の WasmLabs チーム代表者からの PHP internals へのメール
- 彼らは PHP を wasm32-wasi 上で動かすのに取り組んでおり、成果を upstream へ入れたがっているらしい
- Ruby や Python についてもすでに同様の取り組みが行われている
- 主には sandbox 化によるセキュリティと移植性向上(配布・デプロイの単純化)あたりが狙いに見える?
- 参考: https://wasmlabs.dev/articles/docker-without-containers/
PHP-FIG
PER coding style | Update Short Closures spec to remove space after fn keyword
- PSR-12 後継の PER coding style で、
fn
の直後にスペースを付けてはならないとする条項が追加 - 既存プロジェクトの利用状況としてはスペースを付けてるものが微妙に多いようで、意思決定プロセスとしてこれでいいのかというのが少し気になる
気になったプロジェクト
https://github.com/sebastianbergmann/phpunit/
- PHPUnit 10 がリリース
TestListener
とTestHook
が新しいイベントシステムへ置き換えられた影響は大きい筈- 周辺ツール類の対応状況を見ての慎重な更新が必要そう
https://github.com/bmewburn/vscode-intelephense
- bmewburn/vscode-intelephense changelog
- VSCode 用の PHP 拡張 intelephense にとうとう @template の最初のサポートが入ったように見える
https://github.com/vimeo/psalm
- Psalm 5.0.0 がリリース
- その後短めのサイクルで機能追加が続き、現在の最新安定版は 5.6.0
- デフォルトで shapes の余分なキーをはじくようになった件についての解説などがリリース記事に
properties-of<T>
など各種の新機能が追加されている
https://github.com/PHP-DI/PHP-DI
- PHP-DI 7.0 released
- PHP-DI 7.0 は PHP 8 以降に対応
@inject
のかわりに#[Inject]
を使う- PSR-11 2.0 互換になった
https://github.com/amphp/amp
- PHP の非同期処理ライブラリ Amp の v3 がリリース
- PHP 8.1 以降が最低動作環境になり、Fiber ベースのイベントループ Revolt を採用
TestGen AI
- PHP のリファクタリングツール Rector 開発者の人が立ち上げているプロジェクト
- テストコードをテスト対象コードから AI で自動生成する
- 中の人が酒飲んでしゃべってたら出てきた話、というような話がブログに書いてある
https://github.com/orhanerday/open-ai
- OpenAI GPT-3 API を叩く PHP SDK
https://github.com/ara-lang
- ARA Lang – A powerful, statically typed programming language that compiles directly to PHP
- PHP へコンパイルされる静的型付言語の新しいもの
https://github.com/php-rust-tools/parser
- Rust 製な PHP の手書きパーサの開発が進んでいる
- PSL 等の azjezz さんがけっこうコミットしている
- Generics の独自サポートも入れる気があるもよう
https://github.com/slackhq/hakana
- Hakana: Taking Hack Seriously
- Hack 用の静的解析器 Hakana を slack が公開
- 作ったのは Vimeo から転職した Psalm 作者の人
- Hack 公式ではできないようなカスタマイズ可能な静的解析やセキュリティ解析機能が嬉しいもよう
https://github.com/solcloud/Counter-Strike
- Free online multiplayer FPS game
- CounterStrike 風のゲームのエンジンを PHP で書いたというもの
- UI は electron を使っているものの、サーバ側のレンダリング結果をそのまま出しているだけらしい
最近に見た英語記事
Performance boost with PGO
- https://medium.com/@dev.nest/profile-guided-optimization-pgo-with-php-820b7d1bfdcd
- Profile Guided Optimization で実際に symfony アプリケーションを動かしたプロファイルデータをもとに PHP 処理系を最適化してビルドしたら、アプリケーションの性能が ~10% くらい向上したという話
PHP version stats: January, 2023
- https://stitcher.io/blog/php-version-stats-january-2023
- PHP バージョン利用率統計
- 7.4 で動いてるところもまだまあまああるらしい、8.1 はだいぶ普及してきた
Yii3 Overview 1. Intro
- https://opencollective.com/yiisoft/updates/yii3-overview-1-intro
- Yii3 の紹介記事
- Framework choice in 2021 を見るとけっこう多く使われているのかもしれない
Managing database migrations safely in high replicated k8s deployment.
- https://blog.equationlabs.io/managing-database-migrations-safely-in-high-replicated-k8s-deployment
- k8s 環境下で DB マイグレーションを安全に実行する際の注意点
New in Rector 0.15: Complete Safe and Known Type Declarations
- https://getrector.org/blog/new-in-rector-015-complete-safe-and-known-type-declarations
- Rector の 0.15 の新機能について
- 元々引数や返り値、プロパティの型宣言を PHPStan の型推論機能により自動補完できる
- が、以前は PHPDoc 由来で型が確実でない場合でも補完してしまっていた
- 0.15 では型が確実な場合にのみ型の自動補完を適用できる
Devenv: Compose a Developer Environment easily for PHP with Nix
- https://shyim.me/blog/devenv-compose-developer-environment-for-php-with-nix/
- Nix で Devenv を使って PHP 開発環境を宣言的に管理しましょうという記事
What’s Next in PhpStorm: The 2023.1 Public Roadmap
- https://blog.jetbrains.com/phpstorm/2023/01/what-s-next-in-phpstorm-the-2023-1-public-roadmap/
- phpstorm 2023.1 のロードマップ
- ジェネリクスの強化はやくほしい
PhpStorm 2022.3 の変更点
- PhpStorm 2022.3 が出て新しい UI が使えるようになった(やや VSCode ライク?)
コミュニティの議論など
Why You Should Use Psalm for PHP
- https://www.reddit.com/r/PHP/comments/zpumkv/why_you_should_use_psalm_for_php/
- psalm 布教記事の reddit のスレ
Poll: usage of the Data Structures extension
- https://www.reddit.com/r/PHP/comments/zgz8qc/poll_usage_of_the_data_structures_extension/
- データ構造ライブラリ DS 拡張の reddit での利用調査
- 知らないという人が多いらしい
What is your #1 PHP feature request? (Part 3)
- https://www.reddit.com/r/PHP/comments/zaw3xn/what_is_your_1_php_feature_request_part_3/
- reddit の PHP の欲しい機能投票
- ジェネリクスと型付配列の次はスカラオブジェクトが人気らしい
- 個人的には ADT のほうがほしい
Unit testing tips by examples in PHP
- https://www.reddit.com/r/PHP/comments/zq0ujx/unit_testing_tips_by_examples_in_php/
- https://github.com/sarven/unit-testing-tips
- PHP のテストについての tips 等とそれについての reddit の議論
Reading the 8.2 Migration guide…
- https://www.reddit.com/r/PHP/comments/zer1fu/reading_the_82_migration_guide/
- PHP 8.2 で標準入出力ストリームが resource 破棄時に自動で閉じられなくなったというのはどういう修正?という質問と、shutdown フェーズに動く拡張コードの都合だよ、という回答
他のニュースサイトなど
PHP Annotated – January 2023
- https://blog.jetbrains.com/phpstorm/2023/01/php-annotated-january-2023/
- JetBrains さんの月刊 PHP ニュース 1 月号
- 6 文字あれば PHP でなんでもできる、という話が本当にひどくて面白い(要 FFI)
PHP Annotated – December 2022
- https://blog.jetbrains.com/phpstorm/2022/12/php-annotated-december-2022/
- JetBrains さんの月刊 PHP ニュース 12 月号
書籍
Swooleで学ぶPHP非同期処理 ~並行処理/並列処理の基礎から実践的な開発手法まで一気にわかる
- https://www.amazon.co.jp/o/ASIN/429713358X
- Swoole の日本語の解説書が 2/18 に発売
ちょうぜつソフトウェア設計入門――PHPで理解するオブジェクト指向の活用
- https://www.amazon.co.jp/dp/B0BNH1J2W2
- PHP をサンプルコードにしたコード設計についての書籍が昨年 12/10 に発売
- Clean Architecture を別途読むとおそらく理解が深まる
Events
PHPerKaigi 2023
- PHPerKaigi 2023 が 2023 年 3 月 23 日(木) ~ 3 月 25 日(土) で開催
- 2/13 までポスターセッションを募集している
PHPカンファレンス福岡2023
- PHP カンファレンス福岡 2023 が 2023 年 6 月 24 日(土)に開催予定
- 現在スポンサーを募集中
前回に引き続き、最近あった出来事をまとめてみました。「毎月出すぞ!」というようには気負わず、不定期に続けていければと思います。最近は 8.2 向けの作業が落ち着いてきて、コア開発者の間で 8.3 向け RFC の提案や議論が活発化しているようです。
インフィニットループでは、PHP の最新技術動向や技術者のお祭りが気になるエンジニアを募集しています。 詳しくはこちらの求人詳細をご覧ください → 採用情報ページ (仙台支社特設ページはこちら)