PHPカンファレンス2015 スペシャルレポート

PHPカンファレンス2015 当日レポート[更新終了]

この記事を読むのに必要な時間:およそ 27.5 分

Rasmus Lerdorfさん「基調講演」

PHPの開発者Rasmus Lerdorfさんの基調講演は,満員御礼で始まりました。

画像

20周年は「すごい」ではなく,⁠ただただ,歳を取ったな」というだけの感覚だと話します。そしてスライドで,1995年のインターネットを物語る「PHP ANOUNCEMENT JUNE 8,1995」を示しました。

画像

この文章は当時の問題のリストアップをしているタイムカプセルのようで,当時のPHPは現実の問題解決にフォーカスしていたと説明。元々は,C言語を使ってロジックを書いていきTypoをした時にエラーを出すということ,基本はスタックベースでプッシュしていく仕様でした。ただ,当時すごく良くできていると思ったものは,今から見ると失敗に終わっていると言います。

今はPHP7でいろいろなものを織り込んだものを出せるようになりました。PHP7はセカンダリーのOpCacheを持てるようにしています。その結果,ファイルベースでコンパイルされたものは4倍,メモリ上のキャッシュでは10倍の速度が出るようになりました。また,いままで,CLI(コマンドラインインターフェイス)のPHPではキャッシュが使えなかったけれど,7では使えるようになりました。これにより,コンポーザーの動作は2倍の速度が出るようになっています。つまり,もともとのPHPのスピード改善が2倍くらいあるのでPHP5でコンポーザーを動かすのとくらべて4倍の速度改善がされていると紹介しました。

他にも新機能はいろいろあります。

  • スタティックアナライザの書き方。
  • returnTypeで特定のタイプが返せるようになった。
  • stritタイプを準備しているので,型に問題があればエラーを返せるようになった。
  • クロージャーも1回限りしか使えないような書き方ができるようにもなった。
  • NullCoalesceOperatorが実装された。
  • SpaceshipOperatorが実装された。
  • スターウォーズのX1のようなオペレータ<==>が実装された。
  • FatalになっていたエラーもExceptionとしてキャッチできるようになった。
  • クロージャーコールを追加された。
  • 特定メソッドの上でクロージャーをコールできるようになった。
  • ereg等のPHP4の非推奨なメソッドを多く削除した。
  • 新しい予約語も追加されているので注意。
  • Uniform Variable Syntax。
  • PHP7はすべて左から右に解釈するようになっているが,PHP5の順序で解釈させるようにする方法も準備している。
  • preg_replaceをpreg_replace_callbackで実装する方法。

どのように2倍の速度が出せるようになったのか?については,Wordpressでの1リクエストで調査し,2倍の高速化を果たしたことを証明するグラフを表示して説明しました。また,20年前からアップデートしている言語にも関わらず2倍になったことについて,インストラクションの半分を削除し,今までと同じように動くことを求められるため,大変だったと言います。例えば,メモリの消費を大幅に抑えたり,CPUキャッシュからコンパイラから諸々見直したりしたとのこと。そしてJITについて,まだPHP7にありませんが,JITを使わずにこれだけのパフォーマンス改善が行えているとし,これからJITを導入するオプションが残っているため,更なるパフォーマンス改善が望めるはずだと述べました。

なお,発表中に出した一連の数字については詳細に情報を提供しているとし,皆さんもベンチマークしてほしいと呼びかけていました。

