楽天 開発推進部長の安武弘晃氏
楽天 開発推進部長の安武弘晃氏

 「外部に対し情報を提供すれば,我々が必要とする情報も入手しやすくなる」---これまで内部システムについては口を閉ざしてきた楽天が,そのシステムについて語り始めた。

 同社はいわずとしれた国内最大規模のオンライン・ショッピング・サイト「楽天市場」を運営する企業。楽天はシステムではなくサービスを提供する企業,という考えから,これまでシステムについての情報はあまり提供してこなかったのだ。

 しかし,状況は変わってきた。楽天で開発の陣頭指揮を執る安武弘晃 開発推進部長は,「サービスの規模が大きくなるにつれて企業規模も大きくなり,開発の進め方が職人芸的な形から,チームによる組織的な形へと変わってきた」と述べる。そして冒頭のようなオープン路線宣言となったわけである。

 その結果,楽天はLinuxやApacheはもちろん,数十台のサーバーでMySQLを動かし,約半数のアプリケーションでPHPを採用する,オープンソース・ソフトウエアのヘビー・ユーザーだということが明らかになった。安武部長に,オープンソース・ソフト採用の経緯や課題などについて聞いた(聞き手は日経システム構築 副編集長の高橋 信頼)。

---どんなオープンソース・ソフトウエアを,どれだけ使っているのでしょうか。

 楽天市場でPHPが動作しているサーバーは2桁の後半くらいあります。もしかしたら100台を超えるかもしれません。

 DBMSもInformixやOracleなど,いろいろな種類を使用していますが,MySQLが動作しているサーバーも2桁の前半くらいあります。

 楽天市場全体では,数百台のサーバーで構成していますが,Linux,FreeBSDといったオープンソースOSが動作しているサーバーが台数では半分以上を占めます。ただし,Solarisサーバーも多いですね。Webサーバー・ソフトは現在ほとんどApacheです。

 もっとも,顧客の要望やビジネスの変化に合わせて,システムも日々増えています。半年経つと比率も全く変わっているかも知れません。

 新しいビジネスには常にリスクがつきまといます。成功しなかった時のことを考えると,コストはなるべく抑えなければならない。商用製品であっても,オープンソースであってもバグが発生することはあります。

 また,商用製品だからといって永続的にメンテナンスされるわけではない。DBMSのベンダーが他社に買収されたこともあります。オープンソースはソフトウエアによりますが,MySQLやPHPは大きな問題もなく,よい選択肢の1つであり,要はどう使うかだと考えています。

---PHPやMySQLを使い始めた経緯は。

 楽天の創業は1997年の2月でした。しかし,システムは前年の1996年に作り始めました。今は70人とか,100人とかが開発にあたっていますが,スタートアップ時は開発担当者は1人しかいませんでした。最初に採用したのは,ベンダー独自のツールです。担当者が使えるツールを選んだという感じでした。今でもシステムはすべて自前で開発しています。

 PHPとMySQLを使い始めたのは2000年ごろです。きっかけは,PHPとMySQLに詳しい技術者が入社したことでした。PHP3が日本語化されて本格的に使い出されたころだったと思います。2000年9月には,「ケータイ版楽天市場」など大規模なアプリケーションで使い始めました。

 技術そのものの良し悪しよりも,それを良く知り,支えることができる技術者がいるかどうか。その方が重要であると思っています。

 PHPと同時期に,サーバー・サイドJavaも始めました。JDK 1.3が本格的に使い始められたころでしょうか。先に本腰を入れたのはJavaでした商用のアプリケーション・サーバーを使用し,システムを開発してきました。

 しかし,商用アプリケーション・サーバーの構成はコストがかかるという面があります。2002年ごろから,ブロードバンドが普及し,アクセスが飛躍的に増大しました。それに対応するためサーバーやCPUを増設すると,アプリケーション・サーバーのライセンス料がかかります。1つの技術だけに依存することはよくない,適材適所で使い分けるべき,という考え方もあり,PHPを使用することが増えてきました。

