PHPカンファレンス2008 レポート

PHPでつくるぐるなび

このセッションでは、佐藤史彦氏による,飲食店検索サイト「ぐるなび」でのPHPの活用事例と今後の展望についての紹介があった。

ぐるなびの現状

PHPでつくるぐるなび

飲食店検索サイト「ぐるなび」は1996年に開設され、総掲載店舗数50万店(2008年3月現在)、詳細情報掲載店舗数62000店以上(2008年3月現在)、アクセス数7億2千万PV/月(ぐるなび全体、2007年12月現在)、会員数588万人(2008年4月5日現在)の巨大なWebサイトである。

ぐるなびのアプリケーション構成の歴史

初代ぐるなび(第一世代:1996~2002年)は、Windows + IISサーバ上で動き、静的なHTMLを手動で作成し公開するという、かなりシンプルなシステムであった。

第二世代(2002年~2004年)に全面的なリニューアルを行い、このときにPHPを初めとしたオープンソースを採用した。例えば、管理側やユーザー側のUIをPHPで実装し、店舗データをPostgreSQLデータベースに格納し、WebサーバとしてはLinux+Apacheを採用した。

その後、増え続けるデータ容量に対し、データベースそのものの検索では十分なパフォーマンスが得られなくなったためリニューアルを行った。第三世代(2004年~2007年)では、検索の充実をはかるため、検索用システムに全文検索エンジンとインデックス付けにMySQLを採用した。

現在も使用している第四世代(2007年~)では、店舗用データベースのPostgreSQLで発生する問題を解消するために、店舗データベースにOracleを、データ共有にXMLを採用した。

ぐるなびでPHPを採用した理由 - フロントエンドの軽量な実装など

PHPでつくるぐるなび

2002年当時、ぐるなびでPHPを導入した理由として、主に以下の理由が挙げられる。

  • 動的スクリプト言語
  • フロントエンドの軽量な実装
  • 日本語の取扱いやすさ
  • 導入コストの低さ

また、PHPの採用に伴い、PEAR(DB/MDB2, HTTP_Request, XML_Parser, Cache_Lite,・・・)、Smartyなどのライブラリをラッパークラスを介して使用している。

ぐるなびの構築・運用に関して、技術的に特に注力していることは、パフォーマンス・チューニングである。忘年会シーズンなどの時期によってアクセス数が大きく異なるというサイト特性をもつため、Webサーバをスケールアウトしやすい構成にし、かつ検索エンジンやデータベース周りのパフォーマンス改善を行っている。

PHP5への対応に関して

現状では、サービス毎に異なるPHPバージョンが混在し、うちPHP5.xはおよそ1割である。PHP5への対応は遅れ気味ではあるが、これはPHP5に移行するにあたり、単に「非互換部分のみ改修」をするのではなく、同一機能が別々に実装されている各サービスについて「PHP5でリファクタリングかつ共通機能を分離・統合する」ことを優先的に行っているためである。

共有ライブラリ/共有エンジンの構築

PHPでつくるぐるなび

共有ライブラリとしては、基本クラス(DB接続やロギングなど、必ず使うもの)の充実を考え、Zend Frameworkや標準拡張モジュールをラップしてクラスモジュールを構築している。他、ビジネスロジックをUIと切り離し、類似したものを共通化することでフロント開発をより軽快に行えるようにしている。

共通ライブラリには、Zend Frameworkを試験的に利用しているが、これを検討しているのは、PEARのようにモジュール単位で利用でき、クラスを継承して扱いやすいという理由である。しかし、マルチバイト系に不具合が多いので、一部独自実装を加えている。

また、PHP5拡張モジュールであるSimpleXMLを店舗データ管理に利用しているが、これを採用したのは、ぐるなび店舗データXML文書は構造が単純だが大容量であるため、直感的なデータアクセスが可能であることを重視したためである。

共通エンジンの構築では、エンジンを1からスクラッチで開発していくのではなく、基本機能(ベースモジュール)の選定を行い、ぐるなび特有のロジックを拡張実装して利用している。たとえば、SNSエンジンの場合、ベースモジュールにOpenPNEを利用し、独自機能で拡張しつつ、エンジン全体をぐるなびオリジナルとして構築している。

国際化への取り組み - 「日本発、世界へ」

PHPでつくるぐるなび

ぐるなびの企業理念は「日本発、世界へ」である。第一歩として3年ほど前に上海に子会社(gudumami.cn)を設立したが、中国ではPHP技術者の絶対数が少なかったため、当初、JAVAにて開発を行っていた。しかし、日本語版(上海在住の日本人向けサイト)の開発から、画面周りの修正やロジックの多少の変更に柔軟に対応させるために、PHPを採用した。現在では、日本・上海問わず、実装の標準化をPHPで行なう方針をたて作業を進めている。

まとめ

PHPに関する今回のセッションの内容をまとめると、

  • 2002年のリニューアルからPHPを導入した
  • 現在はPEAR、Smartyの標準実装している
  • スケールアウトしやすい構成をとる
  • PHP5への移行は緩やかである
  • 共通機能をPHPベースで開発している
  • ぐるなび国際化の開発もPHPで行う