インフィニットループ 技術ブログ

2019年02月01日 (金)

著者 : s-igarashi

たぶん月刊PHPニュース 2019年2月1日号


インフィニットループ仙台支社のプログラマー、いがらしです。
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

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

Added FFI extension

Coalesce assign operator (??=) implemented

PHP RFC: mb_str_split

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 が 39:1 で受理
  • PHP 7.4 に入る予定だが、実装上の問題から master へのマージはまだされていない
  • PR:3732 で作業中

[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

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がリリースされた

PHP Conference 仙台 2019 スライド資料&サンプルコードまとめ

PHPの現場 | 26. PHP 7.3, 7.4, 2^3(sji_ch)

イベント情報

Laravel JP Conference(開催日: 2019 年 2 月 16 日)

PHPerKaigi 2019(開催日: 2019 年 3 月 29 日 ~ 31 日)

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 の最新技術動向や技術者のお祭りが気になるエンジニアを募集しています。 詳しくはこちらの求人詳細をご覧ください → 採用情報ページ仙台支社特設ページはこちら

ブログ記事検索

このブログについて

このブログは、札幌市・仙台市の「株式会社インフィニットループ」が運営する技術ブログです。 お仕事で使えるITネタを社員たちが発信します!