インフィニットループ仙台支社のプログラマー、いがらしです。
PHP 界隈の気になったことをまとめ、かつてはだいたい月一くらいで宮城県仙台市からお送りしておりました。
うかうかしている間に前回から 3 ~ 4 年くらい経った気がしますが、皆さまいかがお過ごしでしょうか。
少し間があいたのはあまり気にしないことにして、PHP 界隈の最近気になったことをまとめます。
※ なお、画像のPHP ロゴは作者の Colin Viebrock さんによってリリースされ、CC BY-SA 4.0 でライセンスされているものです。
php-src
PHP 8.2.0RC6 available for testing
- https://externals.io/message/118992
- PHP 8.2.0 RC6 がリリースされた
- 今年は当初予定より追加でさらに 1 つ RC 版(RC7)が出る
- 8.2.0 の正式リリースは 12/8 へ延期
PHP 7.4.33 Released!
- https://externals.io/message/118949
- PHP 7.4 系の最後のリリースとなる 7.4.33 がリリースされた
- 今月に PHP 7.4 はセキュリティサポート期間を終え、来月以降の脆弱性修正は行われなくなる
[RFC] Asymmetric Visibility, with readonly
- https://externals.io/message/118994
- 非対称可視性 という提案が以前よりされており、その構文について議論
- PHP 8.1 で追加された
readonly
と合わせた時の挙動に迷いがあり、提案者より相談が行われている
[RFC] Destructuring Coalesce
- https://externals.io/message/118829
- 配列の解体記法で要素が存在しない場合のデフォルト値を指定できるようにする提案、14:11 で否決
- 機能の需要は一定理解されつつも、記法が直感的でないのが主な敗因と見える
[RFC][Dynamic class constant fetch]
[RFC] [Discussion] Readonly class amendments
- https://externals.io/message/119007
- 8.2 で追加された
readonly class
の修正提案についての議論 readonly
クラスの非readonly
クラスでの継承禁止をやめる修正と、readonly
プロパティについて__clone
での再初期化を可能にする提案
[VOTE] Randomizer Additions
- https://externals.io/message/118988
- 8.2 で追加された乱数拡張への機能追加提案の投票、8.3 向けで受理された
Removing OS2 specific code
- https://externals.io/message/119009
- OS2 対応用コードを削除するという提案が出ている
PHP-FIG
PSR-20 Clock
- PSR-20 Clock が受理
composer require psr/clock
でインストールできるパッケージもリリースされている
気になったプロジェクト
https://github.com/CuyZ/Valinor
- cuyz/valinor は配列や JSON など各種の値を PHP の型へマップするライブラリ
- Psalm や PHPStan など静的型解析を使うプロジェクトでスクリプト外からの入力を扱うのに便利
- 1.0.0 がリリースされた
https://github.com/mariosimao/notion-sdk-php
- Notion の PHP SDK 1.0.0 がリリースされた
https://github.com/matthiasnoback/php-ast-inspector/
- PHP コードの AST 構造を対話的に追いかけられるツール、面白い
https://phpstan.org/blog/phpstan-1-9-0-with-phpdoc-asserts-list-type
- PHPStan 1.9.0 がリリースされた
- 原作者の人はゴリゴリコードを書くフェーズを抜け、ほかのコントリビュータがビシバシ新機能を実装してくれる良い状況に入ったらしい
@phpstan-assert
やlist
型のまともなサポート、@param-out
のように Psalm の機能の取り込みが進んでいる
https://github.com/vimeo/psalm/releases/tag/4.30.0
- psalm 4.30.0 がリリースされた
- PHPStan 1.9.0 で追加された @phpstan-assert を解釈できるようにする修正が入っていたりする
https://qossmic.github.io/deptrac/
- PHP の部品間依存関係チェック用ツール Deptrac の 1.0.0 がリリースされた
- PHP 8.1 以降での動作が前提
https://www.devsense.com/en/purchase
- VSCode / VisualStudio に対応する PHP プラグインの DEVSENSE にフリー版が出た
- ジェネリクスのサポートもしているらしい
- 手元のプロジェクトで VSCode 版を試した限り、現状では PhpStorm のほうがよりよくジェネリクスを解釈してくれるもよう
https://frankenphp.dev/
- Go の Caddy で HTTP をさばきつつ ZTS な PHP 処理系でスレッドプールを立てて通信させる、という新たな SAPI
- HTTP 3 や 103 Early Hints に対応している他、Worker mode での動作をサポートしており、RoadRunner 風のリクエスト間で状態を持ち越す形態での高速化も可能
- opcache のサポートが php-src 側へ入っている
https://github.com/compositephp/db
- CycleORM ベースなクエリビルダを持つ ORM
https://github.com/pmjones/throwable-properties
- pmjones の人の PHP ライブラリ
\Throwable
を\json_encode()
してもいい感じの情報がとれなかったりするので、コンストラクタで\Throwable
をとってひと通りの情報を取得する\JsonSerializable
兼\Stringable
なThrowableProperties
というクラスを作ってる
https://github.com/krakjoe/parallel
- PHP のマルチスレッド拡張 krakjoe/parallel に PHP 8.1 までへ対応した v1.2.0 がリリースされた
https://github.com/revoltphp/event-loop
- PHP の Fiber 対応イベントループ実装 Revolt の 1.0.0 がリリースされた
https://github.com/TysonAndre/immutable_cache-pecl
- APCu を fork して作られた不変データのゼロコピーキャッシュを実現する PECL 拡張
- 作者は Phan などのメンテな TysonAndre さん
- APCu の issue 上での議論から生まれたもののようだ
https://relay.so/
- PHP 用の新しい Redis クライアント
- ローカルキャッシュを持ち、また作者の話によるとローカルキャッシュを切っていてもなぜか他のクライアントライブラリより速いとのこと?
- コアになる部分はネイティブコードの拡張によるものだが、その拡張部分はバイナリ配布のみで OSS ではない
https://github.com/apache/skywalking-php
- PHP 対応の比較的新しい APM
https://github.com/DataDog/dd-trace-php/tree/master/profiling
- DataDog の APM に追加された PHP プロファイラがよく見ると Rust 製だった
https://github.com/carp3/php-megadrive
- PHP でメガドライブのエミュレータを書きましたという話
- 最初 PHP で書いた部分で速度が出なかったのでわりとネイティブコードの拡張で済ませたらしい
最近に見た英語記事
The PHP Foundation: Impact and Transparency Report 2022
- https://thephp.foundation/blog/2022/11/22/transparency-and-impact-report-2022/
- 昨年設立された The PHP Foundation の 2022 年の活動振り返りレポート
- $580,000 もの寄付が集まり、6 人のパートタイム開発者を雇い、4 月から 11 月にかけての php-src へのコミットの半数近くがそのメンバーによるもの
- 引き続きコア開発者への支援を拡大していくもよう
Why I Don’t Enjoy Writing PHP Anymore
- https://medium.com/@davert/why-i-dont-enjoy-writing-php-anymore-aee8a85ca8aa
- PHP のバージョン間の互換性問題に伴い依存ライブラリのバージョン管理にも苦しみがあるので、最近の PHP 開発は大変になっている、という話
Laravel 10: release date and new features
- https://benjamincrozat.com/what-is-new-laravel-10
- Laravel 10 の変更点、はやくも PHP 8.0 のサポートが終了するもよう
How to Measure Your Type Coverage
- https://tomasvotruba.com/blog/how-to-measure-your-type-coverage/
- PHPStan での型カバレッジの取得についての記事
コミュニティの議論など
https://twitter.com/ogi_chotdake_se/status/1585089895370207234
- PHP の
__invoke()
利用について日本語での twitter 上の議論
Thoughts on filter_var?
filter_var()
の利用についての reddit の議論- internals で PHP のサニタイズフィルタについての議論があり、それについての反応
json_validate function got accepted for PHP 8.3
json_validate()
が PHP 8.3 に入るよという話- いきなりデコードしにかかるよりメモリ消費量が少し抑制できるのが利点
What are modern profiling tools?
Let’s make it happen: Wish list for next major version (vNEXT
)
- ReactPHP の次バージョンに何を入れようという GitHub 上での議論スレッド
- 静的解析のサポートは強めてほしい
Third party PHP repository will be removed from the Ubuntu 22.04 image
- 現在の GitHub Actions で Ubuntu-latest として提供している Ubuntu 20.04 のイメージはサードパーティによる複数バージョンの PHP 処理系インストールを含んでいるが、Ubuntu 22.04 からはオフィシャルにサポートされている 1 つのみを付けるという話が出ている
What are the popular PHP Frameworks you are using for the development of web applications and why?
- Reddit での人気の PHP フレームワークについての議論
- よく名前を聞く PHP フレームワークは Laravel と Symfony の 2 強にすっかり収束した感がある
Temporal PHP SDK: Scalable and resilent workflow orchestration on PHP
- PHP で Temporal Workflow Engine を利用する Temporal PHP SDK の紹介
- yield 使うのがやや非同期 PHP っぽい
他のニュースサイトなど
https://blog.jetbrains.com/phpstorm/2022/11/php-annotated-october-2022/
- JetBrains さんが毎月出している PHP ニュースの 10 月分
https://zenn.dev/hanhan1978
- 「今週の PHP」として毎週 PHP 処理系周辺の情報を日本語でまとめている人が Zenn にいる、すごい
Events
PHPerKaigi 2023
- https://fortee.jp/phperkaigi-2023
- PHPerKaigi 2023 は来年 3 月
- スポンサー募集は 12/27 まで
- トーク募集は 12/5 まで
The New PHP Foundation: What Impact does it have? – Sebastian Bergmann, Robert Lemke, Roman Pronskiy
- https://www.youtube.com/watch?v=Nmb-_66RArs
- International PHP Conference 2022 で行われた PHP Foundation の紹介トーク
- 思ったよりゆっくりの英語でしゃべってくれている(それでも英語力不足で自動字幕なしだとよくわからない……)
社内の slack へ「今日の学び」というチャンネルを作って以来、この記事で挙げているようなネタを毎日流しています。まとめて技術ブログへ流すだけでも大体以前にやっていた PHP ニュースに近い内容になるな、と思いついたので、実際にやってみた次第です。話題によってはこれらのトピックについて社内で追加の議論が行われることもあります。「今日の学び」チャンネルで PHP の話題以外にどんな話が流れているか、も、また別の機会に紹介したいと思います。何か面白い話や目新しい話が 1 つでもあれば嬉しいです。
インフィニットループでは、PHP の最新技術動向や技術者のお祭りが気になるエンジニアを募集しています。 詳しくはこちらの求人詳細をご覧ください → 採用情報ページ (仙台支社特設ページはこちら)