PHP カンファレンス 2010 テックデイ 私的不完全議事録 【phpcon2010】

9 月 25 日(土)、東京都大田区産業プラザ PiO にて開かれた「PHP カンファレンス 2010 テックデイ」の私的な議事録です。

すべての発言やスライドの文章を拾ってはいません。また、言い回しも再現していません。特に「[T-3] フレームワークアップデート LT」については取りこぼしが多いと思いますので、参考程度にご利用ください。もし明らかにおかしな場所があれば、コメント欄やブックマークコメントなどで教えてください。



[T-2] 基調講演「PHP Then and Now」 (Rasmus Lerdorf 氏)


  • 1993 年、すべては Mosaic を見た時に始まった
  • このとき、自分のやっていることを初めて母親に説明できるようになった
  • 当時カナダに住んでいた。本国デンマークから新聞を 1 週間遅れで送ってもらっていたが、すぐ読めるようになった
  • 1993 年当時は HTML はとてもシンプルだった。タグは大文字
  • しかし HTML にデータベース接続やロジックなどを記述したかった
  • これ(スライド 3 ページ)が初期のPHP
  • コンパイラに関する本を読み、PHP バージョン 1 を作った
  • 1995 年の時点で、基本的な PHP の構文が確立された。ただ、いくつかの違いがある。たとえば中カッコがない。またオブジェクト指向ではなく手続き型
  • 10 年が経ち、同じコードがこのような(スライド 5 ページ)形になる。スクリプトも少し長くなっている
  • 現在の最新の 5.3.3 はほぼ 1 ヶ月前にリリースされた
  • いくつかの機能が追加されている。まだ 4 を使っている人はぜひアップデートしてほしい。現在は 4 を走らせるべきではない
  • 5 が出てから 8 年ほど経っている。4 より 5 のほうがはるかに速く、5.2 に比べて 5.3 のほうが速い

5.3.3 の話

  • 5.3.3 では、エンジン内のスタックが改善されている
  • 定数を使うと、定数専用のメモリが割り当てられる
  • 例外処理についても、シンプルになり、高速化されている
  • また、gcc4 をうまく活用することで、バイナリサイズを削減。起動も高速化
  • マイクロソフトの協力で、Windows 版の PHP は 40% の速度向上が実現
  • md5() 関数が 10〜15% 高速化、全体で 5〜15% の高速化
  • 私が最も気に入っているのが、クロージャだ(スライド 8 ページ)
    • 数字の列を、偶数を先に、奇数を後に、それぞれソートする例
    • 変数のスコープをカプセル化する例
  • 5.3 のもうひとつの目玉、ネームスペース
    • namespace foo;foo 名前空間を宣言
    • use foo\bar as b; のようにエイリアスも指定できる
    • ほかの 1 文字はすべて使われているので、\ を使った。ひょっとして日本語を使ったほうがよかったのかな(会場笑い)
    • 5.3.3 では namespace のバグフィックスもされている。クラス名と同じメソッド名は、5.3.0〜5.3.2 まではコンストラクタとして、5.3.3 では一般のメソッドとして扱われる
  • もっとも説明が複雑なのが、遅延スタティックバインディング(LSB)
    • self::who(); は通常のクラス解決、static::who() が LSB
    • 一般のユーザーは気にする必要はないが、フレームワークの実装などでは利用することになるだろう
  • ガベージコレクション
    • もともと PHP にはガベージコレクタはなく、参照カウンタしかなかった
    • 長い時間実行されるスクリプトでメモリのクリーンアップのために導入
    • gc_enable() 関数など
  • NOWDOC (ヒアドキュメントのシングルクオート版)
    • echo <<<'EOB'
  • goto
    • 議論の的になる。毛嫌いしている人もいる
    • goto end;end: ラベルに飛ぶ。ループからの脱出にのみ使える。ループに飛び込むような使い方はできないようになっている
  • 三項演算子のショートカット

    • echo true ?: 'foo' → 条件が true のときは 2 番目の要素は省略できる
  • dirname(__FILE__) の代わりに __DIR__ が使える
  • __callStatic
    • __call() の代わりだが、スタティックメソッド用
  • スタティックメソッドに対して dynamic call 許可
  • 日付の操作
    • DateInterval/DatePeriod
      • 'third tuesday of next month' のような指定で日付を求めることができる
    • date_create_from_format() 関数
    • 日付のパース時のエラー報告を改善
      • new DateTime('Nov 33, 2011') など、コンストラクタでエラーになると例外が発生
  • SPL
  • FPM(FactCGI Process Manager)
    • FPM が PHP に実装された
    • php.ini に記述する
    • Apache と組み合わせても、単独でも、同様の機能を使えるようになった
  • OpenSSL の改善

