hnwの日記

Language Update PHP編(LL Ring Recursive補足)

昨日9/5にLL Ring Recursiveの「Language Update」で登壇(リングイン)してきました。毎回他の言語の近況が聞けるので観客として楽しみなコンテンツという印象ですが、いざ自分が発表者側に立つと大したことが言えなかった気がして一人反省会中です。


というわけで、他の言語メインの人向けに最近のPHPってこんな感じですよ、という内容をまとめてみました。実はLanguage Update自体が3年ぶりだそうで、ここ3年くらいでPHPに何があったかというお題で考えてみました。

PHP7が速いよ!そろそろ出るよ!

PHP7は現行最新バージョンであるPHP5.6の2倍もしくはそれ以上に高速であり、11月リリースを目指して現在RC2がリリースされています。これは壇上で言えたので、まずは良かったかなと思います。Perlと違ってPHPはバージョン6を飛ばすよ、というネタも言えたら良かったかもしれません。


しかし、他の言語ではマイナーバージョンアップで入るような変更がようやくメジャーバージョンアップで入ったとも言えそうで、他言語の人に胸を張って言える内容ではないかもしれません。PHP7では内部データ構造を大変更したわけですが、言語自体の仕様は変えないような変更ですから、他の言語ならもっとカジュアルに採用されるのではないでしょうか。PHP開発コミュニティは保守的なので仕方がない面もあると思いますが、他の言語が若干羨ましくもあります。

本体に影響を与えるような別実装の出現

PythonであればPyPy、RubyであればJRubyなど、他の言語には高品質な別実装が存在します。また、そうした別実装がユーザーにも選択肢の一つとして認知されており、本体の開発にも適切な緊張感を与えているように見えます。選択肢があることは言語全体にとっての価値なのだと思います。


PHPには商用環境で選択肢に挙がるような別実装がほぼ無い時期が続いていましたが、2011年に登場したHHVMが状況を変えつつあります。HHVMはFacebookが自社サービス向けに開発しているPHP実行環境で、PHP5より断然高速で互換性も高いのが特徴です。開発も非常にアクティブですし、オープンソースプロジェクトとしてもうまく回っている状況で、ようやく本家PHPのライバルになりうる実装が出てきたと言えるでしょう。


このHHVMは早くもPHP本体に影響を与え始めています。高速化を最大のテーマとしてPHP7の開発が進められたこと自体もHHVMの影響があるはずですし、性能改善プロジェクトでもHHVMに追いつくことが一つの目標だったように見えます。また、PHP7で採用された返り値のタイプヒンティングなど、HHVM/Hackで導入された文法にPHPが追従するようなこともありました。


HHVMの登場がPHPにとってインパクトのある事件だったのは間違いないでしょうし、今後も存在感を増していって欲しいと思っています。

Composerの台頭

ここ数年のPHPで大きい話題として、 Composerの一般化が挙げられるように思います。Composerは他の言語で言うとnpmやgem+Bundlerに相当するような、パッケージインストーラ+依存性マネージャです。


3年前くらいから一部の人は使っていた印象ですが、いまやPHPユーザーで知らない人はいないくらいの認知度になってきました。ライブラリ側の対応も十分に進んでおり、デファクトスタンダードの地位を確立したと言えるでしょう。

モジュラリティの高まり

フレームワーク疎結合なライブラリの組み合わせで構成されるようになり、フレームワークをまたいだコンポーネントの再利用が加速している、というのが昨今のPHP界隈の流れだと思います。


名前空間の導入・PSRの策定・Symfony勢の頑張り・Composerの一般化など色々な要因が組み合わさった結果だと思いますが、ようやくPHPのエコシステムがうまく回り始めたと言っても良いのではないでしょうか。


最近PHP界隈でDIの話題が増えてきたのも、そうした流れで説明できるでしょう。Javaでは10年以上前に通った道ですね。

他の言語の「普通」を採用

ここ3年くらいでPHPに入った主な新機能は次のようなものです。

  • 配列を[]で書けるようになった (5.4)
  • Trait (5.4)
  • ビルトインWebサーバ (5.4)
  • ジェネレータ (5.5)
  • Null合体演算子「??」(7.0)
  • 宇宙船演算子「<=>」 (7.0)
  • 無名クラス (7.0)


どれもこれも「あの言語でいうアレ」が思いつきます。逆に言うと、他の言語が羨ましい、が徐々に減ってきているとも言えそうです。また、既存機能の改修も基本的に「ま、そうよね」という変更ばかりの印象です。


一方で、PHPユーザーは古いPHP環境で仕事をすることが珍しくないせいか、若干保守的な人が多い気がします。現場のコードでTraitやジェネレータを使うとまだまだギョッとされるかもしれません。無名関数(2009年リリースの5.3で採用)でさえ恐る恐る使うような感覚の人もいるように思います。

統合開発環境を使う人が増えている

これは言語自体の話題ではありませんが、PHPユーザーの中でPhpStormという統合開発環境を使う人が増えているように思います。PhpStormはJava統合開発環境として定評のあるIntelliJを開発しているJetBrainsの製品です。


個人的には、PhpStormのありなしで別言語と言ってもいいくらいにイメージが変わる気がします。PHPは言語として型がいい加減で、型に関するトラブルは珍しくありません。これに対し、PhpStormは独自の静的解析で呼び出し元・呼び出し先の型の不一致を警告してくれるなど、言語のダメなところを補ってくれます。確実に生産性が上がるので、もし導入していないPHPの現場があるなら是非導入すべきだと思います。

まとめ


正直なところ、元々PHPってあまり特徴が無い言語で、他の言語の人に「ここがすごい!」って言うような言語じゃないと思うんですよね。ここ数年の変化というところを考えても、他の言語では既に当然のところに追いつくような、無難な内容が多いような気がします。


他の言語の人に伝えることがあるとしたら、PHPはネット上での印象よりはマトモな言語ですよ、ってことくらいなのではないでしょうか。マトモなエンジニアが集まっている現場なら一定以上の生産性を確保できるのが昨今のPHPだと言えるでしょう(そういう現場なら他の言語でもいいんじゃない?という議論はさておき)。