---PHPとJavaはどう使い分けていますか。

 最初は,信頼性が要求される部分はJavaを使用していましたが,現在はそういった区別はありません。どらちを用いるかは,今,手が空いていて開発にかかれる人間が得意としているもので決まります。楽天はサービスを作る会社で,システムを作る会社ではありません。いかに早くよいサービスを開始できるかが重要で,それが実現できるなら,極論すれば技術はなんでも構いません。

 高負荷になる部分はJavaで,という傾向もないですね。むしろ,負荷がきついとサーバーの台数が必要になるので,コストの安いPHPという傾向にあります。高負荷のアプリケーションにはその分,多くのサーバー,CPUを割り当てるので,商用のJavaアプリケーション・サーバーだとライセンス料もかさんでしまうからです。

 高負荷には,多くのサーバーを並べて負荷分散装置でアクセスを振り分けたり,分離できるアプリケーションは別のURLで分けたりすることで対処しています。イスラエルZend TechnologiesのZend PerformanceSuiteなど,コンパイル済みのPHPプログラムをキャッシュすることで高速化するツールも評価中です。

 確かに,PHPはデータベースとの接続を効率化するコネクション・プーリングがJavaに比べて弱い。データベースとのコネクション数はApacheのプロセスと同じ数にしか設定できないため,最適なコネクション数に絞るといった細かい調整はできません。しかし,それが問題となるのは,1個のDBMSにアクセスが非常に集中するようなシステム構成の場合です。楽天市場は日本で何番目というアクセス数があるサイトだと思いますが,アプリケーションを機能単位で分けていけば,そのような問題など,ほとんどありません。

---PHPは大規模開発に向かないと言われます。

 大規模開発に向かないという実感はありません。いろいろな開発規約を決めて,それにのっとって開発していることが大きいと思います。

 なるべく全部クラスにして,モジュールの独立性を高めるようにしています。限りなくJavaに近い開発スタイルです。ライブラリである「PEAR」を使用しているほか,独自のライブラリも整備しています。

 また,HTMLにスクリプトを埋め込むため煩雑になりやすいと言われますが,テンプレート・エンジンの「Smarty」を使い,プログラムをHTMLに埋め込むのではなく,別々のファイルに分離しています。これにより,デザイナとプログラマが独立して作業できます。

 コーディング規約に関しては,独自に作るのではなく,より標準的になるよう,PEARの規約に準拠するようにしています。

---PHPに関する課題は何でしょうか。

 やはり人材の確保や体制が課題です。Javaは技術者も増えてきましたが,Javaに比べるとPHPの技術者は少ない。

 PHPは,バージョン・アップによる仕様の変化がJavaに比べて激しいのですが,PHP3.XからPHP4.Xになった時も,別の言語を使うつもりで開発しました。(近く正式にリリースされそうな)PHP5.Xでも,新しい言語のつもりで検討した方がよいのではないかと考えています。

---MySQLによるシステムの規模は。

 1つの機能で,1億行を超えるデータ量を持つデータベースや,1テーブルで20Gバイトを超えるテーブルなど,楽天市場にはデータ量の多いものがたくさんあります。

 MySQLもサービスとしての信頼性を上げるためにクラスタリングしているサーバーもあります。片方のサーバーに障害が発生しても数秒から数十秒で切り替わるようになっています。また,データベースを複製するレプリケーション機能も使用しています。

 MySQLは,テーブルのデータ形式がいくつかありますが,まだデフォルトのMyISAMが多いですね。トランザクション機能などをサポートしたInnoDBも使用しています。InnoDBではこの機能のほかに,オンライン・バックアップ機能も使用しています。

---MySQLで障害の経験や,機能不足を感じることは。

 突然落ちるとか,データが壊れる,といった障害を経験したことはないですね。パフォーマンスが急激に悪くなるといったこともありません。

 機能について不足を感じることはありません。MySQLにはストアド・プロシジャやトリガーといった,DBMS内部で複雑な処理を実行する機能はありませんが,あまり必要性は感じていません。DBMSに仕事をさせすぎると,そこがボトルネックになってしまうからです。

 とはいえ,現在のところ,商用DBMSのほうが多く,決済などは商用DBMSで処理しています。商用DBMSに対しては10名規模のDBA(データベース・アドミニストレータ)チームがいますが,MySQLに対しては手薄です。MySQLに関する課題は,このような人材の確保とチューニングなどのノウハウ蓄積などです。

---LinuxとFreeBSD,Solarisは,どのように使い分けていますか。

 Linux,FreeBSDは主にWebサーバーやメール・サーバーに使用しています。LinuxとFreeBSDの数はそれ程大きく変わりません。

 Solarisサーバーは,稼動中にCPUを追加できるものもありますし,やはりハードウエアの信頼性が高いと思います。