PHPカンファレンス関西2013 #phpkansai を終えて

3回目となる PHPカンファレンス関西2013、今回はスタッフとして参加してきました。

PHPカンファレンス関西2013まとめ - Togetter

去年のテーマは「好きやねんPHP」でしたが、今年はなんと「PHPの未来を関西から」です。大きく出ましたね。どんな未来を発信したのでしょうか。

というわけで僕としては、現在の水準と比べて何が「未来」っぽいと感じたかを書きたいと思います。(他のネタは他のスタッフがやってくれると思うので。ブログを書くまでが勉強会ですしね。)

多言語パネルディスカッション

ものすごい過去の話から始めます。

それは、PHPユーザーは他の言語から学んでいるのか、という点。

PHPユーザーが他の言語ユーザーよりも弱いのは、そこなのではないか。

404 Blog Not Found:「PHPなめんな」と「(Perl|Python|Ruby)をなめんな」の違い

セッション中に出たヒゲのおじさんのこの発言が、2013を読み解くうえで非常にポイントになると思っています。

PHP5.3から始まるあの貪欲な他の言語の特徴の取り込みは、もはや語るまでもないですね。クロージャ、トレイト、ジェネレーター。たぶんこのままいけば、再代入禁止変数の宣言だとか、参照等価関数のメモ化なんかも、文法に入ってくるんじゃないでしょうか。個人的には、ショートアレイシンタックスのような、ショートクロージャシンタックスが来てほしいです。脱線しました m_ _m とにかく、PHP開発者はもう学んでいますというのは明白です。

じゃあユーザはどうか。

セッション内容は、PHPコミュニティ以外から、言語ごとに有名なエンジニアを招待してその言語の文化を知ろうという企画です。僕はPHP代表として、話長すぎるおっさん をやらせてもらいました。Pythonとか誠実な言語はいいよ、とか、関数型も知っておこうね、とか、自分の言語PHPが相対的にどういうポジションで活きるのか(これ大事)、とか、そのあたりが伝わってたらいいなあと願っています。

そこで逆に驚いたことがあります。たいへん失礼な言い方になるのですが、Java/JVM言語の人もLLの人もみんな、PHPについてあまり学んでいなかったという事実です。僕が知る限りでは、PHP以外の言語を使えるPHPerは案外多くて、逆に、最適なPHPを書ける非PHPユーザは少なかった。自分が正しくモダンPerlを書けと言われて手が止まる、みたいなものかも(新大阪コワーキングに教えてもらいに行こう)。

というわけで、もし怖い人に「他の言語から学んでいるのか」と聞かれたら「そちらはPHPから学んでおられますか」と返せるんじゃないかなと思いました。というのは冗談で、PHPは、もう実用言語としての地位を持っているしその根拠も説明したし、なんだから、これからは、他の言語のユーザに、PHPの変な仕様は、他の言語の言葉を使ってPHPなりの正しさを誠実に説明して、賢い人にもっと正しく学んでもらえる言語としてアピールして行ってもいいんじゃないかな、というのが、自分の中でだけですが、感じた未来です。

裏座談会で、Javaで作っていたものがPHPにシフトしてるんじゃないかという仮説も出ましたし、ってこれはお金の話ですね。まったく大阪はw

Debugging and Profiling PHP

というわけでみんな学びましたよ。英語から。

同時通訳なし、全部英語のセッションです。通訳は遅れてTwitterで流れてくるだけなので、画面で起こっていることは英語のリスニングでなんとかしないといけません。これがなんと、大ホールのほうで行われるんですよ。英語が当たり前なんだという衝撃、集中して聞いたら情報量ゼロじゃない、なにか聞きだせる、ということを、なるべく多くの人が感じてくれたら幸いです。

本当なら、セッションの後に教えてもらおうとがんばって英語で Graham に話しかける、なんて人が現れてもよかったのですが、彼が仕事忙しそうで早く上がってしまったのが残念です。楽天って土日に仕事割り込んで来るぐらい大変なのかな。

Chef + Vagrantで作るこれからの開発環境とクラウド

他の言語? ChefもVagrantも設定ファイルをRubyで書くんですよね。学ばざるをえないんじゃないですかね。 (ごめんなさい実は聴けてませんでした)

Ginq

裏の目玉商品がこれです。「未来を関西から」にもっとも合っているのが、実はGinqだったんじゃないかと思っています。実は発表者の @akanehara 氏は僕のもと同僚で、「PHPだけだとわからなかったHTTPがJavaPythonで理解できた」と言っていたタイプの人間です。カンファレンスのプログラムがまだ決まってなかった頃、僕もまだそのときスタッフじゃなかったんですが、いいから騙されたと思って、ってノリでお互いに薦めて、メインセッションに入れてもらいましたという経緯で行われたセッションです。

LINQインスパイア系ライブラリGinqの紹介

GinqのアイデアはC#のLINQから来ています。GinqのGの由来はまだリリースされていないPHP5.5のGeneratorです。GeneratorはPythonに由来する機能です。達成したことがすごいですよ。途中の一時変数がなくなります。データをすぐに操作せずにまず「操作するということを合成」するのです。合成された操作を使って、最後に入力を出力に直結するので、array_mapとarray_filterに必要な中間バッファが必要なくなります。-> このメソッドチェインで新たな操作コンテキストを次々と生成(コンテキストオブジェクトはイミュータブルで状態を持たない)しつつ、同じ演算の再評価をしない参照等価な関数の遅延評価の世界を作っています。モナドっぽいアプローチでHaskellの基本機能を実現し、それをC#の世界から借りてきたクエリ言語でパッケージ。...もう他の言語から学びすぎですね。

