Tender Surrender

OpenSocialと関わるには

  • コンテナになる
  • ガジェットを開発する
  • RESTを使ったクライアントサービスを作る

といった選択肢が考えられますが、そのいずれを選択するにしても、アーキテクチャについて知っておくことはとても重要です。特にガジェットを開発するに当たっては、アーキテクチャを知っていることでより開発しやすい場面が多々あります。

そこで今回は、OpenSocialに対応するコンテナのほとんどで利用されているオープンソースのリファレンス実装、Shindigのアーキテクチャについて解説したいと思います。

ガジェットとSNSの関係

iGoogle(既にShindigが利用されている)ではどうやって第三者の作ったガジェットを表示しているかご存知でしたか?実は、別ドメイン(iGoogleならgmodules.com)上にレンダリングしたガジェットを、iframe内に表示しているのです。

理由は、同ドメイン上に第三者の書いたJavaScriptを置くことは、セキュリティ上危険だからです。詳しくは以前Cajaについて解説した記事がありますので、そちらをご覧ください。

OpenSocial Gadget Rendering

APIはどこにあるか

OpenSocialにはPeople, Group, Activity, Persistentの4つのソーシャルなAPIが用意されていますが、それぞれRESTfulによるJSON, XML, AtomPub形式と、RPCによるJSON形式が用意されています。ShindigのJavaScript APIでは、この中でもRPCによるJSON形式が使用されています。

先ほど2つのドメインについて説明しましたが、JavaScriptのAPIということはAjaxなので、当然同じドメインということで、エンドポイントはShindigのドメイン上に存在します。

OpenSocial Server Architecture

ガジェット表示の流れ

基本的な構造が分かったところで、実際にガジェットを表示するまでの流れを見てみましょう。

どのガジェットを表示するのか

ガジェットを表示するためには、まずガジェットを表示したいというユーザーの意思が必要です。これはiGoogleであれば、ガジェットディレクトリから好きなガジェットを選び、自分のページを表示する、というサービス側での作業によって行われます。表示したいガジェットが分かったところで、サービス側もガジェットを表示するためのiframeを表示する必要があるため、ガジェットに関する情報を収集します。これはShindigのmetadata APIを使って行われます。

metadataの取得

metadata APIのリクエストを取得したShindigは、キャッシュを参照します。キャッシュにガジェットの情報が残っていない場合は、サービスからのリクエストに基づいてガジェットXMLを取得し、解析します。

iframeのレンダリング

ガジェットに関する情報を取得したサービスは、ガジェットを表示するためiframeをレンダリングします。これにより、iframe内にガジェットを表示するためのリクエストがブラウザからShindigに投げられます。

基本的にガジェットXMLに記述されたContentsの内容はそのまま表示されますが:

  • 指定されたガジェットのfeature(tabやminimessageなど、ガジェットが持つ機能セット)のJavaScriptがHTMLに追記される。
  • 設定によってはJavaScript、CSS、画像などのあらゆる外部コンテンツがShindig上にキャッシュして呼び出される。

という点は覚えておいて損はないでしょう。

これでガジェットの表示は完了です。Firebugなどを使ってAPIを試してみれば、Shindigにリクエストが飛んでいることが分かると思います。

外部サーバーを使うAPI

外部サーバーを使う際、JavaScript APIとしてgadgets.io.makeRequestが使用されます。コンテンツタイプとしてFEEDを選択すると、RSSやRDF、Atomを共通のフォーマットで返してくれたり、JSONを選択すると、データが返ってきた時点ですぐにJSONオブジェクトとして扱えるようになっています。

また、セキュリティ面でもいくつかの選択肢が用意されています。

  • 通常のリクエスト
  • Signed Request
  • OAuth

通常のリクエストは、特に認証等のかかっていないAPIに対して行われるものです。Signed Requestとは、OAuth Consumer Requestを指しており、これを利用することで、外部サーバーはガジェットからのリクエストのみを扱うことができるようになります。OAuthはOAuth Coreを指しており、外部サーバーはガジェットからのリクエストであることだけでなく、誰からのリクエストなのかをセキュアなクレデンシャルで認証した上で扱うことができるようになります。

OAuthについてはこの辺りこの辺りを参考にしてください。