次に,様々なアプリケーションでの比較を示しました。

  • Drupal8は,レイテンシは半分に下がっている。HHVM3.7よりも早い。
  • WordPress4.1.1は,PHPは5.6の時代から見ると3倍くらいの性能に。HHVM3.7の速度に近づいている。でもHHVMに勝てなかったので,gccの機能,FDOを用いバイナリの最適化を図り,ほぼほぼ同じ速度になったとのこと。
  • phpBB3.1.3は,HHVM3.7よりも早い。
  • MediaWiki1.24.1は,HHVM3.7の速度に近づいている。MediaWikiについてもHHVMは最適化を図っている。特に最適化を測っていない言語については,PHP7のほうが早い。
  • Opencart2.0.2.0は,あまり速度向上が認められなかった。これは,ほとんどの時間がデータベースへのアクセスであるため。
  • WardrobeCMS 1.2.0は,PHP5と比較して2倍の性能向上が見られる。LaravelやSymfonyのようなフレームワークを用いている人はこの2倍の効果を感じることができるはず。クリックすればわかるレベル。
  • Geeklog2.1.0は,他と同じような結果。
  • Magento1.9.1.1は,そもそもリクエストできる数が少なく数十程度である。
  • Traq3.5.2は,2倍くらいの差が出た。

また,PHP5からPHP7への移行を数々のアプリケーションで試した結果,Avalonというアプリで修正が必要だったが,他ではそのまま何もせずにPHP7を採用できたと話しました。

Rasmusさんは,⁠もうすぐPHP7がリリースされますので,みんなテストしてください。そして問題があれば教えてください。リリースして大量の問題が報告されると,開発チームは不機嫌になりますが,リリースする前なら,ニコニコ修正します」と述べていました。

Vagrantのスクリプトも準備していると言います。この仮想マシンはDHCPで接続も可能です。開発環境のコピーも提供します。Vagrantのコンパイルで,とても簡単にPHP7とPHP5にスイッチできるとのこと。

また,PHPのバグを見つけてほしいと言います。バグが無ければバグフックスを修正する側に回ってくれても構わないとし,バグを報告するサイトではランダムでバグを表示する機能を紹介しました。また,バグではないという見極めも大事,むしろほとんどがそうだとも注意しました。

画像

質疑応答も活発に行われました。

  • 仕事で7に移行するときに気をつけることは?
    • すぐに使ってください(笑)⁠ 本当はPHP7.0をプロダクションで用いることは無いと思うが,7.1までは待たなくても良いくらいの信頼度があるのでそれくらいで使える。
  • mb系のFunctionが通常のFunctionと一緒になることはあるか?
    • mb系のFunctionが融合する可能性は今のところ無い。いつかするかもしれない。いまでも例えばユーザースペースを使う等で実施できる。7.0は今までどおりのmbは別で実装されている。
  • パフォーマンス向上の項目を教えてください。
    • すべてパフォーマンスに関する要素を書き出すことはできない。言語自体もでも早くする仕組みを改善している。あまりにも多い。ファイルベースでのキャッシュによるリスタートの速さが挙げられる。
  • PHPでは,推奨するフレームワークがあるの?
    • それは結局はどのフレームワークがいいのかという質問でしょう?(笑)⁠ 私にフレームワークを聞くのは間違っている。PHPの開発者ではなく,Cの開発者だから。私のフレームワークに関する知識は「なんでこんなに遅いんだろう」と汗を掻くくらいしかない。しいて言えば,モジュラー構成になっていて,必要なものを選べるようなフレームワークがいいと思う。
  • PHPのPはパーソナルだという話があるが実際はどうか?
    • PHPはPHPでPは……という話はしない(笑)⁠ 背後になんの意味もないのか?という話をする人のために話すことはあるけど。PHPはPHPです。
  • 古いエクステンションに合わせて後方互換を保ったものを準備するつもりはあるか?(PECL等で作られているので)⁠
    • C言語で書かれたモジュールを準備するつもりはない。ただし,後方互換を実装した数百という例があるので,やるべきことはパターンを見て,自分で,PHP5のコアに入っているものもあるので,それをPHP7に実装していくこと。

yoku0825さん「MySQL 5.7にやられないために知っておいてほしいこと」

yoku0825さんは,MySQL5.7について発表しました。

画像

MySQL 5.7 とは?

