インフィニットループ仙台支社のプログラマー、いがらしです。
PHP 界隈の気になったことをまとめ、月一くらいで宮城県仙台市からお送りします。
前回に引き続き、主に最近 GitHub で見かけて気になった PHP プロジェクトや、PHP の言語開発者メーリングリストである internals の議論などをつまみ食いして紹介します。
※ なお、画像のPHP ロゴは作者の Colin Viebrock さんによってリリースされ、CC BY-SA 4.0 でライセンスされているものです。
GitHub で見かけたプロジェクト
https://github.com/bmitch/churn-php
- PHPファイルをコミット数と循環的複雑度を元にスコア付けし、リファクタリングの対象を提案してくれる静的解析ツール
https://github.com/php-censor/php-censor
- PHPCI から fork した CI ツール
https://github.com/Roave/no-floaters
- float を禁止するための PHPStan プラグイン
- 浮動小数点数の丸め誤差が許容できないようなコードでの利用を想定
https://github.com/vimeo/psalm
- Vimeo の PHP 静的解析ツール
- 先日 v3 について公式ブログでアナウンスが出ていた
- プラグイン機構の改善やベースライン機能のサポート、Language Server 対応について触れられている
https://github.com/box/spout
- CSV や XLSX、ODS のようなスプレッドシートのファイルを読み書きするライブラリ
- ストリーミング処理を採用しており、大きなファイルが対象でも少ないメモリ消費量で高速に動作する
https://github.com/spatie/once
- 与えられた callable を一度だけ呼び出し、以降はキャッシュされた結果を返すための memoization ライブラリ
- debug_backtrace() で呼び出し状況を取ってキャッシュのキーにするような実装、面白い
https://github.com/api-platform/core
- 数分で HATEOAS な Restful API や GraphQL の API サーバを作るフレームワーク
- 2.4 で MongoDB や Elasticsearch、OpenAPI v3、Symfony Messenger との統合による CQRS 実装や HTTP/2 Server Push 等のサポートが追加
https://github.com/laynefyc/xhgui-branch
- xhprof / xhgui ベースの性能監視ツールを作っている
https://github.com/leocavalcante/siler
- swoole とあわせて使える関数ベースのマイクロフレームワーク
- Hello World ベンチマークのスコアが高い
https://github.com/beyondcode/laravel-mailbox
- Mailgun や SendGrid を通じ、メールを受信した際に起動するコードを書くための Laravel 用パッケージ
https://github.com/neoighodaro/laravel-early-access
- サービス立ち上げ時にメールアドレスを収集するアーリーアクセスモードを簡単に追加するための Laravel 用パッケージ
最近の internals
[RFC] JIT
- https://externals.io/message/103903
- PHP 8 向けで開発が続けられていた JIT のコアへの取り込みの RFCが出された
- 来年リリース予定の 8.0 の前に今年リリース予定の 7.4 へ取り込んでしまう選択肢についても投票される予定
- 現在の RFC の記述では過半数の yes で可決する内容となっている
- エンジンが複雑化しメンテナンスできる人が少なくなること、安定性や移植性、デバッガ等外部ツールの対応が難しくなること等への懸念が挙げられている
RFC Abolish Narrow Margins
- https://externals.io/message/103913
- 機能や開発ポリシーについての RFC を、基本的に 2/3 の yes を要求するよう RFC プロセスを修正する提案があり、その投票を始めようとする動きが Joe Watkins さんから
- 現在の RFC プロセスにおいては、言語のコア機能については 2/3 の yes、それ以外の拡張ライブラリ等の変更については過半数の yes で可決というルール
- RFC 自体は 2016 年から出ていたが、最近に FFI が過半数で可決され、JIT もまた過半数のみの要求で提案されるといったことへの危機感から、急遽投票へ持ち込む動きとなった
- FFI の実装内容についてまで飛び火する言い合いとなりつつ、Zeev さんからは JIT の投票については投票プロセスの議論を落ち着けてからの方がよさそう、という話が出ている
RFC: RFC Workflow & Voting (2019 update)
- https://externals.io/message/103917
- 現状の RFC プロセスを修正する別提案
- 誰が投票権を持つのか、何が 2/3 の yes を必要とするのか、そもそも何が投票を要求するのか、といった、現状のプロセスで曖昧な点や明文化の不足している点をより詳細に補おうとしている
[RFC] [VOTE] Typed properties v2
- https://externals.io/message/103148
- 7.4 向けで受理されていた型付プロパティの実装が master にマージ
Added FFI extension
- https://github.com/php/php-src/commit/e089d506d5c7716c62cee5232d32ab22d0ddde26
- 7.4 向けで FFI の RFC が 24:15 で受理され、master に入った
- Experimental(実験的)として拡張リストには書かれており、8.0 で互換性の崩れる修正が入る可能性も
Coalesce assign operator (??=) implemented
- https://externals.io/message/103774
- 2 ~ 3 年前に RFC が受理されたものの、実装がされず放置されていた
??=
が実装された
PHP RFC: mb_str_split
- https://wiki.php.net/rfc/mb_str_split
- マルチバイト文字列を分割する関数 mb_str_split() の提案、10:1 で受理
PHP-7.4 branched, master is PHP 8.0
- https://externals.io/message/103862
- PHP-7.4 のブランチが切られ、以降 master は PHP 8.0 向けとなった
- まだ 7.4 のフィーチャーフリーズではなく、当面の間 7.4 と 8.0 の開発が並行して行われる
- 後方互換性のない変更や master へのマージの難しくなるような大きな変更は PHP 8.0 行きとなりそう
- internals での議論の結果を反映
[RFC][Vote] Covariant Returns and Contravariant Parameters
[RFC] Reflection for references
- https://externals.io/message/103738
- ある変数が参照であるかの検出や同一性の比較のため、ReflectionReference を追加する RFC
- 7.4 向けで投票が開始された
[VOTE] RFC: Unbundle ext/wddx
- https://externals.io/message/103755
- WDDX をバンドル拡張から外す RFC の投票が開始
- 外すこと自体は 30:0 で可決
- 別投票された進め方については、7.4 で廃止予定機能としつつ同時に PECL にも移動とする案が可決された
[RFC] New custom object serialization mechanism
- https://externals.io/message/103823
- 新たなオブジェクトのシリアライズ機構として、マジックメソッド __serialize() / __unserialize() を追加する RFC
- 現状の Serializable では複数回同じオブジェクトを参照する値が現れる際の扱いに問題があり、__sleep() / __wakeup() も扱い辛さがあるため、更に別の方法を追加しようというもの
- マジックメソッドを追加するのがやや難色を示されているが、インターフェースを使うにも Serializable がすでに使われている名前なのがネック
Making stdClass iterable
- https://externals.io/message/103718
- stdClass を iterable にしようという RFC
- 「そもそも stdClass はアンチパターン」「廃止にすべきでは」といった意見が出ているのが少し面白い
Proposal fo “Code-free constructors declaration”
- https://externals.io/message/103793
- コンストラクタで引数からプロパティを初期化するようなボイラープレートを書かずに済ますシンタックスシュガーの RFC
- Hack に似たような機能があるが、今回の提案と違ってコンストラクタの処理本体を書ける
その他の情報や面白かった記事など
Nikita Popov joins PhpStorm Team
- https://blog.jetbrains.com/phpstorm/2019/01/nikita-popov-joins-phpstorm-team/
- JetBrains の PhpStorm チームに、PHP コア開発者の nikic (Nikita Popov) さんが参加
- PHP のエコシステムを改善していくのが主な仕事
- PHP のコアの開発を業務として行う人が増えたことで、今後の開発の加速が予想される
Someone Hacked PHP PEAR Site and Replaced the Official Package Manager
- https://thehackernews.com/2019/01/php-pear-hacked.html
- PEAR のインストーラ go-pear.phar が公式サイトで改竄されていた
- 12/20 以降に公式サイトからダウンロードされたファイルは改竄されたもの、8月から 12/20 までのものも確実に安全とは言えない
- 改竄されたファイルを実行すると perl 経由で 104.131.154.154 へのリバースシェルを起動し、起動権限でリモートから任意コマンドが実行可能となる
- 影響は pear.php.net の公式サイトから go-pear.phar をダウンロードして実行する場合のみ、github や各 Linux ディストリビューションからの取得は問題なし
- 例えば公式サイトから go-pear.phar をダウンロードする Dockerfile 等も世の中にはあるため、各自環境の見直しを推奨
- go-pear.phar が公式リリースのものと同じか、をチェックするスクリプトが公開されている
The Xdebug Experience
- https://derickrethans.nl/xdebug-experience.html
- 17 年目の開発を迎えた Xdebug の開発について、作者 Derick さんの記事
- 7.3 対応やリファクタリングといった今後の開発を進めていくのに開発資金が必要(先日 MongoDB からの退職を伝えている)
- Patreon でパトロンを募集中のため、日頃お世話になっている人や企業の方は検討してみてもいいかも
PHP5.6.40がリリースされた
- https://qiita.com/rana_kualu/items/0980ae25c8d71b12f4e3
- サポート終了となった筈の PHP 5.6 にセキュリティ修正のリリースが出た
- 各修正がバグチケットへのリンクや例示コードとともにまとめられている
PHP Conference 仙台 2019 スライド資料&サンプルコードまとめ
- https://www.ritolab.com/entry/161
- 1/26 に開催された PHP カンファレンス仙台 2019 のスライド資料
- 参加者のブログ記事が togetter にもまとめられている
PHPの現場 | 26. PHP 7.3, 7.4, 2^3(sji_ch)
- https://php-genba.shin1x1.com/26
- shin1x1 さんの podcast 「PHP の現場」にて、最近の PHP や PHP カンファレンス仙台についての話
イベント情報
Laravel JP Conference(開催日: 2019 年 2 月 16 日)
- 本編/懇親会ともに来場者チケットは売り切れ
- タイムテーブルが公開されている
PHPerKaigi 2019(開催日: 2019 年 3 月 29 日 ~ 31 日)
- Web サイトが更新
- 本編/懇親会のチケット販売が開始
PHP カンファレンス福岡 2019(開催日: 2019 年 6 月 29 日)
PHP 7.4 のブランチが切られて PHP 8 用となった master ブランチで、非推奨化されていた機能がもの凄い勢いで削除されています。 create_function() や PHP 4 形式のコンストラクタ、非静的メソッドの静的呼び出し、__autoload() など、その他多くの機能が削除されています。 型付プロパティ や RFC 受理後しばらく動きのなかった ??=
も実装されましたし、nikic さんが JetBrains での業務として PHP の開発を行うようになり、開発の時間を確保しやすくなったことも、この勢いの良さには影響しているのかもしれません。
そしてとうとう JIT の RFC が internals へ投稿され、議論フェーズに入りました。コア開発者の中でも JIT の扱いについては意見が割れているところですが、果たしてどうなるでしょうか。
先日、PHP カンファレンス仙台 2019 が開催されました。仙台での初の開催にも関わらず 240 人を越える来場者が集まり、当日は大盛況でした。
弊社はゴールドスポンサーとしてブースを出展し、また丹賀が CQRS について登壇しました。
今回は個人的な活動としてイベントの開催に関わったのですが、会社も地域の技術者コミュニティ盛り上げの意義に理解を示し、活動を応援もしてくれましたので、インフィニットループは良い会社だな、と思っています。
現在分かっているだけでも、今年は Laravel JP Conference、PHPerKaigi、PHP カンファレンス福岡、PHP カンファレンス北海道、PHP カンファレンス沖縄、CakePHP Fest、PHP カンファレンス東京と、PHP イベント盛り沢山の年になりそうです。 はたしてどのくらいに参加できるでしょうか。
インフィニットループでは、PHP の最新技術動向や技術者のお祭りが気になるエンジニアを募集しています。 詳しくはこちらの求人詳細をご覧ください → 採用情報ページ (仙台支社特設ページはこちら)