本セッションの登壇者
セッション動画(YouTubeチャンネル登録もお願いします。)
こんにちは、よろしくお願いします。「近況PHP」ということで、uzullaです。フリーのPHPerで、Rubyistではないほうです。
PHPはなぜ生き残ったのか
最初にまとめなのですが、PHPは生き残りました。すごく成長を続けているとまでは言わないですが、衰退はしていません。Breaking Changeを恐れない程度の力強い進化を遂げています。他の言語から見たら「少し遅れているかもしれないな」くらいのモダンさをキャッチアップ中です。
(PHPが)なんで生き残ったかというと、十分にシェアが大きかったこと、速度もそこそこちゃんと出ていること、フレームワークもぼちぼち流行っているものがあるから。不足しているのはエンジニアくらいという状況ですね。
どこで使われているかというと、Webのバックエンドですね。C10KやgRPC以外のところでPHPはまだまだ活躍できています。現代ではハイパフォーマンスが必要なところは別の言語やマネージドを使うのが普通だと思っています。
プログラミング言語としての優位性 - ゆるふわ型だけが取り柄じゃない!
なんでJavaとかにしないのと聞かれたらだいたいの場合で「PHPで十分だから」というのが答えです。基本的にPHPはコンパイルできないのでソースが必ず読めるということもありますし、Xdebugなどのデバッガもすごく読みやすいのがポイントだと思っています。
進化もしつつあります。「PHPがしっかりとした言語になっている」というとみんな笑うかもしれないですが、型もどんどん増えてきていますし、Enumもついに入りました。ほかの言語にもあるようなSpreadやmatch式といったお洒落なものも出てきて良い感じですね。
「でもゆるふわ型なんでしょ?」とよく言われるんですけど、今だとこうやって引数のところにintと書いてあれば、Stringを入れたときにちゃんとTypeErrorが出て終了してくれます。
基本は静的解析 - PHPに動的は求められていない?
静的解析を使うのが今の基本なのかなと思っています。静的解析ツールを使えばこういったジェネリクスのようなことも書けたりします。現代のPHPは静的解析を使うことによって、二歩三歩先に強くなれるところがおもしろいと思っています。
(PHPに)「動的」は求められていないとわりと思っています。静的解析ツールを使うと動的だとどうしてもできなくなってしまうので。
固く書く限り、しっかりとしたコードが書けるのがPHPのおもしろいところです。ただ、いまだにゆるふわなコードも書けますし、フレームワークも汎用的なので、わりと動的なことを許す通用性があり、このあたりをどう両立させるかが今後の課題かと思います。
進化の現状 - 強化されているもの、足りないもの、言語外の動き
強化されているものに関してはComposerなどのエコシステムですが、先ほどお伝えしたように型が良い感じになり、ソリッドな言語への変化がありつつも動的なものも追加されています。お洒落なものも追加されています。歴史的経緯もどんどん削除されていって、どんどん良くなっているように思います。
また、今後進化しないであろうものとしては、threadやSingletonなどプロセスをまたげないものは来ないかなと思います。バイナリデータを操作するものも来ない雰囲気を感じています。
今、足りないものはPreforkなので並行/並列処理がまだ不得意ですね。Fiberが入ったので今後は改善されるかもしれないです。あと足りていないのは、本番環境やコンテナで実行できる(PHP自前の)httpdですね。(非公式なものは)あるにはあるんですけれども。
言語外の進化ですが、静的解析化すると共にOOPをちゃんとやっていく感じになったので、他言語同様にRequestとResponseオブジェクトを使うことが増えてきました。PSR-7、PSR-15などを用いてミドルウェア的な実装が増えてきています。$_GETみたいな古いPHPのスタイルとは決別しつつあります。
改善されたエラー処理ですが、昔はいろいろなものがあって本当に混沌としていましたが、今は例外で1個にまとまっており、大規模なバッチやサーバプログラムも書けるようになりました。
昨今の大変なポイントは、PHPのバージョンはどんどん上がっているのですが、それ故にBreaking Changeが多いことです。そのあたりをどうキャッチアップしていくかがPHPの一番難しいところかと思います。素直なコードならそこまで大変ではない…本当かな…うん…。
まとめ - より良いコード/設計をめざしてさらなる進化を!
まとめですが、良い感じの言語としてぼちぼち進化しています。ゆっくりしているように見えますが、今後もWeb系のメジャー足り得る言語であると思います。
他の言語にあるような「大発見/新発明」のようなものはありませんが、それはそれでよけいなことを考えずに書けるので、生産性としては良いと思います。不足部分は他の言語やマネージドのサービスを借りれば良いですし、皆が理解してやっていければいいかと。
今の負債はレガシーコードと大手のフレームワークを信奉し過ぎていることだと思うので、より良いコード/設計をやっていけばPHPはどんどんやっていけると思っています。
以上です。