ソーシャルグラフについての考え
原文:http://bradfitz.com/social-graph-problem/
著:Brad Fitzpatrick, brad@danga.com
協力・編集:David Recordon, recordond@gmail.com
日付:2007-08-17
訳: ringo at ce-lab.net
ここしばらく、私はソーシャルグラフについて考えをめぐらせている:
グラフを集める方法、分散化させる方法、汎用性を高める方法、などなど。
最近は講演とかでもしつこく言っているので、知ってる人も多いだろう。
私は、経歴とか表情、質問とかで説明の方法を変えるので、
これまでのスライドなどを使ったプレゼンではかなりうまく伝えてきたつもりだ。
しかし、ブログだと多様な人が見ているので、そんなわけにはいかない。
だから避けてきた。何かを外に出したら、「しかし、〜〜〜はどうなんだ?」と(固有名詞を使った)
コメントがあふれることも心配だった。そんな突っ込みは明らかに間違っている。
でも、ついにこの考えを脳からダンプして吐き出すときが来たんだ。
まず、これまでに何をプロトタイプしたか、次に何を次に作りあげたいか、を言う前に、問題文を宣言し、
(その問題を解決するために必要な)仮定を述べたい。
目次
- 問題文
- ゴール
- ゴールでないもの
- 仮定
- 開発の現状
- 将来
- あなたが貢献する方法
- 結論
- 関係ある仕事
問題文
伝統的なアプリに加え、ソーシャルグラフの情報を必要としていたり、さらにそれを活用して多くの価値をもたらすタイプの、さらにますます多くのソーシャルアプリが登場してきている。私が「ソーシャルグラフ」というのは、Wikipediaの説明にもあるし、あとでもっと詳しく説明するが、すべての人同士の関係図のことを意味している。不運にも、網羅性のある、分散化されたソーシャルグラフは一つも存在しないし、もっといえば、相互互換性のある複数のものすら存在していない。何百ものばらばらなソーシャルグラフがあり、それらの品質は低く、壁の中に隠されている。
いま、あなたが、面白くて役に立つサイト(例えば、友達がどこにいつ旅行に行こうとしてるのかがわかるサイトみたいな)を作ろうとしていて、そのサイトが、ソーシャルグラフ(たとえば、dopplr.comみたいな)を必要としているとしてみよう。そうしたら、主な機能を作るよりも難しい問題に突き当たる。ユーザーの名前とパスワード(多分OpenIDを使えるけれど)、友達を誘う機能と、友達リスト関連の雑多な機能が必要だ。多分emailのアドレスを尋ねる必要があるし、確認用のemailを送る必要もあるだろう。ユーザー名を忘れたときの対応などなど・・問題文を端的に言うならこうなる:「みんな、あらゆるサイトで友達の情報を入れるのには辟易してる。それだけじゃない。”ソーシャルアプリ”を作るのは、大変すぎるのだ。」
この問題に対するFacebookの答えは、世界中のアプリはすべてFacebookのアプリであれと言っているようだ。Facebookは、確かにすばらしいプラットフォームだし、技術的にもすごい。でも、web2.0の開発者コミュニティは、みんながFacebookの奴隷になることをためらうし、彼らの善意や、いつでも使えることや、将来の所有者やルールが変わらないことについても心配が残る。私は、このためらいには、確固たる根拠があると思う。ソーシャルグラフの中央集権的な所有者という考え方は、インターネットには良くない。
私は、Facebookを廃止せよと言っているのではない。とんでもない。Facebookはすごい製品だし、私も好きだ。しかし、グラフは、Facebookの外になければならない。MySpaceも、非常によいデータをたくさんもっている。しかし、すべてではない。LiveJournalやDigg, Twitter,Zoomr,Pownce,Friendster,Plaxo, などリストはつづく。もっと大事なのは、これらのサイトは、ソーシャルグラフを所有すべきではないということだ。誰も所有すべきではない。単に存在すべきなのだ。
ゴール
- 究極的には、ソーシャルグラフは、みんなの財産であり、どのサイトからも使えるべきで、どっかの企業とか組織が、所有者であるべきではない。
- 非営利のオープンソースソフトウェア(ライセンスも非営利)を使って、ソーシャルグラフの情報をあらゆるソーシャルネットワークサイトから集め、混ぜ合わせ、再配布し、世界的なグラフに集合させる。
こうして、公開されたAPIを使って、他のサイトがソーシャルグラフにアクセスしたりダンプしたりできるようになり、更新された分を随時受け取れる(update stream)ようになる。
- 最初は、非営利のサーバやデータベースは中央に(データセンターに)置かれるかもしれないが、デザイン上は、どの場所でも動き、情報が共有されている必要がある。
svnではなくgitのようにだ。
そうすれば、あなたが使うサイトのAPIはあなた次第となる。自分で動かしても良いのだ。
- 生のデータからグラフの解析をしたくない開発者のために、上位レベルのAPIが必要だ。
- あるノード、たとえば"LiveJournalのbrad"が与えられたとき、それと同等のノードを返す機能。
LiveJournalの"brad"と Voxの"bradfitz"と 4caa1d6f6203d21705a00a7aca86203e82a9cf7a (これは私のFOAF mbox_sha1sumの値である)が同等だと返す。これについては、私のスライドで詳細に論じている。
- ノードから出ているエッジと入っているエッジを知る機能。すべての外に出て行くエッジ(権限主張、事実関係、友達関係、おすすめなど)と中に入ってくるエッジを含む。
- あるノードと同等のノードの友達全部を調べて、そのすべての友達の同等のノードを見つけ出し、タイプごとにフィルタする機能。
これはステップ1とステップ2とステップ1を1回の呼び出しで組み合わせたものだ。たとえば、 LiveJournalのbradを指定すると、Bradのすべての同等のアカウントから、FOAFのmbox_sha1sumかTwitterのノードになっているすべての友達を調べて返す。(訳注:ようするに、ソーシャルネットワークサービスの種類にかかわらず、「自分の友達すべて」という概念に対して検索をかけられるようにするということ)
- 欠けている友達をさがせるようにする機能。あるノードを与えられたとき、同等のすべてノードを展開して、友達の情報を集め、さらにそれを展開して、欠けている友達がいる場合はそれを報告する。これは、 "ソーシャルネットワークサービスのsyncをする"ためのAPIだと言える。(訳注:スライドに詳しい説明あり)これによって、FriendsterにもMySpaceにもいるが、お互いにMySpaceでは友達としての関連づけがされていない場合に、それがわかるようになる。
もっと一般的、開発者向けにいえば、これまで考えることもできなかった種類のアプリケーションを作ることができるようになるということだ。
- エンドユーザのためには
- ユーザーは、dopplr.comのようなソーシャルアプリに最初にログインするときに、必要ないけど理想的にはOpenIDを使うのだが、こんなダイアログが出てくる:
「公開されてる情報によると、あなたはすでに28人の友達をdopplrに持っているようです。下に示す理由によって、彼ら(の名前を友達リストに最初から入れるのを)おすすめします。」ここでは、どの人と友達になる? あるいは「全部を選択」する?
さらには、dopplrを使っているときに、他のサイトで友達になったら、dopplrを使う度に、「この人を友達にしますか?」と質問されることになる。
あなたと友達は、他のところで友達関係であることを公開しているのだから、わざわざ再度登録する必要はないのである。
いくつかのサイトは、これを行き当たりばったりのハックなやりかたで同じようなことをやろうとしてる。(LiveJournalのユーザー名を入れたり、
メールのパスワードを入れさせたりといった方法が使われているが、美しくないし、このやりかたではすべてに対応できない。)
- サイトが協調用のAPIを提供しているかどうかにかかわらず、
自分のソーシャルネットを管理するための、エンドユーザー用のツールを提供する。(多分ブラウザアドオンになる)。
それぞれのツールはsyncされるが、ユーザーのポリシーは適用される。
- グラフの情報は、PC上で操作しやすいドキュメントの形式にする。(グラフという言葉を見せる必要はない)
ゴールでないもの
- Facebookを置き換えることはゴールではない。実際、私が話した中で、Facebookを使っているほとんどの人は、すでに公開されているデータに対してもうちょっとアクセスしやすくしたいと思っているし、(Facebook上の)サイトの所有者は、どんなデータでさえも1個の所有者のところに閉じこめておくことの怖さを緩和したいと考えている。
Facebookと、このプロジェクトへの参加について話した感じでは、最初は非常に期待できる感じだった。
- ソーシャルネットワークサイトを作ったり、エンドユーザー向けの面白いものを作ることはゴールではない。
むしろ、Dopplrのような何千ものソーシャルアプリが花咲くために必要な内蔵を作ることだ。ひとつのことだけをうまくやろう。
ちいさなばらばらのグラフを1個のおおきなソーシャルグラフに統合して、広く使えるようにしたほうが、みんなのためになる。
- Plaxoを置き換えることはゴールではない。
- 〜〜〜を置き換えることはゴールではない。
仮定
- ソーシャルグラフは、公開されたノードと、非公開のノードと、公開されたエッジと、非公開のエッジを含む。
現在は公開された情報だけを対象とする。いまは他の陣営に自由に公開できるのはその情報だけだからだ。
公開された情報だけで問題を100%解決することはできないが、90%は解決できるはずだ。
非公開情報はあとで対応すればいい。もっと高いレベルにおいて。現在は公開情報だけだ。
- さらに、現在は友達の情報だけに焦点を絞る。movemydata.orgで扱ってるような写真とか、誕生日とか住所とか興味とかは最初は扱わない。
グラフの中に、グラフ本体の情報ではない情報や、友達関係をあらわすわけではない情報を扱うという計画自体はある。ただしそれらはかならずフェーズ2になる。
- 協力的なサイトとそうでないサイトがある。
いままで話した感じだと、小さなサイトは、自分たちのグラフが不完全で特別なものではないと考えているため、一般的に協力的だ。
彼らは自分たちの仕事をするために単にソーシャルグラフを必要としている。
その情報がどこから来ようと興味はないし、比較的小さなデータを、グローバルに教諭されたグラフをもっと良くするために提供することを気にとがめたりしない。
それに対して、協力的でないサイトは、すでに大きくなっているグラフを所有している人たちで、この話題に対しては冷淡である。
「協力的でない」というのは「それをやっつけようとしている」という意味ではないことに注意してほしい。単に優先順位が低いだけだ。
いずれにせよ、いつでも、どちらの態度もありえるだろう。
- 世界は、一気呵成に誰かが言った "ソーシャルネット相互通信プロトコル" とか小気味よいXMLフォーマットを使うようになったりしない。単にそういうことは起こらない。
データを集めたり変化を知らせたりするために必要なあらゆる手段がうまく動くことが必要だ。
素敵なプロトコルや、XML/YAML/JSONのデータ形式はきっと役立つし、すでに始めているサイトもある。
でも、ほとんどのサイトは最初は協力的ではないし、たとえばMySpaceとかはずっとずっとこれをサポートしないだろう。
最初はばらばらに起こって行き、同じプロトコルを話すサイトは存在しないだろう。
言うならば、このプロジェクトは、例えばwidgetなどで使われるあらゆるデータの内部ではオープンスタンダードやmicroformatsを使うということだ。
- ほとんどのユーザーはXMLやプロトコルや標準やデータ形式や中央・分散の議論やサイロやロックインといった話題には興味がないだろう。
このドキュメントを読んでいるあなたは、普通のユーザーではない。
普通のユーザーに届かせるには、価値を提供しなければならない。機能、簡単さ、かっこよさ、便利さなど、他で得られないものだ。
良いデータは良いユーザーをもたらす。良いユーザーは良いデータをもたらす。
この立ち上げをうまく進めるためのアイデアはたくさんある。
後述するが、幸いにして、良いデータが、すでにAPIなどを使って、公開された情報を入手することがすでに可能だ。
- ブラウザアドオンや何かのアプリをダウンロードさせるのは、良い始め方ではない。
最初はwebでやらなければならない。
いくつかの(協力的でない)サイトに対してはブラウザプラグインが必要になるかもしれないが、ほとんどは必要ないだろう。
- ブラウザアドオンは、協力的でないサイトにおいて、友達を作ったり解消したり自分のデータを取得したりといったことのためにつかわれそうだが、
そのブラウザ(つまりIPアドレスやuser-agent文字列)は彼らのものでないデータを集めるためには決して使われないだろう。
たとえば、MySpaceのようなサイトで友達を集めるのは良いが、友達の友達の情報をスクレイピングするのは、あまり良いやりかたではない。
なぜなら、それは彼らが入力したデータではないからである(規約に反する)。
それは友達が入力したデータか、MySpaceが入れたデータのどちらかである。アドオンをダウンロードしたユーザーのものではないのだ。
- ユーザーは、いつでも「自動的に同期」したいわけではないということがわかっている。
人々は、別々の目的のために別々のサイトを使うのだ。「友達」の意味はサイトごとに違う。
ゴールは、生のデータを提供することであり、その上に(アプリが必要とする)どんなポリシーでも使えるようにすることだ。
開発の現状
2007年8月16日においては、上記の多くはプロトタイプできている:
- 5つの大きなソーシャルネットの情報を入手して、グラフをモデル化した
- 上記のAPIを使って実際にプロトタイプを動かした。(最適化、キャッシュ、並列化、などまだまだやることはあるが、正しさを最優先としている)
- 他のサイトでの関係をもとに、LiveJournalとVoxに欠けていた友達を探すことができた
- MySpaceで使えるFireFoxのプラグインを作り始めた。
- 公開ノードの情報、同等性の情報、自動的には取得できない関係性などを追加できるサイトの開発に着手した。
(統計の情報やwidget、ブラウザアドオンのダウンロードなどをはじめとするユーザーが行きたくなるような仕掛け、同期ツールなどを含む)
- ....
将来
David Recordonは、ほぼこの種のことをするためにSixApartに移籍した。Plaxoはこのために面白いことを準備している。結果的には、各企業は、Movable TypeやWordpressを使っているブロガーがコメントスパムを排除するために使える、信用や名声に関するAPIこの(ソーシャルグラフ)データの上に無料あるいは有料のサービスを提供できるようになる(OpenIDの認証をうけたコメントであれば、そのコメントを書いた人が良いノードかどうかがわかる)
いずれにせよ、最近では多くの人が、ソーシャルグラフに関して仕事をしていて、異なるアプローチをしている。複数のグループ、おそらくOpenIDに集まってるひとと同じぐらいの数が、一緒に仕事をすることになるのはほぼ確実だ。
あなたが貢献する方法
君はソーシャルネットワークのサイトを運営していて、ノードとエッジの情報を持っている?あるいは、APIを試してみたい? ぜひ話をしよう。Google Groupに参加してほしい。
テッキーなウェブとかツールじゃないものを試してみたいエンドユーザ? ここに来るのはちょっと早かったかも・・誰がこれ(ソーシャルグラフ)を構築するかにかかわらず、テスター向けのベータアクセスはもうすぐアナウンスされるだろう。
結論
私は興奮している。このようなものからどれだけの利益を得られるかを考え始めて欲しい。すごく良いものになるだろう。
関係ある仕事
コメント?
コメントが欲しい。Davidが作ってくれたGoogle groupに参加したらどうかな?