MySQLはバージョンが5.7となり,2年半ぶりにメジャーバージョンアップしました。次はMySQL5.8になるようです。yoku0825さんは「5.7は新しい機能がたくさんあるので,アップグレードしたいバージョンではありますが,たくさんの罠がひそんでいる」と言います。

これまでのMySQL

2015年8月に5.7.8-rc2がリリースされました。rcとはリリース候補版を意味します。5.6をリリースした際に,Oracleは18~24ヶ月で次のメジャーバージョンをリリースする予定と言っていましたが,リリースがずれこんでいるようです。

  • 2010/12: MySQL5.5
  • 2013/02: MySQL5.6
  • 2015/xx: MySQL5.7

MySQL5.7の新機能について

MySQL5.7で新しくなった機能等について4つのカテゴリにわけて解説しました。一部紹介します。

  • 最低限これは知って欲しい
    • 16桁ハッシュのパスワード廃止
    • default_password_lifetime
    • sql_modeのデフォルト値変更
  • 一応知っておいてほしい
    • mysql.user.passwordカラムの廃止
    • 認証周りの構文の変更
    • secure_file_priv
  • これは知っているとちょっと得する
    • sysスキーマ
    • GTIDのオンライン有効化がサポート
    • MySQLネイティブの全文検索が日本語対応
  • 知っておいても損はない
    • innodb_buffer_pool_sizeのオンライン変更がサポート
    • sync_binlogのデフォルト変更
    • マルチソースレプリケーション

まとめ

新機能等の発見報告は,日本MySQLユーザ会メーリングリストやMySQL Casual Slack,Qiitaやブログ,自身の情報発信場所などでしていると語っていました。最後に,楽しいPHP7+MySQL5.7ライフを!と述べていました。

30分の発表でスライドが172枚ととてもボリュームがあり,MySQL5.7について満遍なく知ることができる発表でした。

画像

大谷祐司さん「Hack言語に賭けたチームの話」⁠

大谷祐司さんは,7月にリリースした転職サイトで,社内ではじめてHackを採用したそうです。それを通したHackの知見について発表しました。

画像

Hackとは?

HackはFacebookによって開発された言語です。PHPと互換性を持っていて,HHVMという仮想マシン上で動作します。Facebook本体のコードはほとんどHackに移行済みです。PHP5.5をベースに仕様追加と削除が行われていて,途中から5.6ベースになっています。

Hackの特徴は,バグのないコードを迅速にかけるようにすること,エンジニアがコーディング体験を楽しめること,高速な動作や大規模開発向きの仕様が実装しやすいこと,これらの目的を持った言語であると紹介しました。

ただ最近は,Hackについて次のよう良く言われていると指摘しました。

  • Hackは昨年話題になったけど,とっくに下火で進化も止まっているのでは?
  • Hackは単純に「パフォーマンスの高いPHP」だよね?
  • PHPフレームワークやライブラリが使えず開発にコストがかかるだけでは?

大谷さんが某CTOに相談しに行った時には,Hackを本番環境で使うなんてクレイジーだぜ!と言われたそうです。

しかし結論はすべて誤解だったと話しました。

バージョンアップは早くて8週間に1回,バージョンが0.1づつ上がっていて,大谷さんが作り始めた時が3.4で,今は3.9とのこと。来週には3.10になります。バージョンごとに機能追加がとても多く,エキサイティングな言語だと言及しました。

なお,サポートは3バージョンに1つがLTSということで,約1年間サポートすることを約束されています。

最近のリリースにおける進化

最近のHackでは並列処理のために,型チェッカーの機能拡張,トランスレーション・キャッシュのメモリ改善,処理の高速化が行われています。⁠Hackがとっくに下火で進化も止まっている」というのは間違いで,今もすごいスピードで進化を続けていると述べました。

例えば,Hackが使われたことにより,Wikipediaは編集する際の速度が2倍に,boxはwebレスポンスが1/3に短縮し,wpengineはレスポンスのパフォーマンスが5.6倍になったことを挙げました。このように,Hack/HHVMはとても優れたパフォーマンスを発揮しています。