ここで注意しなければならないのが、すべてShindigのproxyを介して行われるということです。先ほど書いた通り、ここでもGETリクエストには強力なキャッシュ機能が利用されるため、若干注意が必要な場合があります。キャッシュについては次回以降まとめて記事にしたいと思います。

Read on...

Been wanting to make this blog multilingual for a while, I just found a good plugin to do it.

WP_Multilingual is a multilangual plugin for WordPress. It’s not an auto-translator, you have to post in each languages but, those languages will be tied to the single entry and viewer’s preferred language is automatically detected using request header. This was an ideal functionality I’ve been looking for.

Just one problem, Dean’t FCKEditor doesn’t seem to work quite well on japanese which you must install along with WP_Multilingual. ghh

Anyway, it looks ok just to internationalize. I’ll look for solution about editor.

Read on...

I developed FriendIntroducer as an experiment and was trying to understand how FriendConnect is different from ordinaly OpenSocial implementation. So this time, I’ve tried to develop a gadget which you can find FriendConnect interesting, Footprints. You know the idea if you’ve tried MyBlogLog before.

What is Footprints?

Footprints is a gadget to track visitor of you blog. Look at the gadget on bottom left. If you’re not joined or signed in, do it to check what it does.

Footprints1

As you could imagine, this gadget records visitor and its time. When viewed by others, timestamp will be displayed how long ago, you’ve visited. Also, you can remove your own footprint if you want. The xml is located at:

http://devlab.agektmr.com/OpenSocial/FriendConnect/Footprints.xml

http://gadgets.agektmr.com/Footprints/friendconnect.xml

Feel free to take it and use it on your blog.

Read on...

FriendConnectのメンバーが友達を紹介し合う文章が書けるFriend Introducerというガジェットを公開しました。このブログの画面左側に表示していますので、メンバーになってくれている方はぜひ、遊んでみてください。(なっていない方はメンバーになって遊んでください!)

FriendIntroducerとは

主に3つのビューが存在します。1つはブログ上で表示されるprofileビュー。

FriendConnect4

FriendConnectメンバーの紹介文を最大5件表示します。ページングが可能で、それぞれのメンバーに書かれた紹介文がランダムで表示されます。

メンバーのサムネイル画像をクリックするとdetailビュー(OpenSocial的なビューではないですけどね)に切り替わります。(※誤解を招きそうなので修正。detailビューは僕が勝手にそう呼んでいるだけで、OpenSocial的にはprofileビューです。)

FriendConnect5

一人に対して複数の人が紹介文を書いている場合がありますので、detailビューでは、その人に関する紹介文をすべて閲覧することができます。

ガジェット上部のボタンをクリックするとcanvasビューに切り替わります。

FriendConnect6

canvasビューでは、ログインユーザーの友達の紹介文を書くことができます。友達がいない方は、同じFriendConnect上の誰かを友達に加えてください。

FriendIntroducerをブログに貼付けるには

まずはこちらでFriendConnectに登録してください。サイト登録済みの状態で・・・

FriendConnect1

Social gadgetsをクリックします。

FriendConnect2

一番下にあるCustom gadgetリンクをクリックします。

FriendConnect3

Gadget URLをhttp://devlab.agektmr.com/OpenSocial/FriendConnect/FriendIntroducer.xmlとしてください。

ガジェットの横幅を調整し、Generate CodeをクリックするとHTMLコードが出力されますので、これをブログ等に貼付けます。

所感

以前のエントリにも書きましたが、FriendConnectガジェット作成のミソは:

  • OWNERはブログという仮想人格
  • requestNavigateToでcanvasビューとprofileビューを行き来できる
  • canvasビューのバックグラウンドは、サイト作成時に取り込んだcanvas.htmlをいじることで変更可能

といったところでしょうか。

今のところOpenSocialにコミュニティ的な考えはないのですが、FriendConnectはちょっとひねったコミュニティ的な応用、と思うと分かりやすいかもしれません。

また、FriendConnectの面白いところは、複数のSNSからインポートした友達リストをマージして利用できることです。例えば僕はorkut、Google、Plaxo、Twitterをインポートしていますが、同じブログに登録している人がこれらのSNS上で友達であれば、FriendConnect上でも友達になります。

