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

2018年11月27日 (火)

著者 : s-igarashi

たぶん月刊PHPニュース 2018年11月27日号


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

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

  • コードのリファクタリングや言語/フレームワーク/ライブラリのバージョンアップへの追従を自動で行うためのツール
  • PHP-Parser を利用
  • 静的解析でコードの依存関係を検査し、可視化やレイヤ間のアクセスルール違反の検出を行うツール
  • プロジェクト内で使われていない composer 依存を見つけるツール
  • ユーザから送られた HTML をサニタイズするライブラリ
  • Xdebug がリモートデバッグに使うプロトコル DBGp のプロクシサーバ
  • DBGp プロクシ自体は元々 Python での実装があったが、Amp を使い PHP で実装されているのが特徴
  • 使い道は幾つかありえる
  • 連想配列として構造化されたデータからオブジェクトを生成するクラス
  • クラスのインスタンスになるため、生の連想配列を使うとできない IDE の静的解析/補完を活用できるようになる
  • ネストしたオブジェクトの生成もサポート
  • 継承して使い、コンストラクタ内で Reflection を使ってプロパティを埋める実装
  • 解説記事 がある
  • ACL, RBAC, ABAC のような複数のモデルをサポートしたアクセスコントロールライブラリ
  • PHP 用のサーバレスフレームワーク bref
  • 今のところ AWS Lambda で使える
  • return true to win で使われ、その際のケーススタディの記事が先日公開された
    • 最初の月に 40 万 HTTP リクエスト、65 万回の Lambda 実行で、3 ドルかかったらしい
  • 脆弱性の動的検出ツール
  • PHP の文字列変数へタグを付け、ほとんどの関数やクラス、オペコードをフックできる xmark 拡張を利用
  • taint と payload の 2 つのモードを持つ
  • taint は laruence/taint と同様に動き、ユーザの入力値が system() のようなシンクポイント(脆弱性を引き起こす処理)へ渡されるのを検出
  • payload は実際にペイロードを送りつけてシンクポイントを監視するモード
  • 検出された脆弱性は Sentry へ収集できる
  • Amp ベースで並列処理を行うためのライブラリ
  • 先日 1.0.0 がリリースされた
  • Swoole を使って書かれた MySQL のプロクシ
  • コネクションプールと読み書きの分離をサポート
  • HandshakeV10 をサポート
  • Web Assembly のコードを PHP から直接実行できるようにする拡張を Rust で書く、という実験的プロジェクト
  • Rust で書いたライブラリを C API として拡張から呼び、PHP で扱う構成
  • 同じ人が FFI 経由で Rust のコードを呼び、Gutenberg の投稿フォーマットをパースする記事を書いており、こちらも面白い

最近のinternals

[RFC] [VOTE] Preloading

[RFC][VOTE] Password Digest Mechanism Registry

  • https://externals.io/message/103426
  • Password Hashing Registry の RFC の投票
  • PHP 7.4 向けで可決済
  • password_*() 系の関数はアプリケーションでパスワードをハッシュする標準的な方法を提供するために導入
  • ハッシュ用のアルゴリズムは処理系コンパイル時に利用できるライブラリで固定となっていた
  • 拡張向けの内部 API 追加により、アルゴリズムの拡張からの追加登録が可能となった

[RFC] [VOTE] Improve openssl_random_pseudo_bytes()

  • https://externals.io/message/103415
  • 疑似乱数生成用関数 openssl_random_pseudo_bytes() を改善する RFC
  • PHP 7.4 向けで可決済
  • openssl_random_pseudo_bytes() は失敗時に false を返していたが、例外を投げるようになる
  • 元は openssl_random_pseudo_bytes() を random_bytes()の実装へのエイリアスとする案が出ていた
  • が、それも混乱を招きそうな対応であり、OpenSSL での疑似乱数実装を捨てる理由もない、といった議論を経て、今回の修正となった

[RFC] Spread Operator in Array Expression

  • 配列展開演算子の RFC
  • PHP 7.4 向けで議論中、PR:3640 で作業中
  • 可変引数の ... 記法のように、配列の内容を他の配列の要素へ展開する