また,Facebookによる仕様追加が多く,⁠大規模サービス開発」向けの言語に仕上げている印象だと説明しました。

追加されている機能

Hackに追加されている機能として,次の事柄を挙げました。

  • 引数・戻り値の型指定できる。型の前に?をつけるとnullを許容するというサインになる。
  • Genericsの実装。
  • Hack独自の配列を実装していて,厳密な型やタイプを指定できる。そのため,格納する値に型の指定が可能だったり,Getメソッドを利用することでissetなしで値を取り出せる。
  • Enumの仕様が追加。
  • async,awaitという関数で並列処理ができる。
  • hh_clientを使うとコンパイラーエラーや戻り値のチェックなどの構文チェックが実行前に行える。

Hackは単純に「パフォーマンスの高いPHP」であるというのは間違いで,大規模開発に耐えられるように,多くの拡張がなされていると述べました。

なお,Hackではand,or,endforeach,goto,globals,break Nなどが非推奨の構文です。また,PHPソース中にHTMLを書くことはできません。

Hackを使ってサービスをリリースするまで

今回のサービスで採用している技術・構成は次のとおりだと紹介しました。

  • OS: CentOS7
  • Webサーバ: nginx1.9
  • DB: MariaDB10.0
  • インフラ管理: Ansible
  • web開発言語: Hack (hhvm3.7)
  • フレームワーク: FuelPHP1.7
  • バッチ開発言語: Go言語

なぜHackを使用したかについては,チームにPHPの経験者が多かったことと,そのノウハウを活かしながら新しいものがやりたかったことを挙げました。また,今は問題ないけど,将来大規模になった時にもパフォーマンスが良いほうがいいということや,サイズが大きくなったりソースが多くなってきたりした時に可読性がよく,スピーディーな改修ができるとともHackを使う要因として挙げました。ただ,開発が1年遅れていたらPHP7にしていた可能性があると述べていました。

Hackの採用は次のような覚悟を持って採用したそうです。

  • 最悪ダメだったらPHPに戻す
  • 前例がないからチャレンジしてみよう
  • 英語ネイティブのメンバーがいるから大丈夫
  • PHP7ではなくHACKが流行る未来を妄想

Hackの学習は,チュートリアルを進めることで仕様や使い方を学ぶことができたとのこと。

しかし,次のような問題点があったと指摘しました。

  • HHVMが落ることがある。なぜか落ちるので監視して自動再起動をしている。
  • peclが利用できないため,golangでextension記述している。
  • HackにはHack自体を拡張する機能を持っているが,スピード重視で今回は使用していない。
  • CentOS6サポートを急に停止したのでCentOS7へ急遽移行した。
  • コードフォーマッターがきちんとは使えないため,改造して使っている。
  • Hackと検索してもゲームの.hackが出てきてしまい,情報になかなかたどりつけない。情報もまだ少ない。

HHVMで動作するPHPのフレームワークの情報は公開されていて,主要なフレームワークは対応しています(現在27種類が100%対応済み)⁠今回はFuelPHPを採用したと言います。その理由は,社内での採用実績が豊富だったのが一番大きいとし,標準ライブラリが充実していてpeclが使えない部分を結構おぎなっていると説明しました。PHP5.3以上が推奨でHHVMと相性が良さそうでもあると述べていました。

画像

FuelPHPを採用して,次のような形で使っていると紹介しました。

  • DBアクセス部分に若干のコード追加をおこなっている。
  • テンプレートエンジンはSmartyを使用した。問題はおきていない。
  • index.php → index.hhに名前を変更した。FuelPHPは.phpで動いているがプロジェクトで使っているものは.hhを使っている。
  • プロジェクトで使用しているものは<?hhで開始するようにしている。
  • FuelPHPのソースを全部Hackに書きなおさないといけないと思っていたが,そんなことはなくFuelPHPのPHPの部分とプロジェクトのHackの部分はうまく共存して,いい感じで安定している。