質疑応答

  • 初期の PHPPerl で実装されていたらしいが、そのコードを見ることはできるか?

    →私自身ソースコードはもう持っていない。http://museum.php.net/php1/ に上がっているものを懐古主義の方にはおすすめしたい
  • 今後の文字コードの扱いについて教えてほしい

    →PHP6 で UNICODE を採用しようとしたが、非常に困難だった。あまりにも大きな変更をあまりにも迅速に要求したために、デベロッパーから反感を買ってしまった。そこで、一歩戻って、小さなステップで進めようということになった。最終的には PHP6 で目指した所へ行くと思うが、変化は緩やかだと思う
  • 月末をリストするような機能はあるか

    →ちょっとお待ちください(とコードを書き始める)。echo date("r", strtotime("last day of this month"); 動いているようですね(会場爆笑)

[T-3] フレームワークアップデート LT


CakePHP


  • コアチームの 3 人が語る CakePHP の今後
  • マークはリードデベロッパーになって変わった?→仕事は増えたよ。チケットでテストケースを訪ねたり、バグの再現方法を確認したり。チケット登録する時も「何かおかしいよ」だけで十分。そうすれば他の誰かが「これでいいよ」って言ってくれたり、バグを直してくれたり。
  • CakePHP には次にどんな変化が?→今はリファクタリング中。少しずつコードを整理している。SimpleTest から PHPUnit への移行を次のリリースで取り入れることになった
  • PHP4 の処理の削除。パフォーマンス改善と最適化にもなる
  • 長い間手がつけられなかった所を作り直してリフレッシュするいい機会
  • 動作は速くなると思う
  • PHP 5 専用にして PHP 4 の処理を取り除き、レイトバインディングなどを導入。テスト環境では 30% 速くなった
  • 例外処理、DI コンテナの導入


Lithium


  • Lithium とは?→2 年前に開発が始まったフレームワーク。去年公開。PHP 5.3 専用。PHP 5.3 の機能をふんだんに使った
  • CakePHP などを下敷きにしたフレームワーク。開発を助けるような新しい要素を淹れて、もっとよいフレームワークを作ろうとしている
  • 何をすればいい?→ダウンロード。チュートリアルがある。ブログ、認証、フィルターなどを使ってフォトブログを作るチュートリアル。写真にジオタグをつけることも
  • アスペクト志向プログラミングを取り入れている?→キャッシュがいい例だ。一貫性のあるキャッシュコントロールが可能に
  • ドキュメント翻訳システムは?→いろんな人がチュートリアルを書けるように。API ドキュメントもいろんな人が書けるように
  • まだ若いフレームワーク。バージョン 1.0 になっていない。いくつかのスタートアップが使っている。細かい部分を正しくするのに時間がかかっていて 1.0 になっていない
  • 正式リリース時にはドキュメントもリリース?→その予定。ひととおりのドキュメントがあって、新しいデベロッパーが使い方を学べる必要がある。安定版になる前の状態で覚えてほしくないのでドキュメントをつけていない
  • Nate Joel は PHPmatsuri にも来日


Ethna

  • もともと GREE のふじもと氏が作って公開(2004 年)
  • Struts 世代のアーキテクチャMVC(Ruby on Rails 以前からある)
  • 2000万 ユーザくらいは耐えられる
  • 2009/10/18 2.5.0 stable リリース
    • 2.3.0 から約 2 年半ぶりのメジャーバージョンアップ
    • PHP 4、PHP 5.2 をサポートする最後のバージョン
    • 2.5.0 preview 5 からいくつかの機能をバックポート
  • 2.5.0 stable リリースの経緯
  • 2.5.0 特徴
    • UTF-8
    • 国際化対応
    • ActionFrom
      • 多次元配列
      • 動的フォーム API
  • 2.5.0 preview 6 (unreleased)
  • 3.0
  • 公式マスコットえすにゃん登場
  • 夏コミ・同人誌に登場
  • えすにゃん一色の一年──冗談です
  • 構想を練る年だったかな。3.0 に期待してください


rhaco

  • rhaco を知っていますか? (→たくさんいて感激)
  • 「No trunk, no rhaco.」「3 時間前? 何そのジュラ紀?」などという言葉があるほど変化の早いフレームワークだった
  • 最近は安定しています。ご安心ください
    • ブラウザーからセットアップできる
    • ライブラリがたくさん入ってる
    • PHP 4 対応
  • →忘れてください
  • rhaco → rhaco2
  • why "rhaco?"
  • Object.php というコードがある。これを一度使うとやめられない
    • テンプレートの継承
    • DocTest (ドキュメントの形式でテストが書かれている)
  • 続きは Lingr で。room: rhaco_ja


Agavi

  • Symfony の兄貴に当たるフレームワーク
  • http://www.agavi.org/ に説明が
  • HTTP 専用じゃない! テンプレートエンジンや O/R マッパーは選ばない!
  • とにかく高品質! 開発は遅い
  • ドイツの BItextender 社で開発。David Zülke 氏がチーフデベロッパ
  • マイナーアップデート 1.0.4
    • IIS 7 + SQL Server サポート
    • Windows Azure Platform サポート
    • XSLT レンダラのサポート
      • XML HTTP API からの戻り値の表示に便利!
    • FormPopulationFilter の XML モード(xhtml用)で &nbsp; が使えるように
    • 例外処理の例外連結(PHP 5.3〜)サポート
  • メジャーアップデート 1.1
    • 認証レイヤー追加
    • HipHop PHP のサポート
    • Windows Azure Platform サポートの向上
    • ストレージサブシステム機能追加
      • キャッシュやセッションなどで用いる
      • KVS の統一インターフェイス
        • memcache、filesystem、PHP セッション、RDB、other NoSQL……
    • Response クラスへの Attribute 追加


CodeIgniter


  • 世界第 2 位の PHP フレームワーク(今年第 2 位になった)→Google トレンド
  • Big Wave が来ます
  • MOONGIFT で CodeIgniter ベースのアプリがよく紹介されるようになった
    • 日本製アプリの Seezoo など
    • CodeIgniter の日本語解説本『CodeIgniter 徹底入門』(売上前年比 75% アップ)、ただし絶版の危機
  • CodeIgniter Con 単独イベント 2 日間、The ExpressionEngine and CodeIgniter Conference
  • 2011/2/19、CodeIgniter Con 2011 Tokyo Japan (スポンサー募集)
  • 特徴
    • 軽い、速い
    • 習得が簡単
    • 拡張が用意
  • 2009/9/11 1.7.2 リリース
    • PHP 5.3 対応
    • 1.7系最後
  • 2.0 開発中(リリース時期未定)
    • Driver と呼ばれる特殊なクラスの追加
    • JavaScript クラスの追加
    • セキュリティクラスの追加
      • 自動CFRS対策機能
    • PHP4 サポート廃止


Zend Framework


  • 新たに Zend Framework を元にした Web アプリを作る場合、1.8 を参考にしたほうがいい
  • Zend Framework のマイナーバージョンアップの場合、コンポーネントの追加はあっても、挙動が変わったり削除されたりということは基本的にはない
  • 2010/8/25 1.10.8
  • 1.10
  • Zend Framework をアップデートさせるためには?
    • バグ報告
    • コミッターになる
    • マニュアルのアップデート
  • 今後
    • 1.11 リリース予定
    • 1 系統はあともうちょっとだけ続く


Symfony


  • 日本 Symfony ユーザー会
    • 6/1 に設立
    • 次回 IRC ミーティングは 9/26 21:00〜23:00
  • Symfony 1.3/1.4
    • 2009/12/1 同時リリース
    • 1.3: 互換性を残したバージョン
    • 1.4: 互換性を切り捨てたバージョン
  • Symfony2
    • PHP 5.3.2 以上
    • 実装内容の大幅な変更
  • HttpKernel
  • HTTP accelerator
    • Request に対して Response をキャッシュ
    • 1.4 の 80 倍にも
  • Component/Bundle
  • DI コンテナ
  • Profiler
    • リクエストのプロファイリング
  • Symfony2 の改善点
    • 速度・拡張性/柔軟性
    • Component を部分的に利用可能
    • 他のフレームワークとの親和性の向上
  • リリース時期
    • PreviewRelease3
    • 近々 α1
    • 2011/03 stable リリース予定
  • コミッター募集


[T-4] HipHop for PHP (Scott Macvicar 氏)

  • みんなは Facebook で何をしているのか?
    • 80 億分以上を Facebook で費やしている
    • 50 億以上のコンテンツを共有
    • 30 億もの写真が毎月アップロードされている
    • API で 100 万人もの開発者が繋がっている
  • これらがスケーリングの課題をもたらしている
  • 従来のウェブサイトなら、ひとつのサーバーに各ユーザーのデータが格納されている
  • これに対し、Facebook は構造が違う。非常に複雑なデータのリンクが張られている
  • 各ページが友人、友人の友人へとリンクしているので、単一サーバーにデータを入れられない。しかも迅速にデータを取り出す必要がある
  • 5 億ものユニークなホームページがある。ひとりのユーザーのひとつのページでも、何千ものデータを引っ張ってくることもある
  • Load Balancer→Web Server→{Services / Memcached / Databases}
  • 今日は PHP のレイヤーに焦点を当てて話をする
  • 従来の PHP ではスケーラビリティに課題があった
    1. CPU 使用率が高くなることがある
    2. メモリ使用量が多い
      • C++ で 16bytes の Integer が、PHP では 144bytes
    3. PHP ロジックの他言語での再利用
    4. 多くの PHP 開発者にとって、エクステンション作成のハードルが高い
      • C++ の優れたエンジニアを見つけるのも難しい
  • これらの問題を解決するため、過去 2 年間、「HipHop for PHP」というプロジェクトを実施してきた
  • HipHopPHP コードを高度に最適化された C++ コードに変換するもの
  • 動作原理
    1. コードの変換
      • 変換時に最適化を図る
      • 3 つのステップを踏む
        1. 静的な解析
        2. 型の推定 (Type Inference)
          • 途中で型が変更されていれば Variant
        3. コード生成
      • Parser→Static Analyzer→Pre-Optimizer→TYpe Inference Engine→Post-Optimizer→Code Generator→g++
    2. ランタイム
      • マニュアルで生成
      • PHP 5.3 のものと HipHop のものを比較すると、後者のほうが圧倒的にシンプル
  • HipHop によるプログラミングでは、一部の PHP コードを書き直す必要がある
    • 動的コーディング
      • eval()/create_function()
      • preg_replace()/e を使う
      • dynamic define - define($var, 'value')
    • Order-dependent symbol lookups: function, class, constant
  • HPHPi - 実験的なインタープリター
    • eval() もサポート
  • HipHop のデプロイ
    • 毎日 1 回、バイナリを作成
    • ひとつのプロセスとして実行
      • クラッシュするとサーバーも落ちてしまうという欠点も
    • サーバーの再起動は不要
    • 現状では、専用のとてもシンプルなウェブサーバーで使用中
  • 今年の 2 月にオープンソース化された。http://facebook.com/opensource も参照
    • Facebook として、オープンソースであることはとても重要
  • オープンソース版の HipHop では、APC や OpenSSL など、多くのエクステンションに対応
  • Facebook エクステンションは fb_thrift_serialize()fb_thrift_unserialize()fb_parallel_query()fb_unf8ize()fb_rename_function() の 5 つを追加
  • (デモ──ランタイムの速度比較。PHP 4.000秒、HipHop 1.118秒。実際の実装では 2 倍程度になる)

質疑応答

  • LLVM ではなく C++ にした理由は?

    開発当時は LLVM があまり安定していなかったのでこのようなアプローチを取った
  • HipHop ができてから半年で 90% のトラフィックを捌くようになったと聞くが?

    →デベロッパーを HipHop に移して、HipHop に集中させるようにした。モチベーションを高める上では役に立った
  • ウェブサーバー高速化について。サーバーの台数を削減したり、既存の効率的に使えるような効果は期待できるか?

    →おっしゃるとおりの効果が期待できる
  • OS はCent OS、Fedora で開発していると聞くが、最新のサポート状況は?

    →Cent OS、Gentoo 64bit 版、FreeBSD をサポートしている
  • HipHop を使うことによってコード高速化が図れるが、HipHop を使う前に PHP コードを最適化しておく必要性はあるか?

    →我々ではできる限りの最適化を図っているので、次のステップとして HipHop が登場した。一般ユーザーについては HipHop を使う前に自分で最適化を行うのは大切
  • クロージャサポートは?

    →クロージャはコンパイル時に決定できないので、サポートされない


[T-5] Microsoft ♥ PHP 〜 2nd Stage 〜 WebMatrix 登場! (奥主 洋氏・物江 修氏)


自己紹介

  • マイクロソフト エバンジェリスト

あれ、1st Stage は何?

PHP の動作環境として

  • OS: WIndows と Web サーバー: IIS
  • IIS 用に FastCGI モジュールを提供
    • 安全に、高速に PHP を動作させる Windows 上の推奨環境
  • MS 製の PHP アクセラレーターの提供
    • WinCache Extension for PHP 1.1
  • PHP の FastCGI 設定をもっと簡単に
    • PHP Manager (現在ベータ版) New!
      • IIS の設定ツール内で PHP のバージョンを切り替えられる

MS SQL Server との接続性

  • php_mssql.dll ではない PHP 拡張
  • MS SQL 開発チームが開発、ソース公開
  • http://sqlsrvphp.codeplex.com/
  • バージョン 1.1 から UTF-8 対応
  • Windows - ODBC - php_sqlsrv - PHP アプリ
  • v2.0 から PDOにも対応
  • Microsoft Drivers for PHP for SQL Server
  • Windows - ODBC - php_sqlsrv - PDO - PHP アプリ

OSS の動作環境として

  • OSS をもっと容易に Windows 上で構築
  • バイナリの維持はそのままコミュニティで
  • OSS のカタログ
    • Windows Web アプリケーションギャラリー
  • このカタログに基づいたインストーラー
    • Web Platform Installer v2.0

対応オープンソース Web アプリケーション

  • 30 以上のオープンソース Web アプリが登録済み
    • WordPress 日本語版パッケージ
    • XOOPS Cube Legacy
    • SugarCRM 日本語版パッケージ
    • EC-CUBE

愛称

  • Web Platform Installer →Web PI→「うぇぶ・ぴー・あい」と呼んでください

それでは 2nd Stage──WebMatrix

  • アプリのインストールをはじめとしたWebサイトの構築ツール

機能

  • Site──Webサイトの管理 (Webサーバー)
  • File──コンテンツ作成・編集 (テキストエディター)
  • Databases──データベースの管理・作成 (GUIクライアントツール)
  • Reports──SEO分析 (SEOレポートツール)


デモの内容

  • WordPress のインストール
  • エディター画面と PHP コードの実行
  • MySQL データベースの編集
  • SEO レポート
  • 配置機能

デモの流れ

  • デモ機は Windows XP、IIS なし環境
  • WordPress セットアップデモ
  • IIS Express がウェブサイトをホストする
  • 80 番ポートを使っていないのは、他のウェブサーバーがいるかもしれないため
  • 左上の Requests をクリック→アクセスログ
  • 左上の Settings をクリック→ポート番号などの設定
  • 左下の Files をクリック→テキストエディタ。PHP のソースを色分けハイライト表示
  • 左下の Databases をクリック→データベースのテーブル一覧やデータの内容を表示、クエリも実行化。select 文でテーブルを表示、その結果を編集してデータを書き換えられる
  • Site From Templates からサイトを作る。テンプレートは ASP.NET 用なので、PHP では「Empty Site」から作成
  • File→New→PHP をクリックすると、PHP コードを作成できる
  • 「Run」ボタンの▼をクリックすると、インストールされているブラウザを選んで実行できる。デフォルトは Internet Explorer です。当たり前です!(会場爆笑、拍手)
  • WebMatrix で提供するのは Microsoft-IIS/7.5。IIS が持っている機能のほぼ全てを利用できる
  • phpinfo() で PDO drivers を見ると、sqlsrv が enabled になっていることが分かる
  • 左下の Reports をクリック→「Run an SEO Report for your site」をクリック→SEO として何がよくないかを解析してくれる(例: h1 タグがない)。View more details... をクリックすると、Details と Recommended Action を表示してくれる
  • 上部の「Publish...」をクリック。ウェブサーバーにアップロードするための画面に。FTP、FTP/SSL、Web Deploy から選択可能。Web Deploy は IIS で利用化
  • Server、Site Root、Username、Password、Destination URL などを指定して公開
  • 公開先がまだ用意できていない場合、Publish の下位メニュー「Find Web Hosting...」で、ウェブホスティングのサービスに直接アクセスできる(現在は米国のサービスのみ)

まとめ

  • PHP と Windows──Web PI
  • PHP と SQL Server──WebMatrix
  • http://www.microsoft.com/web
    • Web PI ダウンロード
    • Web プラットフォームの紹介
    • プログラム紹介
    • ホスティング情報
  • 日本語オープンソース Web アプリケーション募集! 開発者、コミュニティの皆さまのご登録をお待ちしています

質疑応答

  • エディターは?

    →本当にシンプルなテキストエディター
  • 対応している SQL Server のバージョンは?

    →2005 と 2008
  • SEO レポートについて

    →IISのアドオンになっている。http://www.iis.net/ で提供されている
  • 作成したサイトはこのままインターネット上に公開してもいいものなのか?

    →大丈夫。WebMatrix はあくまでも作成ツール

[T-6] 文字コードに起因する脆弱性とその対策 (徳丸 浩氏)

(準備中。29 日に公開予定)

[T-7] PHP ストリーム概説 (hnw 氏)

(準備中。29 日に公開予定)

[T-8] 新潟アクセス修飾子のご提案 (rti 氏)

(準備中。29 日に公開予定)

[T-9] PHP の中の人によるパネルディスカッション

(準備中。29 日に公開予定)