いつかGoogleがiGoogleをSNS化する際、これらの友達リストがそのまま利用できるようになるかもしれませんね。

Read on...

PlaxoのJohn McCrea氏が2009年のソーシャルウェブを予言しています。

それによると・・・

Facebookが最低でも1つ(OpenIDかOAuthが有力)のOpen Stackをサポートする

FacebookはアプリケーションプラットフォームとしてOpenSocial勢を大きく引き離し成長を続けています。現在のところOpenIDもOAuthもPortable Contactsも一切無視した、独自仕様で展開していますが、オープンな規格を取り込むことなどいつでもできること。状況次第でこのカードを切ってくる可能性は十分あり得ます。

Google、Yahoo、MicrosoftがそれぞれのウェブメールサービスでPortable Contactsをサポートする

OpenSocialのRESTful People APIと完全に一致したことで、Portable Contactsのスタンダード化はもう既定路線でしょう。他に有力なプロトコルもありませんので、Microsoftはともかくとして、Google、Yahooは必ず対応します。

Microsoftが少なくともOAuthを、Portable Contacts対応のため実装

MicrosoftがPortable Contactsに対応するとすれば、認証方法に独自プロトコルを用いるのは得策ではありません。なぜなら、OpenSocialがOAuthとPortable Contactsをセットで規定しているから。ディベロッパ寄りに考えれば、これも十分にあり得る選択肢です。

MicrosoftのWindows LiveがOpenSocialコンテナに

上記のいずれも、実はMicrosoftは独自の代替プロトコルを持っています。ガジェットプラットフォームとしても、Windows Live Gadgetがあります。しかし、ウェブサービス分野で遅れをとっている今、独自路線に固執するのは得策ではありません。OpenSocialに対応する可能性は皆無とは言い切れません。

Plaxoが伝統的メール/パスワードによるサインアップをOpen Stackによって完全に駆逐できることを証明する

これは、まあオマケですね(笑)

で、僕も考えてみました。2009年のソーシャルウェブを大予想!

GoogleがSNS化

以前にも書きましたが、Googleは着々とSNS化への準備を整えています。SNS化というと語弊があるかもしれません。SNSをプラットフォームとして取り込む、かな。

Google FriendConnectは対応サイトを手軽にSNS化できることが目玉のように言われていますが、僕はもっと違う狙いがあるものと思っています。仮にGoogleがiGoogleをOpenSocialコンテナ化した場合、当然友達リストはGmailのアドレス帳が筆頭になる訳ですが、実はGoogle FriendConnectで接続したアカウントもその候補なのではないか、とにらんでいます。

もしそうなった場合、複数のSNSに参加している人のアカウントはすべてGoogleに束ねられることになり、他の追随を全く許さない状況になってしまうのではないでしょうか。

(実はGoogleの人にこのことについて聞いたことがあるのですが、そんなevilなことしないよ〜と言ってました)

課金プラットフォーム流行

iPhoneのApp Storeはディベロッパにとって革命でした。一般のディッベロッパが自分の作ったアプリケーションを投稿するだけで、配布・課金までしてくれるプラットフォームはこれまでなかったからです。

これはソフトウェア開発に限った話ではありません。ビデオや音楽で似たようなことができるとしたら?2009年、こういった「モノを作れる人」がお金を得るための仕組みが新たなビジネスモデルとして盛り上がってくるのではないかと予想しています。もちろん、ソーシャルウェブプラットフォームと紐付けられるというのは大前提です。

広告プラットフォーム戦争勃発

Facebook戦略の次の展開は広告と言われています。レコメンドやターゲティングを行うプラットフォームとして、ソーシャルウェブ以上のものがあるでしょうか?Facebook Connectを活用することで、ユーザーに最適な広告を表示する準備は整っているはずです。そして当然、MySpaceやGoogleも同じ路線を取るだろうし、取ることができるでしょう。という訳で、広告プラットフォームもソーシャル化し、新たな競争が生まれるものと予想します。

まとめ

いかがでしたでしょうか?ソーシャルウェブにとって2008年は助走の期間、来年いよいよ勝負の年になります。欧米での今後の動きは、必ず日本にもやってくるでしょう。

ソーシャルウェブについて興味がある方はぜひ、SocialWeb Japanにご参加ください。

Read on...