mixi engineer blog

*** 引っ越しました。最新の情報はこちら → https://medium.com/mixi-developers *** ミクシィ・グループで、実際に開発に携わっているエンジニア達が執筆している公式ブログです。様々なサービスの開発や運用を行っていく際に得た技術情報から採用情報まで、有益な情報を幅広く取り扱っています。

OpenSocial WAP Extensionの裏話

皆さんこんにちは。プラットフォーム開発を担当しています、よういちろう です。今回は、先日正式にOpenSocial仕様に採択された「OpenSocial WAP Extension」について、簡単に解説してみたいと思います。

[日本発のモバイルソーシャルアプリケーション仕様が世界標準に採択]
http://mixi.co.jp/press/2010/1213/3995

OpenSocial WAP Extensionって何ですか?

mixi Platformは、8月24日のmixiアプリPC版の一般公開を皮切りに、次々と新しいチャレンジを続けてきました。その中で最も市場規模が成長したものは、mixiアプリモバイルになるでしょう。他社からも所謂ガラケー向けソーシャルアプリプラットフォームの参入が相次いで実現され、一種の社会現象にまで拡大しています。

日本におけるガラケー向けソーシャルアプリ市場は、実は「ソーシャル」という共通キーワードの他に、もちろん「OpenSocial」という基盤技術の採用においても共通していることは、エンジニアの方々でなくとも耳にしていることでしょう。元々定義されていたOpenSocialとは、PC向けアプリを作るためのJavaScript API Spec、様々なサーバからソーシャルデータをやり取りするためのRESTful API Spec、この2つから成り立っていました。mixiアプリモバイルは、RESTful APIを利用していますが、mixiサーバとソーシャルアプリプロバイダー(SAP)側のサーバでの情報のやり取りについては、弊社が独自に仕様を考え、実装をしたものになります。

具体的には、以下の4点が元々のOpenSocialにプラスしています。

  • Gadget Specファイルにどのように定義するか?
  • mixiサーバからどのようなリクエストがSAPサーバに送信されるか?
  • SAPサーバからどのようなレスポンスをmixiサーバが期待しているか?
  • mixiサーバ上でSAPサーバからのレスポンスをどのように加工するか?

これらの「mixiサーバ」という部分を汎化して「OpenSocial Container」に置き換え、JavaScriptやiframeがサポートされないブラウザ上でどのようにガジェットをレンダリングし、どのようにユーザからのアクションを処理していくか、という点を含めてまとめたドキュメント、それが「OpenSocial WAP Extension Specification」になります。

[OpenSocial WAP Extension Specification]
http://opensocial-resources.googlecode.com/svn/spec/1.1/OpenSocial-WAP-Extension.xml

OpenSocial WAP Extensionの構成

OpenSocial WAP Extension Specificationの構成は、大きく分けて以下から成り立っています。

  • Compliance - WAP ExtensionをサポートするOpenSocial Containerが必ず守ることになるワークフローの規定。
  • Gadget Spec XML - WAP ExtensionをサポートするOpenSocialガジェットの定義方法や、Data Pipeliningなどについての言及。
  • Request and Response - SAPサーバにOpenSocial Containerから送信されるリクエストの規定、およびSAPサーバが返すべきレスポンスの規定とOpenSocial Containerにて行われる各種レスポンス内容の解釈。
  • Validation - OpenSocial ContainerからSAPサーバに送信されたリクエストに対するSAPサーバでの妥当性検証の規定。
  • User Flow functions - OpenSocial Containerが介入しユーザに必ずアクションを求める「User Flow」に関する規定。

どれも、mixiアプリモバイルによるアプリケーション開発を行ったことのある方なら「あ、あのことね」と思うであろう規約ばかりかと思います。JavaScriptやiframeが使えない制限付きブラウザにてソーシャルアプリケーションをレンダリングするための仕様の集合であることが、上記の項目からわかっていただけると思います。

もちろん、「UserAgentからの○○なリクエストは、△△Handler.pmで受け付けて・・・」なんて実装的なことは記述されていません。あくまで所謂「外部仕様」の定義となります。また、OpenSocial WAP Extensionの守備範囲は「ソーシャルアプリケーションのコンテンツのレンダリング」になりますので、どこでRESTful APIを使うか、などについても言及外となります(と言っても自然と決まりますが・・・)。

採択までの長い道のり

このOpenSocial WAP Extensionは、今年の5月に行われたOpenSocial Union Event(Google I/Oの前日に開催)にて、OpenSocial Foundationのボードメンバーに紹介し、帰国後に正式にドキュメント化して提案を行いました。OpenSocialの仕様策定は、OpenSocial and Gadget specification Discussion Google Groupというオープンな場で行われます。もちろん、OpenSocial WAP Extensionもその場で提案をしました。

提案後、様々な方々の意見が寄せられ、議論が行われました。その一部は以下のディスカッションスレッドから振り返ることができます。

[Proposal: OpenSocial Mobile extension]
https://groups.google.com/group/opensocial-and-gadgets-spec/browse_thread/thread/ad1d09e77c7d7fea/6ca8311892bb3c00?hl=ja