PHPのLINQっぽいライブラリはこれまでにも存在したけど、データを直接操作せず、データを操作する概念を合成してからの遅延評価をやり、必要に応じてメモ化をできるというのは、おそらく世界初です。なぜこれまで存在しなかったかというと、ジェネレーターがなかったから。

array_mapは一時バッファを使わざるをえないものの、元のデータがどうせarrayで来るからという理由で、僕もまあいいやと妥協していました。これまでのPHPは、あらかじめSQLで十分に絞り込んだせいぜい50件程度のデータをHTMLにできれば良かった。スタンドアローンのLAMP構成でもっとも使われてきた。

ところが、NoSQLによるSQLボトルネックのブレイクスルーや、クラウドによる分散コンピューティングという時代にきて、未来のPHPは従来のPHPではいられないようになってきていると僕は思います。100万件のデータをストリーミングで取ってきて、事前に加工してからHadoopに投げて出力をフォーマット、絞り込んでストリーミング出力、なんてことをバッファメモリでやっていたら足りないですよ。僕なんか、10000人の会員データをCSVに吐くだけでメモリ足りなくて困ったなんてこともありました。

そこで、バッファを持たないイテレーターをもっとカジュアルに作れるようにと、次はジェネレーターが登場となったんだと思いますが、本当に残念なことに、そのジェネレーターが活きるデータ操作ライブラリが同時にリリースされるわけじゃなさそうです。せっかくジェネレーターを使っても、array_mapや既存のLINQ類似ライブラリでは、結局巨大なarrayが必要になってしまう。で、いろんな言語から影響を受けたGinqは、バッファを持たないストリーミングができる。ね、PHPの未来はこういう形になる、という種が、関西から発信できるチャンスじゃないですか。

話長すぎるおじさん、ちょっと熱くなりすぎました。

ただ、ChefとVagrantの話との裏番組だったので、聴講者が少なかったのが悔やまれます。まあ、逆に言えば、そこであえてGinqを聞くことを選んだ人にまず伝わったというのはあるかもです。

PhpStorm

なんと今回、JetBRAINSの日本代理店のサムライズム様がスポンサーとして直々にIDEのデモを見せに来てくださいました。

有料だしまだマイナーなIDEじゃん、と、思いきや、なんと登壇した発表者の大多数がPhpStormをすでに使っているか、またはEclipseを使いつつもPhpStormを絶賛しているではありませんか。LTを含む発表の使用IDE、自分が記憶しているだけで、SublimeText x 1, Coda x 1, Eclipse x 2, PhpStorm x 6 です。多言語ディスカッションでの普及率は、Perlはしょうがないとして、ほとんどの人がすでにJetBRAINSにお金を払っていました。(IntelliJ IDEA, WebStorm なんかもあります。IDEAのScalaプラグイン最強です)

Ginq の @akanehara 氏なんて、すでに使ってるのにじゃんけんプレゼント大会で優勝してパーソナルライセンスもらって「やったーこれで法人ライセンスとパーソナルライセンスの2本持ちだー」なんてもう、仕込みネタかとw (本当に偶然)

JetBRAINSの @yusuke さんが「PhpStormを使ったらPHPでも思った以上に型安全に書けるんだな」という感想を、このカンファレンスで逆に持ち帰ってもらえたことが、すごく良かった気がします。僕も、PhpStormを使うことで、PHPC#Scalaになったような感覚に陥ることがあります。

でも Eclipse でも PhpStorm みたいなリファクタリング機能が欲しいのになかなか出ないから自分で作る、と、実際に作っている @iteman さんすごいです。EclipseはIDE界のFirefoxとして、欠かせない存在なのです。

で、まあ、どのツールが流行るかという話よりも、僕は、Vim/Emacsで書ける人がわざわざIDEを使おうとし始めているということが、MS製品やJavaにおけるIDEとは違う意味で、PHPの未来に繋がっているように感じるのです。「関心を分離するってどういうこと?」のセッションで、分離された関心の記述箇所が遠ざかるのを、IDEで解析してコードをリンクさせるみたいな話がありました。大事なのはそこだと思うのです。

むかし、IDEがないとプログラムが書けないのは軟弱者、エディタをカスタマイズすれば記述速度は同等になるぜ、という論調がありました。たしかに、Visual StudioにしてもEclipseにしても、いきなりサービスが良すぎて、エディタで書けない人でも開発できちゃう、という空気はありました。が、いまPHPで起ころうとしているIDEブームはむしろ、エディタでも十分に速く書ける種類の人から始まっている気がします。そういう人たちがわざわざお金を払ってIDEを使おうとしていることに、そして、それを生で見られるカンファレンスに、深い意味がある気がします。

初心者がテキストエディタで入門し、上級者になるにつれIDEを駆使した設計へ、という構図。これ、新しくないですか。未来っぽいんじゃないですか。PyCharmでもRubyMineでも同じ構造はあると思うんですが、それが真っ先に起こるのは、PHPのユーザコミュニティだと思います。それは、PHPが他の言語より静的解析に向いていることが、大事な足場になっていると僕は思っています。

Pinoco

まあとりあえずシェアしときます。本業はこっちなので。

お蔵入りスライド(ネタ)

もったいないのでネタ披露します。

話長すぎるおじさん、以上、おしまい。

ドラ娘への熱い想いとか、LTを直前で中断してドラ娘と...とかあたりは任せました! ブログ書くまでが勉強会です。