$parts = ['apple', 'pear'];
$fruits = ['banana', 'orange', ...$parts, 'watermelon']; // ['banana', 'orange', 'apple', 'pear', 'watermelon'];

Branch off PHP-7.4 early

  • https://externals.io/message/103436
  • PHP 8 に備え、ブランチ管理をどうするかの議論
  • 通常 PHP は alpha を過ぎる頃にフィーチャーフリーズ、beta をリリースする頃にそのバージョンのブランチを master から切る
  • 新機能の開発は常に master ブランチに取り込まれ、下位バージョンでのバグ修正も master へ取り込まれる
  • 乖離が大きくなり得る PHP 7.4 と 8.0 で 2 つのブランチを同時に進行するのは作業負担がある
  • 来年 1 月中頃に PHP 8 用のブランチをフィーチャーブランチとして切り、PHP 8 用ブランチへの継続的な取り込みが難しくなる大きな変更は master(この時点では PHP 7.4 用作業ブランチ)へ入れないようにする案が出ている

[RFC][Discuss] Covariant return- and contravariant parameter- types

最近の FIG

[PSR-5] Intersection Types

  • https://groups.google.com/forum/#!topic/php-fig/W1VyAtoqGQ8
  • PSR-5 の 交差型の記法について、| と & を同時に型指定に使うことを不許可にすべきという意見が出ている
  • A|B|C や A&B&C は許容、A|B&C のような指定や括弧での優先度指定は不許可というもの
  • そもそも複雑な指定が本当に必要か、PHP 自体に代数的型が入った際に不整合が出ないか、といった観点
  • 別途 PR を立てて議論を継続する予定

Remove Symfony

  • https://github.com/php-fig/fig-standards/pull/1120
  • Symfony の創設者 fabpot さんより、FIG のメンバーから Symfony を外すという PR
  • FIG からの脱退意思を表明するもの
  • fabpot さんは最近の FIG は相互運用性を目指すものではなく、ある種の思想にもとづいたフレームワークの 1 つを作ろうとしているに過ぎない、という意見を Twitter へ投稿している

イベント情報

PHP カンファレンス 2018(開催日: 2018 年 12 月 15 日)

PHP カンファレンス仙台 2019(開催日: 2019 年 1 月 26 日)

  • スピーカー募集を締め切り

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

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

 
先日 PHP 7.3 RC6 がリリースされました。最後の RC 版の内容をそのままリリース版とするリリースプロセスのため、何事もなければ、この内容で来月はじめの方には 7.3 正式版がリリースされることとなりそうです。
Phoronix にて旧バージョンと比較したベンチマークが公開されており、今回のリリースでも引き続き良好な性能向上を果たしているようです。
PHP 7.3 には RFC を通して導入された新機能の他、実は複数の trait から同じ trait を use する際に衝突が起きる問題の修正という、使い勝手への影響が結構大きそうな修正もこっそり入っています。
trait から trait を use する作り方が案外気軽にできない、と悩んでいた方は、試してみるといいかもしれません。
PHP 7.1 は 12 月 1 日にアクティブサポート期間を終え、6 日に予定されている 7.1.25 のリリース後は通常のバグ修正は行われず、セキュリティ修正のみがリリースされることとなります。
また、PHP 7.0 は 12 月 3 日に、 PHP 5.6 は 12 月 31 日に公式のセキュリティサポート期間を終えます。
Packagist のブログ記事によると、composer install が送る User-Agent の PHP バージョンは 7.1 以上のものが増えているそうです。
一方、phpVatch には多くのサーバがいまだ PHP 7.0 以下で動いているというデータもあります。
今、皆さんのサーバではどのバージョンの PHP が使われていますでしょうか。
インフィニットループでは、PHP の最新技術動向が気になるエンジニアを募集しています。
詳しくはこちらの求人詳細をご覧ください → 採用情報ページ (仙台支社特設ページはこちら

ブログ記事検索

このブログについて

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