PHP カンファレンス 2007 レポート
2007-09-01 に PHP カンファレンスが大田区産業プラザ (PiO) で行なわれました。
自分が見たプログラムの内容をメモしておいたので簡単にまとめます。また、まとめながら調べたことも一緒に記述しています。
なお、間違いがあるかもしれませんが、その際は教えていただけるとありがたいです。
- PHPカンファレンス2007プログラム概要
http://www.php.gr.jp/seminar/20070901/prog.php
1. 基調講演「PHP の今とこれから 2007」
PHP 4.3/4.4 の利用率は 75% 程度
PHP 5 について
- 移行のポイント
- クラスに関する部分
- E_STRICT によるチェック
- zend.ze1_compatibility_mode = Off
- 下位互換性のない変更点
PHP 5.2 について
PHP 5.3 について
- 本来は予定にはなかった
- 2008/01 以降にリリースか?
- PHP 6 までのつなぎのバージョン
- Unicode サポート以外の新機能が入るかもしれない
- ICU (国際化) 拡張
- IBM が開発している国際化用のライブラリ
- OpenSSL で OpenID がサポートされる
- 名前空間も?
PHP 4.4/5.1/5.2/6.0 のベンチマーク
- php-5.x.x/Zend/bench.php を使用
- PHP 5.2 が今のところ一番早い
セキュリティーについて
- Suhosin パッチ
- the Month of PHP Bugs (MOPB)
- Spike ? (セキュリティ監査ツール): メモがいい加減で不確か。。。
- PEAR 2.0
- 2008/01 リリース予定
- 新インストーラ「Pyrus」
- PHP 5.2 以降のみをサポート
PHP 6.0 について
- Unicode 対応
- ICU 3.4 をエンジンとする
- 内部的には UTF-16
- echo strlen('日本語'); // -> 3
- mbstring は不要になるか? (微妙な状況)
- エンコードの検知の精度がまだ低い
- レガシーコードの削除
- register_globals
- magic_quotes_*
- safe_mode
- zend.ze1_compatibility_mode
- MySQLND (MySQL Native Driver)
- libmysql の代替ライブラリ
- PHP 5/6 をサポート (PHP 6.0 には標準バンドル。PHP 5.3 にも?)
- MySQL 4.1 以上をサポート
- 新しいガベージコレクタ
- Cycle Collection
- リファレンスカウンティング + サイクル検知
Namespace (名前空間)
2. 大規模サイトの構築・運用ノウハウ (仮題)
- ウノウ、GREE の CTO 対談
- サーバマシンは統一する
- テーブルは JOIN しない
ウノウの場合
- 資料
- Software Design 10 月号にいくつか書いた
- ベンチャー流サーバ構築のススメ(ハードウェア編)
- ベンチャー流サーバ構築のススメ(ソフトウェア編)
- セッションは DB へ
- PEAR HTTP_Session を使うと楽
- 更新系と参照系のクエリを分ける
- DB 分割ができるように JOIN は使わない
- コードキャッシュ
- 最適化
- プロファイラ
- ベンチマーク
- サービスの始め方
- 小さく始める (1, 2 人、1 台、1, 2 か月くらい)
- 少しずつ拡張
- 時には大きく方向変換・あきらめも大事
- 本番機への投入は svn update
GREE の場合
- スライド中に「GREE に入りたい」のサブリミナル効果
- ページビュー、サーバ台数、ユーザ数など (非公開っぽいので省略)
- フレームワークはもちろん Ethna
- TEXT を外に出す
+-----+----------+
| UID | 名前 |
+-----+----------+
| 7 | すなおか |
+-----+----------+
↑
↓
+----+-----+-------------+
| ID | UID | 内容 (TEXT) |
+----+-----+-------------+
| 1 | 7 | ほげほげ... |
+----+-----+-------------+
- テーブル (DB) を分割する
+----+-----+---------+
+-----+----------------+ | ID | UID | 内容 |
| UID | パーティション | +----+-----+---------+
+-----+----------------+ | 1 | 7 | ... |
| 7 | 1 | → +----+-----+---------+
+-----+----------------+
| 9 | 2 | → +----+-----+---------+
+-----+----------------+ | ID | UID | 内容 |
+----+-----+---------+
| 2 | 9 | ... |
+----+-----+---------+
- JOIN しない
- 正規化がんばらない
- 本番機への投入は rsync
3. PHP Framework Update
symfony
- ohloh によるとコード量は他のフレームワークより多いほう (だったかな)
- プラグインという仕組みが特長的
- インストールは簡単
- $ symfony plugin-install http://plugins.symfony-project.com/...
- sfZendPlugin
- Zend Framework を使うためのプラグイン
- Blog、CMS、Forum を構築するプラグイン
- The Definitive Guide to symfony
- 間もなく 1.1 のベータリリース
CakePHP
- CakePHP の解説がある本が 3 冊ある。
- @nifty のトピックイットも CakePHP 製
- デモ
- CakePHP 1.2.x 設置のデモ
- scaffold のデモ
- CakePHP 1.2 の特長
- 強化された validation
- 組み込みのページング処理
- 年内に正式版がリリースか?
- 本が出ます!
- CakePHP ガイドブック
- 毎日コミュニケーションズ
Piece Framework
- ステートフルでセキュアな Web アプリケーションフレームワーク
- 個別のライブラリだけを使用することもできる
- Piece IDE のデモ (現在は Eclipse のプラグイン)
- ウィザード式の画面がビジュアルに作成できる (楽しい)
- 出力は YAML
Ethna
- 今後の方向性
- いろいろ直したいところとか
4. PHP at Yahoo!
- 資料
- 2005 年の PHP at Yahoo!と大体同じ。
- 2007 年の phpDay (日本語の情報) かも。
- ただし、日本独自の情報もあり。
- 現在は PHP がメインの Web 開発言語
Y! について
- 13 億 3800 万ページビュー
- 1960 万アクティブユーザ ID
- 2007/08 現在 140 サービス
Y! と PHP の関係
- PHP 界隈で有名な人が在籍
- Rasmus Lerdorf (PHP を作った人)
- Sara Golemon (runkit、Extending And Embedding PHP とか書いてる人)
- Dustin Whittle (symfony エバンジェリスト)
- PHP のバグはまず Y! 社内にレポートされる (PHP に独自のパッチを当てているため)
- 当初は FreeBSD 2.1 上の独自システムで構築
- Web サーバ: Filo Server -> Apache (1996 年)
- DB: フラットファイル -> MySQL (1998 年)
- yScript -> PHP (2002 年)
- Oracle も使うよ
- FreeBSD、Apache、PHP には独自のパッチを当てている
- C++ で書かれたライブラリを PHP 拡張から呼び出す
- 日本ではフロントエンドはほとんどが PHP
なぜ PHP を採用したか
- Web 用の言語
- 高いパフォーマンス
- 大きなコミュニティ
- ライブラリが充実している、拡張性がある
- ツールが豊富 (IDE、プロファイラ、デバッガ)
- トレーニングコストが低い
現在の PHP
- フレームワークはほとんど使っていない
- HTML ページ: 5% PHP
- ヘルパー (ヘッダ出力など): 50% PHP
- ビジネスロジック: 100% PHP
- コア: C/C++
- PHP は最低限でビルド
$ ./configure --disable-all
- 必要なモジュールは共有モジュールとしてインストール
- 不必要な依存性を下げる
- メモリの使用量を下げる
- 再コンパイルが不要
- しかし、Apache 起動時に若干のオーバーヘッドが
PHP 5 への移行について
- 日本では 4.4 系がメイン
- 2007 年末までに 5 系へ
- 2008 年には 5.2 系へ移行する
セキュリティについて
- 開発ルール・プラットフォームの整備による開発
- Scanmus
- Rasmus が開発した XSS 検出ツール
- open_basedir を設定
- allow_url_fopen = Off、allow_url_include = Off
- 必要があれば libcurl を利用
- safe_mode = Off
- display_errors = Off
- しかし log_errors = On でログには残す
- error_reporting = E_ALL
- ユーザからの入力値はフィルタリングする
- PHP 5.2.0 からのフィルタ拡張を利用する
- Y! から PHP コミュニティに還元した拡張
- Y! 社内では PHP 4 でも利用できるように PHP 自体にパッチを当てている
- CSRF 対策は Crumb (セッション追跡用の秘密情報) を利用
パフォーマンス
- APC を利用 (Rasmus が携わっているため)
- xdebug + WinCacheGrind・KCacheGrind
- PHP 拡張の開発
- C/C++ に PHP を埋め込んで利用することも (Web アプリではない)
- セッションの利用を避ける
- Cookie を利用して画面遷移に必要な情報は POST で (hidden) で埋め込む
- r3 (テンプレート管理ツール) を開発
- 日本語の解説がある (どこだろう?)
- OSS のフレームワークのはあまり利用しない
- 汎用的すぎてパフォーマンスに問題があるので
- 実装はエンジニアに委ねる
- プロダクトに特化した独自のフレームワークを利用している場合も
- トップページ専用の CMS とか
- Smarty はオーバーヘッドが Y! では無視できないので利用しない
- symfony は使い始めた
- Yahoo! Bookmarks
- del.icio.us
- Yahoo! Answers (Yahoo! 知恵袋)
- いろいろカスタマイズしている
- CakePHP
- 検討中
- ただし、利用実績も予定もなし
まとめ
- 5 年ほど PHP を使っている
- いろいろカスタマイズしている
- PHP 拡張を多用している
- OSS のフレームワークはあまり使っていない
- symfony は使い始めた
- IDE は使っていない
- CVS を使っている
5. ライトニングトーク
- 人が多すぎで 6F から 2F に移動
モバイル開発における PHP の利用方法と Tips
- 資料
- 携帯サイトと PC サイトの違い
- PEAR Net_UserAgent_Mobile
- 文字コード
- sjis-win、eucjp-win を利用する
- DB は cp932
- 絵文字
- Cookie は使えない
Usagi Project
- OpenPNE 2.4系の派生プロジェクト
- PHP ライセンス
- いっしょに開発しませんか
PEAR DB_DataObject 開発ケーススタディ
- DB をまたぐテーブルの結合をサポートした
- テスト重要
PHP で画像処理をしてモテようかなと思って
- 画像処理はモテるのか (モテない)
- MagickWand For PHP (PHP 4)
- imagick2 (PHP 5)
PHP プログラマのための恋愛術
- ふつうに恋愛論
- PHP の話は出ない
code なにがしについて
- 資料
- ググれといわれない場を
- みんな優しい
ケータイキット for Smarty について
- モバイルサイトに特化した Smarty
- モバイルサイト開発の問題点を解消
- 個人利用は無償
PHP でシェルを作る
- /dev/null T シャツ
- PHP で書かれた phsh を開発
- もうじき公開? -> 公開されました
- ログインシェルにもできる
- eval で処理してるっぽい
- シェルは偉大
6. スペシャルセッション
- Piece IDE のデモのリベンジ
- 基調講演の続き
- 開発体制
- ユーザ会など
以上、大雑把ですがまとめてみました。講師のみなさんありがとうございました。
懇親会にも出席していろいろな方と名刺交換・お話ができて充実した一日でした。
最後に戦利品です。
1. Yahoo! JAPAN さんに頂いたメモパッド
2. Asial さんに頂いた時計
3. アイデアマンズさんに頂いた LED