DeNAのPerl使いたちに聞くモバゲーオープン化の裏にPerlアリ! |
ケータイ向けSNS「モバゲータウン」で知られるDeNAは、Web企業としての側面は見えづらい。PC向けのECサイトやオークションサイトも運営しているが、比率として大きいのはケータイ関連事業だからだ。しかし、サーバ側を見てみれば、mixiやlivedoorと同様のWeb企業。PerlやMySQLを使いこなしてスケールアウトするノウハウに長けたエンジニア集団を抱えている。モバイル向けOpenSocial対応のプラットフォーム「モバゲーオープンプラットフォーム」を実装した2人のエンジニアに話を聞いた。 |
DeNAではPerl使いが活躍 |
||
|
ディー・エヌ・エー ソーシャルメディア事業本部 プラットフォーム統括部 システムグループ 木村秀夫氏 |
「オークションサイトのビッダーズや航空券販売サイトのSkygateではJavaが使われていますが、それ以外はほとんどPerlですね」
こう語るのは、DeNAの木村秀夫氏(ソーシャルメディア事業本部プラットフォーム統括部 システムグループ)だ。モバゲーはもちろん、「みんなのウェディング」や「ネッシー」といったサービスも、すべてPerlを使っているという。
DeNAほどPerlを使いこなしている企業も珍しい。Perlといえば、CatalystやMojoといったフレームワークが有名だ。DeNAでも社内の管理や運用ツールといったWebアプリケーションの一部ではCatalystやRuby on Railsも使っているというが、一番多いのは自社開発のモバイルサービス向けフレームワーク「MobaSiF」を使った開発だという。これは、現在同社取締役となっている川崎修平氏が2008年に実装したもので、日本の携帯電話に合わせた機能や、実行速度の速い実用性という特徴を持っている。月間600億PVという凄まじいトラフィックをさばく同社だが、自社で使うフレームワークは自分たちで実装する、というのがWeb系企業らしいところだ。
ハッカー気質を持つ“Perl使い”は、川崎氏ばかりではない。
Perlコミュニティ最大のイベント「YAPC::Asia」では、1社当たりのスピーカー数がDeNAは4人と最多。Perlのライブラリ・リポジトリのCPANに貢献しているエンジニアも、少なくとも社内に5、6人はいるという。
OpenSocialプラットフォームを“モダンPerl”で |
||
ディー・エヌ・エー ソーシャルメディア事業本部 プラットフォーム統括部 システムグループ 山口徹氏 |
Perlによる開発手法には、現在大きな変化のうねりが訪れている。「モダンPerl」と呼ばれるものだ。Perlは歴史が古く、オブジェクト指向の機能が後付けで取り入れられるなど、その書き方には変遷がある。古いCGIなどで使われるPerlと、現在Web企業の現場で使われるPerlには大きな隔たりがあるという。
このモダンPerlという面でもDeNAには大きな成功実績がある。OpenSocialのプラットフォームは、実はピュアなPerlで実装されていて、このコードがモダンPerlなのだという。
MobaSiF上で日々生み出されるPerlコードはDeNAの事業を支える重要なプロダクションコードだが、必ずしもモダンPerlにキャッチアップしていると言えない面があったという。PerlコミュニティでZIGOROuのハンドルネームで知られる山口徹氏(ソーシャルメディア事業本部プラットフォーム統括部システムグループ)は、こう語る。
「Perlコミュニティで活動している人間として、このままレガシーな書き方を社内で続けていいのか、という思いがありました。ちょうどOpenSocial対応を進めることになったので、これはいいチャンスだと思いましたね」
モバイル向けSNSとしてOpenSocialに対応するのは世界的にも珍しい。それを木村氏、山口氏のたった2人で、Perlで実装したのだという。
モバゲーオープンプラットフォーム。OpenSocial準拠のプラットフォームは、サードパーティの開発者に開放されている。このモジュールを実装したのが、今回インタビューした2人だ |
PSGI/Plackも積極利用 |
||
モダンPerlというのはベストプラクティス集というべきものに付けられた名前で、従って時間とともに進化するもの。
「例えばC++のBoostに似た感じのもので、Perl5のラッパーライブラリ“Moose”がもてはやされた時期がありました。でも、オーバーヘッドが大きくて今はあまり使われていないようです。同様にCPANで鉄板モジュールと思われたものが変わったり、進化したりを続けていて、特定のモジュールやライブラリを使うことがモダンPerlというものではありません」(木村氏)
コミュニティ全体で進化が続いているPerlの世界では、その時々のベストプラクティスを知り抜き、適用する“選択眼”が重要になる。こうした職人的エートスがDeNAのエンジニアにはある。OpenSocialの実装に当たって木村氏が選んだモダンPerl的なアプローチは「PSGI/Plack」の採用だ。
PSGIはWebサーバとWebアプリケーション(もしくはフレームワーク)とのインターフェイスを規定する仕様で、RubyではRack、PythonではWSGIと呼ばれているものに相当する。Webアプリとはつまるところクライアントからリクエストを受け取って、処理し、何かを返すという動作をしているので、ここのデータの受け渡し方法をメソッドやデータ構造レベルで決めておこうという発想だ。
WSGIやRackに比べて後発となるPSGI/Plackは2009年9月にYAPC::Asiaで発表されたばかり。実サービスで本格投入される例はまだ少ない。モダンPerlの中でも特にエッジな部分だ。だが木村氏は、OpenSocial対応でキモの1つとなるプロキシサーバをPlackを使って行ったという。
このプロキシは、ユーザーのケータイと、サードパーティのゲーム提供者(のサーバ)との間に位置し、ヘッダやフッタ、広告を付けるといった処理をしている。ほかにも重要な要件として、端末固有の端末IDを落とす処理も行う。これらの機能は追加や変更が発生しうるため、PSGIのプラグイン機構がコードの構造をクリーンに保つのに役立っているという。
モバゲーオープンプラットフォームの概要。木村氏がプロキシ部分を、山口氏がOpenSocialAPIの部分を担当して開発したという |
小さなチームで大きな仕事をする喜び |
||
山口氏はOpenSocialプラットフォームのAPIモジュールを実装した。グーグルが主導して提唱したOpenSocialという標準規格は、主にPC向けSNSを想定したものだったため参考にできる実装はなかったうえに、日本のケータイ事情に合わない面もあったという。
「そもそも日本の携帯電話ではJavaScriptが使えませんから、ApacheのShindigは使っていません」(山口氏)
ShindigとはOpenSocialのコンテナとなるサーバ側の実装で、多くのSNSで採用されているデファクトスタンダードだ。これが使えない。というよりも、モバイル版OpenSocialでは、mixiアプリのようにゲームなどのサードパーティアプリを、ガジェットとしてマッシュアップするような実装ではなく、ソーシャルグラフ(モバゲー上の友だちつながり)を読み出せるAPIを提供し、後はプロキシ経由でケータイとコンテンツ・プロバイダのサーバが直接HTTPでやり取りする形となる。
モバゲーオープンプラットフォームはOpenSocial準拠だが、既存SNSのそれとは、かなり異なる実装なのだ。驚くのは、こうした仕様や実装について、グーグルですら解答を持っておらず、DeNAに詳細な仕様決定を委ねるというほど、モバイル版OpenSocialで同社は先頭を走っている、ということだ。山口氏の書いたREST APIのモジュールはCatalystベースで、OAuthの認可処理やURLのパラメータに基づいてコントローラを呼び出すAPI、そうした処理に基づいてJSONを返す処理などを行っているという。
まれに木村氏と山口氏とで意見が割れることがあるものの、こうしたモジュールの設計や実装は2人でサクサクと進めたという。OpenSocialの実装は実質半年程度で行った。そもそも両者とも入社して1年前後で、これだけの実績を上げたというから、かなりのスピード感だ。高い技術力があってこそだが、ごく小さなチームで、インパクトのある大きな仕事ができる時代であること、またDeNAはそれが求められている場所なのだということを認識させられる。
1日に数千万のメッセージをさばく |
||
インパクトのある大きな仕事と書いたが、これには2つの側面がある。1つはOpenSocial準拠のプラットフォームを開放して以来、約60社が140アプリを提供する規模に成長している点。これはDeNAだけでなく、mixiも含めてだが、ソーシャルアプリのエコシステム、新市場を生み出すということだ。
「以前はAmazon EC2やGoogle App Engineを使うシーンってないかなと思っていたんですよ。でも、ソーシャルアプリだと、個人規模でヒット作を生んでアクセスが急増する場合もある。そうなるとEC2のようなものがほしい。ソーシャルアプリをホスティングすることに適したデータセンター事業でも需要が出てきますよね。すでにライブドアさんがやっていますが、そういうエコシステムの創出に寄与できるということに、単にコンテンツを作るという以上の喜びを感じています」(木村氏)
エンジニアリング上の課題も大きい。実はモバゲーには友だちとなれる数に上限がない。mixiと異なりゲームを通してユーザー同士がつながるモバゲーでは、友だち数が1000人を超えるユーザーが万単位で存在しているという。
これは技術者泣かせの仕様だ。
例えばあるゲーム内で誰かがレベルアップしたら、その情報はアクティビティと呼ばれるメッセージとして、そのユーザーの友だち全員にブロードキャストされる。もともと1800万会員を誇るモバゲーで、細かなメッセージが1対Nで膨大に流れるわけだ。その流量は、なんと1日に数千万にも上るという。
この処理を山口氏は「Q4M」(Queue for MySQL)というオープンソースのキューイングライブラリを使って実装したという。
「Q4Mには2台のサーバを割り当てています。当初はアクティブ/スタンバイの構成でした。たまにデキューが詰まることがあって冷や汗をかきましたが、今はQ4Mの安定性も上がってアクティブ/アクティブで運用しています」(山口氏)
Q4Mは、PerlやMySQL関連で広く知られているスーパーエンジニア、サイボウズラボの奥一穂氏が実装したものだが、実は木村氏とは「週に3、4度飲むこともある」というほどの仲。大規模なリアルユーザーとして障害を報告することもあったという。スキルの高い技術者は企業の壁を超えて連携するのがWeb業界の常だが、DeNAは、特にPerlコミュニティの重要な一角を占めている、ということだ。逆にPlackやQ4Mのようなエッジな実装を使いこなすためには、こういう横のつながりを持つトップエンジニアの存在が重要ということだろう。
プロキシサービスのリリース直後、あまりの流量に「死ぬかと思った(笑)」と爽やかな笑顔で振り返る木村氏だが、通常経験できないような規模のトラフィックを相手に、誰も踏み出したことのない世界を開拓できるというのは、やりがいという意味でもスキル磨きという観点からも、エンジニアにとってかけがえがない経験だろう。
多忙な中、終始楽しそうに技術的詳細を語ってくれた木村氏や山口氏を見ていると、よほどDeNAの仕事に充実感があるのだろうなと思わずにいられなかった。
関連リンク |
---|
ディー・エヌ・エー | |
モバゲータウン(PC向け) | |
ビッダーズ | |
Skygate | |
みんなのウェディング | |
ネッシー | |
モバゲーオープンプラットフォーム |
提供:株式会社ディー・エヌ・エー
アイティメディア営業企画
制作:@IT 編集部
掲載内容有効期限:2010年06月17日
関連リンク |
---|
ディー・エヌ・エー | |
モバゲータウン(PC向け) | |
ビッダーズ | |
Skygate | |
みんなのウェディング | |
ネッシー | |
モバゲーオープンプラットフォーム |
関連記事 |
---|
600億PVもMySQLで! モバゲーのインフラ底力600億PVもMySQLで! モバゲーのインフラ底力エンジニアの働き方にはもっと 選択肢があっていい(@IT Special) |
|
600億PVもMySQLで! モバゲーのインフラ底力600億PVもMySQLで! モバゲーのインフラ底力600億PVもMySQLで! モバゲーのインフラ底力 (@IT Special) |
|
DeNA Technology Seminar #1 フォトレポート(@IT自分戦略研究所) | |
「下積み時代はない。 面白い仕事があるだけだ」「下積み時代はない。 面白い仕事があるだけだ」(@IT自分戦略研究所) |
|
何を作るべきか、エンジニアが考えられる会社を選べ(@IT自分戦略研究所) | |
「Perl技術者の雇用を増やす」、JPAが本格始動(@IT NewsInsight) | |
モバゲータウン、会員数1000万人突破(@IT NewsInsight) |