また,開発の際には次のようなルールを設けて,記述の統一化,可読性のアップを実現しているそうです。

  • 定数はenumで作成。
  • ArrayではなくVector/Mapの積極的な利用。
  • タイプヒンティングは必ずつける。
  • hh_clientでコミット前の構文チェック実行。

hh_clientがあるおかげで,実行しなくても潜在的な不具合など見つけてくれるので助かっていると述べていました。

セキュリティについては,Dell Secure Works社に依頼して,監査してもらった結果Hack/hhmvに起因するリスクはゼロだったのこと。

今回Hackを採用して良かったこととして,次の事柄を上げました。

  • PHP経験のあるメンバーが早期習得でき,学習コストは掛からなかった。
  • 「新しいチャレンジ」しているのでメンバーは活き活きとしてコードを書いている。
  • PHPだけを書いていたメンバーはいろいろな書き方を知ることでスキルの幅が広がり,PHP以外の言語への興味が出てきた。

「PHPフレームワークやライブラリが使えず開発にコストがかかる」ということはなく,PHPで培った資産を活かしながら,様々なメリットを活用して開発ができると,まとめました。

まとめ

最後に,Hackはとてもホットな言語なので皆さんも是非試してみてほしいとし,⁠Hack言語に出会って,PHPの今後に大きな可能性を感じました。PHP7のリリースも控えており,PHPのこれからがとても楽しみです」と述べていました。

著者プロフィール

大橋勇希(おおはしゆうき)

東京都渋谷区在住。Webアプリケーションエンジニアで,主な使用言語はPHP。最近は,TDD(テスト駆動開発)やDDD(ドメイン駆動設計)に取り組みエッセンスを吸収している。

Twitter:@secret_hamuhamu URLhttp://hamuhamu.hatenablog.jp/


柏原幸治(かしわばらこうじ)

東京都豊島区在住。仕事はブラウザーゲームのバックエンドをPHPで開発している。他の言語もいろいろいじるが,一番長く使ってるPHPが一番使いやすい。

Twitter:@noah0x00
Facebook:https://www.facebook.com/koji.kashiwabara


菅原のびすけ(すがわらのびすけ)

株式会社LIG エンジニア。1989年生まれ。岩手県立大学在籍時にITベンチャー企業の役員を務める。同大学院を卒業後,株式会社LIGにWebエンジニアとして入社し,Web制作に携わる。最近は特にIoT領域,インタラクティブな企画実装などに従事している。

マッシュアップアワードを始めとしたハッカソン等で入賞歴あり。家賃0円クリエイターズシェアハウス第1期生。ジーズアカデミー第1期メンター。LIGinc,HTML5Experts.jp,さくらのナレッジ,gihyo.jpなどでも執筆・寄稿をしている。Milkcocoaエバンジェリスト,特技はわんこそば,趣味は雪合戦。

Twitter:@n0bisuke

LIGincプロフィール:http://liginc.co.jp/member/member_detail?user=nobisuke


中村慎吾(なかむらしんご)

仕事でPHPを使うようになって10数年。楽しい事には何でもやってみるスタイル。趣味が講じて(拗らせて?)会社も作りました。Web開発となるとPHPは手放せません。

Twitter:@n416
URLhttp://kisaragi-system.co.jp


仁多見遼(にたみりょう)

岩手県立大学大学院 ソフトウェア情報学研究科 2年。主にAndroidアプリ開発をしているが,2016年4月から東京でWebエンジニアとして働くことになり,PHPやJavaScriptを書き始めた。いろんなイベントに参加したり,自身でハッカソンを主催するなどイベントが大好きな人。

Twitter:@bird_nitryn
URLhttp://rnita.me

バックナンバー

PHPカンファレンス2015 スペシャルレポート