Facebook::OpenGraphの1.00を出して1ヶ月ちょっと経ちましたが、モジュール名にOpen Graphという単語を使った為に、Open Graphアクションを用いる、いわゆるOpen Graphアプリのみに対応したモジュールに見えてしまうというのが気になっています。このエントリでは、Facebookのいうソーシャルグラフとは何か、初めてOpen Graphが公開された頃の定義は何か、そして2011年のアップデート以降のOpen Graphの定義がどうなっているのかを整理し、Facebook::OpenGraphという名称に決めた理由を説明します。

ソーシャルグラフ

Facebookが持つソーシャルグラフとその定義について、最初に公表されたのは2007年に開催されたf8でした。定義はその後のドキュメントにも書かれている通り、「人々や人々が周りの物事に対して持つコネクション(繋がり)」となります。Brad Fitzpatrick氏による定義「the global mapping of everybody and how they're related」と違い、人と人の関係だけでなく、人と物事の関係も含まれる点が特徴的です。
そのため、Facebookのソーシャルグラフを示す場合、それはfacebook.com上での人々の繋がりや、彼らがfacebook.com上でいいね!するなどして関わりを持った物事の繋がりを指します。それに対し、広義でFacebookのソーシャルに言及する際は、後述するOpen Graph ProtocolやOpen Graphアクション/オブジェクトによって、facebook.com外部で形成されてFacebookへ持ち込まれた繋がりも含まれます。

2010年当時のOpen Graph

Open Graphについては2010年のf8で最初に公表されました。この模様は「f8 Conference Keynote Speech - Recorded 21st April 2010」で視聴することができます。

散在するソーシャルグラフと、それらを繋いで生まれるOpen Graph

1回目のf8で紹介されたソーシャルグラフのコンセプトは、人や物事の持つ繋がりを全てマッピングできれば、相互に繋がった巨大なグラフが形成され、全ての人々が繋がっていることが分かるというものでした。しかし現実には、色々なサービスがソーシャルグラフの部分部分を形成しています。たとえばf8内で言及しているのは以下の通りです。
  • Facebookのソーシャルグラフは、人々の繋がり
  • Yelpのソーシャルグラフは、スモールビジネス関連
  • Pandora Radioのソーシャルグラフは、音楽関連
  • ニュースサイトのソーシャルグラフは、ニュースコンテント関連
これらのサービスが持つソーシャルグラフを繋ぐことができれば、webはもっとソーシャルで、パーソナライズされ、構造的に意味を持つものになるというのがf8での発表内容で、そうして繋がれたソーシャルグラフ群がOpen Graphです。

Open Graph Protocol

Open Graphを形成する上で最も重要なのがOGP(Open Graph Protocol)で、このメタタグは、任意のwebページが現実世界のどのオブジェクトを表すのかを定義します。これにより、FacebookユーザがOGPを埋め込んだwebページをいいね!した場合、ユーザが何をいいね!したのかという詳細情報がFacebookに伝わり、ユーザとオブジェクト間に繋がりが形成されます。
ユーザが自分の興味のある物をいいね!するという点では、facebook.com内なのか外なのかという違い以外、Facebookページをいいね!するのと何も代わりはありません。そのため、OGPを埋め込んだページにはFacebookページと同等の機能が与えられ、ステータス投稿などによって、いいね!したユーザのニュースフィードに対して更新情報を流せるようになっていました。
※現在、この機能は廃止されています。が、なぜか手書きでメモを取っていたノートが残っていたので、詳細はこちらをご覧ください。真ん中に居るのはホマ象くんです。リンク先で大きいサイズのを見られます。
名称未設定 0

Graph API

こうして外部の情報も取り込めるようにソーシャルグラフを拡張したものがOpen Graphで、そのグラフへアクセスする手段として発表されたのがGraph APIです。それまでのFacebook APIはLegacy APIとして残され、この時公開されたGraph APIが、いま私たちが使っているものです。
また、このブログでの和訳資料は2011年のf8以前のものが多く、このブログ中でOpen Graphと呼ぶ場合は、この当時の定義に従っている場合が多いです。(「Open Graphに触れる 1:基本」など)

2011年のOpen Graph

Open Graph アクションとオブジェクト