印象としては、残念ながら海外に住んでいる方々には、制限付きブラウザにて動作しているアプリケーションというものを直感的に理解してもらうことへの壁がある、と思いました。例えば、URLを貼って「動いてるでしょ?」とシンプルに言うことができません。そして、特にmixiという日本人向けのサービスであり、携帯認証のためアカウントも取得できないため、「会員登録してみてよ」とも言えません。既に多くの素敵なアプリが生み出されて市場が形成されていることを実感してもらうためには、「実機を見せる」という必要がどうしてもありました。

結局、OpenSocial Foundationのボードメンバーに会って実機を見せるために、2回ほど渡米しています。もちろん、日本の文化「かわいい」系のアプリを独断と偏見で選んで、見てもらいました。やはり、下手な英語で説明するより、実機を手にしてもらえれば、すぐに伝わりました。

とは言うものの、ボードメンバーの意向としては「拡張仕様扱いに」という方向性が早くから出ていましたので、深い議論が行われて早々と当確になる、というわけにはいきませんでした。こちらとしては、アピールを続け、問題を洗い出し、修正をし続けるしかできることはないのです。OpenSocial v1.1のデッドラインはどんどん近づいてきます。

仕様策定プロセスは、かなり厳格に決められていて、あらかじめ決められたマイルストーンに向けて手順が進んでいきます。

[OpenSocial Specification Definition Process]
http://wiki.opensocial.org/index.php?title=Specification_Process

最終的には、ボードメンバーの「投票」で決議されます。現在は「+1投票が5票、-1投票がゼロ」という結果を得なければ、残念ながら却下もしくは見送りとなってしまいます。

投票期間を迎える時期になり、OpenSocial WAP Extensionはその時点においてもなおオープン状態な議論が残っていました。それを理由として、投票プロセスに入ることなく、v1.1 Next(つまり見送り)になってしまいそうになりました。

[OpenSocial 1.1 Status!!]
https://groups.google.com/group/opensocial-and-gadgets-spec/browse_thread/thread/d7f468f08c29fed2/fc229c07fc00b708?hl=ja

ただでさえ「慣れない英語」「実体験してもらえない仕様」であり、ここで「今回は残念、諦めるか・・」という選択肢もありました。しかし、せっかく数ヶ月間議論を続けてきたこの提案を、そのまま中途半端な状態にするのは、やはり諦めがつきません。何とかボードメンバーと交渉し、OpenSocial WAP Extensionの投票期間を、コアの仕様とは別に設けてもらうことに成功します。Thanksgivingなどが入って期間が少しだけ空いてしまいましたが、他メンバーからの仕様調整なども受けることができ、無事投票を迎えることができました。

OpenSocial FoundationをリードしているIBMのMark Weitzel氏からの投稿に書かれた「Confirmed」という9文字を見たときは、今までのディスカッションなどが全て頭の中で思い起こされ、感慨深い気持ちになりました。

https://groups.google.com/group/opensocial-and-gadgets-spec/msg/689ee1297807e7b2?hl=ja

OpenSocial WAP Extensionの意義

OpenSocial WAP Extensionのターゲットとするデバイスは、日本のガラケーを初めとするJavaScriptやiframeをサポートしない制限付きブラウザを搭載したものとなります。日本においては、現在多くのユーザがガラケーからSNSを利用しています。しかし、もちろんスマートフォンに今後置き換わっていく傾向は強まっていくことでしょう。スマートフォンに搭載されたブラウザは、デスクトップPCのそれに近いものですし、「WAP向けの仕様を今更?」と思う方も多いのではないでしょうか。

しかし、私は以下の点でOpenSocial WAP Extensionは意味のあることだと信じています。

  • まだまだガラケーのシェアは日本においては揺るぎのないものであり、世界においてもスマートフォンの普及率は多くて10%を超えた程度であるため、本仕様がリーチする国はまだあるはず。
  • いくらスマートフォンと言えど、ディスプレイは狭く、そして使用される回線の細さはガラケーと変わりがない。そのため、ガラケー向け仕様の多くの利点は、そのままスマートフォンでも生かせる要素は多分にあるはず。
  • 日本がモバイル中心でソーシャル分野が広まっている事実を世界にも発信すべきであり、そして世界がモバイルに傾き始めた今こそ、日本発の仕様を提案しスペックリードをするべき。
  • 大きなOpenSocial仕様において、拡張仕様という扱いはOpenSocial WAP Extensionが初めてのものとなる。拡張仕様という位置づけの確立は、今後OpenSocial 2.0以降でも参考にできるものであるはず。

最後に

OpenSocial WAP Extensionという仕様を策定したのは弊社でしたが、その仕様を世界の方々に理解してもらうための大きな要因は、その仕様を元に開発され、そして日本のモバイル市場を大きくしてきた実際のソーシャルアプリケーション達です。つまり本仕様の正式採用は、日本のソーシャルアプリ市場に参加している皆さまの成果によってもたらされたものである、と私は考えています。

ソーシャルという分野は、まだ始まったばかりです。今後も皆さまと共に、世界に通用し、そして世界をリードするプラットフォーム、そしてソーシャル市場を作っていけたらと願っています。