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

2018年09月13日 (木)

著者 : s-igarashi

たぶん月刊PHPニュース 2018年9月13日号

インフィニットループ仙台支社のプログラマー、いがらしです。
PHP 界隈の気になったことをまとめ、月一くらいで宮城県仙台市からお送りします。
前回に引き続き、主に最近 GitHub で見かけて気になった PHP プロジェクトや、PHP の言語開発者メーリングリストである internals の議論などをつまみ食いして紹介します。
※ なお、画像の PHP ロゴは作者の Colin Viebrock さんによってリリースされ、CC BY-SA 4.0 でライセンスされているものです。

GitHub で見かけたプロジェクト

  • メールアドレスのバリデータ
  • 複数のバリデーション方法を選んだり組み合わせたりして使える
  • PHP プロジェクトの scaffolding ツール
  • カスタマイズ可能なテンプレートから、新しい PHP プロジェクトを始める土台を手軽に作れる
  • composer パッケージのファイルへパッチをあてるためのパッケージ
  • 何らかの理由で上流へ修正を入れずデプロイ時のパッチで対応、のようなケースがあると使えるかも
  • 標準の DOMDocument を拡張するライブラリ
  • CSS セレクタによるクエリなど、幾つかの追加機能をサポート
  • PHP 製のメッセージキューパッケージ
  • Java の JMS にインスパイアされた queue-interop を通じ、各種メッセージキューシステムを扱える
  • 静的解析ツール phpstan の公式 Mockery 拡張
  • phpDoc 内の Foo|\Mockery\MockInterface のような書式を解釈
  • Mockery::mock() や Mockery::spy()が intersection type を返し、モックオブジェクトとしてもモックされたクラスのオブジェクトとしても扱える
  • shouldReceive()allows()expects()がモックオブジェクトに対して呼べる
  • Laravel 5 用のログビューア
  • Laravel 用の enum 実装
  • ローカリゼーション機能やリクエストのバリデーション機能も付いている
  • Laravel 製のフォーラム作成ツール Flarum のコア
  • PHP 用のサンプリング型プロファイラ
  • 別プロセスで処理系内部で使うデータのメモリレイアウトについて知識を持ち、外からプロセスのメモリをのぞく形で動作
  • 同様にサンプリング型プロファイラで sample_prof があるが、こちらはプロセス内別スレッドで動作する
  • PHP のスタックトレースをプロセス外部から読むツール
  • Rust で書かれており、機構としては phpspy に近い
  • こういうものがあると、「なぜか分からないがプロセスが暴走」のようなケースで原因特定に役立つかも
  • PHP エンジニアとしての転職面接に備えて勉強/準備した内容の記録
  • 中国語が分からなくても、Google 翻訳で何をやっているのかなんとなく読める
  • 下層から上層までの結構広い範囲を勉強しているようで、見ると負けないぞという気持ちになる
  • 中国の PHPer 向け面接対策のようなリポジトリは幾つかあるようなので、興味があれば検索してみると良いかも
  • PHP のランタイムを C++ で書き差し替えることで、汎用スクリプト言語を目指す、という野心的なプロジェクト
  • 言語的には PHP と互換性を持ち、古くなった言語機能を削除
  • Unicode や非同期プログラミング、マルチスレッド/コルーチンのサポートなどを目指す

最近のinternals

News and mailing lists were down. Up again?

  • https://externals.io/message/103097
  • 8/14 ~ 8/29 頃にかけて、PHP の ML がダウン
  • この影響で internals での議論も当該期間は停滞
  • 現在は復旧済

[RFC] [VOTE] Typed properties v2

  • https://externals.io/message/103148
  • 型付プロパティの提案 が投票開始
  • 9/25 に投票締め切り
  • 当初はもっと前に投票を開始する話だったのが延び、メーリングリストのダウンで更に延びてこの時期に
  • この記事を書いている現時点で、47:0 の賛成多数で投票は順調

RFC Proposal

  • https://externals.io/message/103077
  • preg_* 系の正規表現が今現在はサイレントに失敗する
  • 失敗の確認には preg_last_error() でエラーを捕捉しなければならない
  • エラー時に例外を投げるようにしてはどうか、という提案
  • いきなりやると後方互換性への影響が怖いので、7.4 では警告、8.0 で例外としてはどうか、という意見も

RFC Proposal: Make the hash extension always available

Lift ICU requirements

  • https://externals.io/message/103115
  • ext/intl の要求する ICU の最低バージョンを上げることについて
  • 現在は ICU >= 4.0 を要求(4.0 は 2008-07-02 リリースの 10 年以上前のバージョン)
  • 5.0 や 5.2 以上を要求してもよいのでは、という話も

Proposal: Please consider introducing a new function |str_cut| to make fast cutting for a string

  • https://externals.io/message/103113
  • 文字列の長さを切り詰める関数 str_cut() の提案
    • 巨大な文字列を切り詰める際、substr() では大きなサイズのコピーが発生する可能性がある
  • が、PR 上で Java の StringBuffer のようなものの方がよいのでは、という意見が出る
  • この流れで StringBuilder が実験的に作られる
  • どちらも RFC まで持ち込まれるかは不明

The curious case of the comparable objects.

  • https://externals.io/message/103076
  • 同じクラスのオブジェクト同士の比較で起きる面白いバグについての話
  • 別クラスを継承する子クラスの異なるインスタンス同士を比較する際、片方のインスタンスに対する print_r() や 配列キャストを行うと、その前後で比較結果が変わる場合がある
  • 現状実装ではこんな結果になる
  • PHP 5.4 からの挙動で、HHVM では起こらない
  • 正しい挙動については未定義とするしかないものの、read-only な筈の操作の前後で結果が変わるのは不便なため修正
  • すでに 7.3 / master には取り込み済
  • print_r() や配列キャスト等を行う前の最初の比較結果が変わることになるので、現状でオブジェクト同士の比較を使っているコードは注意が必要

HHVM

Ending PHP Support, and The Future Of Hack

  • https://hhvm.com/blog/2018/09/12/end-of-php-support-future-of-hack.html
  • HHVM の PHP サポートが終了
  • 2018-12-17 リリースの v3.30 が最後の PHP サポートバージョン(2019-11-19 にサポート終了)
  • 2019-01-28 リリースの v4.0.0 からは PHP との互換性を捨て、勢いよく開発を進めていく
  • PHP と袂を分かつ方針は昨年 9 月には発表されており、今年 3 月にリリースされた v3.2.5 で PHP 5 のサポートを打ち切っていた
  • Hack はここから 2~3 年の間はユーザベースの拡大を主な目標とせず、言語を改善していくのに注力
  • 大規模プロジェクトでは LTS ではなく通常の定期リリースの利用を推奨、2 ヶ月間の変更を 3 回の方が半年分を一度にキャッチアップするより楽
  • リリースサイクルを 4 週ごとのリリース(6~8 週のサポート期間)とすることも検討中

 
とうとう型付プロパティの提案が投票に入りました。投票開始から 24 時間以内にすでに 40 以上の賛成票が集まっていましたが、果たしてどうなるでしょうか。
GitHub で見かけたプロジェクト、の枠では触れていないのですが、先日リリースされた Laravel で管理画面を作るパッケージ、 Laravel Nova がけっこう話題になっているようです。GitHub でも関連するリポジトリを幾つか見かけました。有料のパッケージですが、今後どう広がっていくか気になるところです。
インフィニットループでは、PHP の最新技術動向が気になるエンジニアを募集しています。
詳しくはこちらの求人詳細をご覧ください → 採用情報ページ (仙台支社特設ページはこちら

ブログ記事検索

このブログについて

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