2011年9月のf8で、新しいOpen Graphのβ版が公開されました。2010年時点のOpen Graphでは、OGPによって表現できるオブジェクトの型は限られていましたし、それらオブジェクトに対してユーザが取れるアクションは、いいね!のみでした。
この新しいOpen Graphでは、OGPで表現できるオブジェクトの型をアプリ毎に定義できるようになり、オブジェクトに対して取れるアクションも、アプリで独自に定義できるようになりました。
  • 曲(オブジェクト)を聴いた(アクション)
  • クッキー(オブジェクト)を料理(アクション)した
  • 映画(オブジェクト)を視聴(アクション)した
など、現実世界での人と物事の繋がりを柔軟に表現できるようになり、以下のキャプチャのようなグラフが形成できるようになっています。

attachment

このf8の全体については、私のレポート「Facebook f8に参加してきました!」もご覧ください。

拡張部分の一人歩き

2011年はこれだけの変更だったと言ってしまえばこれだけです。アプリ毎にOGPを独自に拡張できるようになり、そのオブジェクトに対するアクションを、いいね!以外に独自定義できるというのが肝で、2010年に発表されたOpen Graphの延長上にあるのに変わりはありません。当時の公式ブログには以下のように発表されています。
In 2010, we extended the social graph, via the Open Graph protocol, to include websites and pages that people liked throughout the web. We are now extending the Open Graph to include other actions and objects created by apps and enabling these apps to integrate deeply into the Facebook experience.
2010年、私たちはソーシャルグラフを拡張し、Open Graph Protocolを利用することにより、人々がfacebook.com外部でいいね!したページをも取り込めるようにしました。そして今、アプリによって定義されたアクションやオブジェクトをOpen Graphに取り込めるように拡張し、それらアプリがFacebook体験に深く関われるようにしました。
当初、このOpen Graphアクションを実装したアプリを、FacebookはTimeline App(タイムラインアプリ)と呼んでいました。Open Graphアクションを投稿すると、それがユーザの行動としてタイムライン上に表示され、それが月単位や年単位で要約されるようになっていた為です。(のちにβ版のまま終わってしまうAdd To Timelineプラグインなど、Beaconの復活を思わせる機能を推していたのもあると思います。)
ただし、このとき発表されたタイムラインとOpen Graphアクションの連携が話題になったこともあり、色々なメディアでもOpen Graph拡張部分のみが伝えられ、新しいOpen Graphアクションを実装したアプリだけをOpen Graphアプリと呼ぶようになってしまいました。

現在

そういった影響もあって、今ではFacebook自身のドキュメントを見ていても、Open Graphと言えばOpen Graphアクションの実装を指す場合が多いようです。ただし、2010年当時からの厳密な定義に従えば、OGPによってfacebook.com外部の情報も取り込むようにソーシャルグラフを拡張したものがOpen Graphで、2011年のOpen Graphアクション・オブジェクトはその延長に過ぎません。
今現在も公式ドキュメントの片隅にその名残は残っていて、Graph APIのドキュメントでは以下のように紹介されています。
Everything in the Open Graph has an ID. You'll notice that the path that's selected is in the form /<your facebook id>. This is how you can make an API call that addresses any item in the graph that you have permission to reach. In the Graph API Explorer the results can contain links to other items.
Open Graph上の全てのものにはIDが振られています。 /ID の形式で指定したパスがそれを示していることに気付くでしょう。
851562_375695515876658_210317132_n
というわけで、私たちがいつも graph.facebook.com/ID で指定しているものはOpen Graph上のオブジェクトであり、ここでのIDはOpen Graph上のユニークIDであると分かります。というわけで、Open GraphにアクセスするGraph APIのクライアントモジュールということでFacebook::OpenGraphというモジュール名になっています。あとは、既存のモジュールでFacebook::Graphという名前が取られていたのが実は大きいです。。。
長くなりましたが、そういった理由から、Open Graphアクション周りにとどまらず、Field ExpansionBatch Request、 FQLFQL マルチクエリ、Open Graph Action投稿、Object API(日本語未訳)など、Graph APIが提供する様々な機能もサポートしていますので是非試してみてください。細かい用法についてはまた別の機会に解説しますが、まずは各メソッドのテストを見て頂くと分かるかと思います。