1月18日、 Tech Crunch Japan などで ついに新しいタイプのFacebook Open Graphライフスタイルアプリが披露される という記事が公開され話題になりました。現在は 78のアプリが Facebook Timeline apps のページで紹介されています。
この、「Open Graph」とは何でしょうか。Facebook Developers にある Open Graph の項にも、この問いのシンプルな答えはないように思いました。本エントリでは、Facebook の開発者向けドキュメントを主な参考文献としながら、コンセプトとも仕様とも取れる「Open Graph」、「Open Graphアプリ」について考えてみたいと思います。
「Opne Graph」と「Open Graph Protocol」
まずは Open Graph に関わる用語の確認から入りたいと思います。Facebook の開発者向けドキュメントを参考にしていますが、わかりやすくするため大胆に詳細を省いたり、個人の見解を元に記述しています。専門用語はリンクを張っていますので、正しい理解のためにはぜひ原文もご参照ください。
Open Graph
Open Graphの概要を理解するために、Facebookの開発者サイト(Core Concepts › Open Graph)にある以下のイメージが役立ちます。
中心に位置するのがFacebookを利用するユーザー自身です。そしてその周りにある円(ノード)が Facebook が扱うことのできるオブジェクトです。オブジェクトの型は Built-in Object Types に説明があります。本エントリで説明する「オブジェクト」は Social Graph の構成要素という意味合いですので、ここに記載されている以外の、 User や Page といった Graph API で利用可能なオブジェクトも含むと考えてよいでしょう。
オブジェクトとオブジェクトを結ぶ線は、Open Graph の文脈では「アクション(またはエッジ)」と理解できると思います。線上に表示されているも記述のうち、動詞にあたる「like」「listen」「watch」「cook」は恐らく Built-in Action Types になると思われます(開発ドキュメントにはまだ「watch」しか記載されていません:2012年1月23日現在)。特に「cook」は Open Graph で承認された新しい動詞ではないかと思います(動詞の申請と承認については 「Submit for Approval」 を参照)。
図:Open Graph の設定画面で選択できる Object Types
ドキュメントの表現(expand, extend など)から推測すると、要するに「Open Graph」とは「Social Graph」という Facebook のコアとなる関係性データベースへの、「サードパーティーに対する拡張仕様」であると考えられます。拡張仕様といえば既にGraph API が広く使われていると思いますが、同APIが Facebook ソーシャルグラフへの「アクセス」を許可し、拡張性を提供しているのに対し、Open Graph は「ソーシャルグラフ内のオブジェクトやアクション」に対する拡張性を提供していると考えれば違いがよくわかると思います。ポリモーフィズムという概念を設計に使ったことのある開発者の方であれば、ここでの「オブジェクト」は、後述する「アクション」という振る舞い(メソッドオブジェクト)も含まれる、と申し上げても差し支えないかもしれません。実際に、アクションはその論理名(”cook” や “listen”、”like”)を設定できるだけでなく、プロパティまで定義されていくようです。
Open Graph Protocol(OGP)
SEOや集客の文脈では「FBO(Facebook 最適化)のメソッド」として紹介されることも多い(ような気がする)OGPですが、実体は一連のメタデータ仕様で、WEBページの内容をコンピューターが処理しやすいように定義する役割を持っています(追加の情報は当ブログ記事「次世代SEO「セマンティックウェブ」と Facebook OGP」をご参照ください)。Facebook OGPが外部サイト・Facebook間のデータ交換の仕様を定義したことで、外部サイトの情報をFacebookソーシャルグラフ内に取り込むことができるようになりました。PVやバイラル向上の施策として紹介される際のOGPは、普及のために Facebook がつけたインセンティブ(共有されるサイトがFacebook内でより多く、効果的に表示される)にフォーカスしたものです。
OGPの仕様は Open Web Foundation Agreement (OWFa) 0.9 に含まれています。Open Web Foundation(以下、OWF)はOpenIDの提唱者の1人でシックス・アパートに在籍するデービッド・リコードン氏などが2007年に設立し、 個人会員の他、Google、Facebook、Microsoft、Yahoo!、Salesforceが参加していますが、策定の中心となったのはFacebookです。
本エントリのテーマである「Open Graph」とのドキュメントでは、「サードパーティが、FacebookユーザーにWEBサイトやページを共有しやすくするため公開された Open Graph の先行バージョン」というような説明がなされています。実際に、OGPは Open Graph 中の Built-in Object Types と共通するものも多いです。ただし、Web関連の技術仕様をコミュニティベースの議論で開発・策定することを目的としたNPOで管理されている「ogp.me」と、Facebook という私企業が自社サイトの拡張を目的として策定する「Facebook Open Graph Protocol」は、厳密には別のものと捉えた方がよいと思います。そう考えることで Facebook OGP は Open Graph の部分集合であり、先行バージョンもあるという説明が理解しやすくなるのではないでしょうか。
Open Graph アプリの特徴
前項では、Open Graphはソーシャルグラフのサードパーティー向け拡張であり、オブジェクトへのアクセスを可能とする Graph API と違い、オブジェクトやアクションの定義に関するものである、というような説明をさせていただきました。
Open Graph を使った Open Graph アプリは「タイムラインアプリ」とも呼ばれ、その他のアプリと表現上区別されています。Open Graphアプリが持つ特徴は以下のようなものです。
- 独自に定義したオブジェクトやアクションを利用することができる
- ユーザーの、「タイムラインにアクティビティを表示する許諾」を得ることができる
以下で、それぞれについて書いてみたいと思います。
独自に定義したオブジェクトやアクション
Open Graphアプリでは、アプリ開発者が「Like(いいね!)」以外にも多様なアクションを定義することができます。また、アクションの対象となるオブジェクトも同様です。
現在のFacebook開発者ダッシュボードで表示されるアプリ設定画面には、「オープングラフを編集」というメニューを選べるようになっており、ここでアプリケーションが利用する Object、Action、Aggregations を設定することができます。Objectはアプリケーションがソーシャルグラフ内で共有する「モノ」であり、例えば「ニュース記事」や「料理のレシピ」、「楽曲」のような実体のあるものです。Action は「モノ」に対するアクティビティ(活動)を表します。オブジェクトが「ニュース記事」であればアクションは「読む」や「友人に推薦する」、オブジェクトが「料理のレシピ」であればアクションは「料理する」のようになります。これまではFacebookが用意したオブジェクト(links、、Aggregations はアクションがタイムラインに表示される際の集約方法(レイアウトなどの見た目)をカスタマイズする機能です。
Tech Crunchの記事に、1月19日に新しくリリースされたオブジェクトとアクションのペアが紹介されていますので例として抜粋します。
オブジェクトとアクションの例
- [商品]を買った(Eコマース)
- [イベント]のチケットを買った(チケット販売)
- [慈善団体/プロジェクト]に寄付した(寄付・募金)
- [場所]を/に訪れた/泊った(旅行)
- [コンテンツ]を共有した」(共有)
- [記事]にコメントした/[質問]に回答した(コメント/Q&A)
- [ユーザー名]と繋がった(専門家ネットワーク)
- [レシピ]で料理した(レシピサイト)
- [科目]について学んだ(Eラーニング)
※[]内がObject、動詞がAction、()内はサイトのジャンルです。
タイムラインにアクティビティを表示する許諾
Open Graph アプリはユーザーの許諾を得ることで、タイムラインにアクティビティを表示(投稿)することができるようになります。Graph API でも Permission を取得することでソーシャルチャネルに情報を投稿することができますが、タイムラインアプリのアクティビティ投稿はやや暗黙的です。Graph API を利用した投稿は、許諾を得た後でもユーザーの同意が必要である旨が、プラットフォームポリシー(日本語)に記載されています。
3. ユーザーから公開許可を与えられた場合でも、ユーザーに代わってアクションを実行する(コンテンツを公開する、イベントを作成するなど)前に、そのユーザーから同意を得る必要があります。
Facebookプラットフォームポリシー 「Ⅳ アプリケーション統合ポイント」
一方、Open Garph アプリ(厳密には、「Open Graph アクションを投稿するアプリ」)には独特のパーミッションとして、「publish_actions」というものがあります。Permissions のページには「Enables your application to publish user scores and achievements.」と記載されているのですが、Open Graph アプリのチュートリアルを見る限り、これが Open Graphアクションを投稿するためのパーミッションと考えて問題なさそうです。また、このパーミッションは Add to Timeline という Social Plugins でも取得可能です。以下に記述のサンプルを提示します。
■コード(XFBML)
■アウトプット(ボタン形式)
↑「タイムラインに追加」 を押すと表示が変わります。
■認証ダイアログ
このパーミッションを獲得することで、ユーザーのアクションに基づいたアクティビティを暗黙的にポストできるようになります(個別にFacebookの承認が必要)。これは Facebook が昨年の F8 で発表した「Frictionless sharing」というコンセプトを実現するものです。ユーザーはよく読むニュースサイトでを「タイムラインに追加(≒ publish_actions パーミッションを与える)」することで、毎回「いいね」ボタンを押さなくても「[ニュース記事]を読んだ」というアクティビティが共有されることになります。音楽アプリであれば聞くたびに、寄付アプリであれば寄付するたびに、自動的にユーザーのソーシャルチャネルにアクティビティが流れます。この機能は、大きなプライバシーの問題をはらんでいますが、「リアルな世界での行動とインターネットを結びつける」ための野心的な試みであると思います。
将来的には、認証さえすれば全ての行動をネットで共有することができるようになるでしょう(技術的には、ですけど)。ICカードを使って自動販売機でジュースを買えば買った商品が、映画館でチケットを読み取れば見る映画が、ネット上で共有される世界です。当然その多くは他人は知る必要すらないゴミデータですが、Facebookは Real-time Serendipity というコンセプトでデータの陳腐化を回避しようと考えているようです。難しいコンセプトなので私の知識では多くを説明することはできませんが、「ユーザーの大量の行動データから、ソーシャルグラフに基づいた正しい重み付けを行うことができれば、意図しない発見という価値あるデータを提供できる」という感じでしょうか。
独自のアクションを使うには
このような、可能性と危険性をはらんだ新しい試みを成功させるため、Facebookはとても慎重に事を進めています。ユーザーのタイムラインやフィードが陳腐な情報で埋め尽くされないよう、Open Graph アプリの開発パートナーを選別し、アクションを手動で認証しているそうです。
開発者ダッシュボードでもアクションの追加は自由にできますが、それが一般のユーザーにも見えるようにするためにはアクションをFacebookに申請し、承認される必要があります。この申請フローは英語ですが、ありがたいことに Oklahomer さんが日本語訳を公開してくださっています。レビューのガイドラインも記載されていますので、アクションの申請を検討するのであれば目を通しておいた方がよいでしょう。
参考:Submit for approval(Facebook開発者向けドキュメントの日本語訳とTips)
ただし、現在はベータ期間中のため Open Graph アクションは承認されないようです。このサイト(In the looop)も申請だけはしているのですが、ステータスは「確認中」のままです。
Step 4
ベータ期間中、タイムラインが全ユーザに対して実装されるまではOpen Graphアクションは承認されません。アプリケーションがレビューされると、Dev AppのOpen Graph DashboardとEdit Actionページでのステータス表示はApprovedもしくはRejectedになります。
ただし、アプリケーションの開発者自身は Open Graph アクションを使ったアプリや Social plugins が表示されます。私は In the looop のアプリケーション管理者になっているため、このサイトの下部に Recommendations Bar というベータ版の Social Plugin が表示されています。
図:Recommendations Bar表示イメージ
最後に
以上、最近話題になった Open Graph アプリに関して知っていることをまとめてみました。まだベータ版であり、かなり技術よりの話なので検証が不足している部分も多いですが、認識違いや翻訳ミスによる誤記などお気づきの方がいらっしゃいましたら naoto@looops.net までご一報いただけますと幸いです。
本機能について、文中で「野心的」という表現を使いましたが、ユーザーのリアルな行動が暗黙的にネットで共有されることのメリット・デメリットを、全て考え尽くすことはできません。元開発者としては、リアルな世界がネットという別次元によって抽象化され、同期し、拡張するコンセプトに強く惹かれるものの、その情報が一企業に集約されることに戦慄を覚えずにはいられません。
まあ、人間慣れるものなので10年後は当たり前になってるのかもしれませんが、大きな変化の過渡期にある現在を存分に楽しめる仕事をしていてよかったなあ、と思います。


































