Kentaro Kuribayashi's blog

Software Engineering, Management, Books, and Daily Journal.

2004 年の SNS 流行を振り返る、あるいはメタ SNS の展望

2004 年は、ブログが本格的に普及していった年であるとともに、本年初頭に現れた orkut に端を発するソーシャルネットワーキングサービス(以下、SNS)流行の年としても記憶されることになるでしょう。というわけで、その SNS を少しふりかえってみたいと思います。

SNS 乱立の問題点

orkut の流行と時期を同じくして、日本国内においても Gree, mixiキヌガサといった同様のサービスが現れ、流行しました。流行の当初はもの珍しさもあって嬉々として誘いに乗り、プロフィルを細かく埋めていった者も、だんだんとその不毛さに気づくことになります。というのは、各 SNS の目的とするところ自体は実際問題としてそう変わるものではないので、それぞれに同じようなプロフィルを記入することになるからです。また同様に、サービス主体が多様化したところで利用者側の人間関係が多様化するわけでもなく、となれば、どの SNS でも結局は同じようなプロフィルに友人関係が記述されるだけであり、もちろん各サービス独自の機能による差別化はあるものの、あるひとの/あるひととあるひととの関係のデータを集積する機能としては似たり寄ったりで、単に混乱しているという状況であるとすらいえます。

問題点解消への試み

上記に述べたような問題点は、2004 年も終わろうとするいまになってことさらに言い立てるまでもなく、早い段階ですでに危惧されていたものでした。実際に提示されていた方針に、明示的に提示されていたわけではない方針とともに、書き出してみます。重複する、あるいは、レイヤの異なるものもありますが、とりあえずこだわりません。

1) 新たにオープンな SNS を作る
たとえば「OpenSNS - オープンソースのソーシャルネットワーキングシステム: blog.bulknews.net」にて語られている OpenSNS や、オープンソースSNS 実装である WaWaWa などがあります。いま、それらはどうなってるのでしょうか……。
2) API の公開による、情報のオープン化
キヌガサによる Web サービス API 公開の試みがあります。さっそく対応する Perl モジュール Webservices::Kinugasa がリリースされたりもしました。
3) 各 SNS のデータフォーマットの統一化
各サービスが共通のデータフォーマット策定に取り組み、データの再利用が容易になればいいなという案が囁かれたりはしたものの、実際問題としては難しいでしょう。
4) 各 SNS 間の差異をプログラム的手法でもってラップする
上述の通り、SNS は各種あるとはいえ、その目的とするところはだいたい同じであり、差異化のために細々とした機能が付け加えられているといった状況です。それならば各 SNS 間の差異をラップして、統一的なインタフェイスでもって扱えるような手法を開発してしまえばよいではないか、という方向性です。

問題点解消への展望

上述の試みのうち、2 と 3 については、各サービスの事業としての方針に関わる話ですので、外野があれこれいってもしかたないことであると思われますし、1 についてはすでに取り組みがされていることですので、ここでは 4 の方針について少し考えてみます。

SNS を統一的に扱うには、まず共通している箇所を抽出する必要があります。また、抽出したデータ項目について、それらを適切に、かつ、扱いやすい形で表現する形式を定める必要があります。ここでは、その表現形式としてFOAF を用いることとします。もちろん、いちから形式を策定することも可能ですが、FOAF というすでに存在する表現形式を利用する方が、とりあえずの指針がはっきりすると思われるからです。

やや具体的に話を進めます。分かりやすく図式するために、CPAN の階層的な例でもって説明します。Perl モジュールにより、統一的なインタフェイスを用意するとなれば、ごく簡単な例を示すならば、主なものとしては以下のような構成になるでしょう。

WWW::SNS モジュールには、共通の項目を扱う抽象メソッドを定義することにより、統一的なインタフェイスの提供を可能にします。そのサブクラスである各 SNS 対応のモジュールにより具体的な実装は行います。また、それぞれの提供する独自サービスへの対応もそこでなされるといいでしょう。

WWW::SNS が用意すべき項目には、たとえば以下のものが考えられるでしょう。一般的な名称と、それに対応する FOAF のプロパティ名を対にして示します(一部、FOAF 外の語彙による拡張が含まれます)。

項目名 FOAF における名称
surname
firstName
ニックネーム nick
性別 gender
自己紹介 dc:description
メールアドレス mbox
メールアドレスの SHA1 ハッシュ値 mbox_sha1sum
ウェブログ weblog
写真・似顔絵 depiction
友人たち knows

もちろん、上記以外にも様々な項目があるわけで、そういったものを扱う場合には、新規に語彙を策定する等の対応が必要になるでしょう。

このようにして各 SNS 間の差異をラップし、かつ、それ自体が SNS 的なデータを表現する FOAF による表現を用いることにより、メタ SNS とでもいうべきネットワークを、あるいは構築することも不可能ではないかもしれません。もちろん、実装には大変な困難が伴うことは容易に予想されるわけですが…。

簡単なデモンストレーション

ここで、より具体的な例を示すため、SNSFOAF をつなぐデモンストレーションを行ってみます。とはいえ、一朝一夕に上述のような方針をもとにしたものを作成できるわけもないので、mixi を扱う Perl モジュールである WWW::Mixi を利用し、とりあえず、mixi のデータを決め打ちで FOAF らしきものを作成してみます。

まず、以下に示すモジュール WWW::Mixi::FOAF を作成しました。このモジュール自体はこのデモンストレーションのために作成したものであるため不十分ですし、また、そもそも上述の方針からまったく外れたものですので、本論の流れ的には無意味なものです。ただし、mixi に記述したプロフィルを単に FOAF に変換したいという需要にはある程度こたえることができるかもしれません。

利用例を示します。以下のコードを実行すると、指定したファイル名で、mixi プロフィルを FOAF に変換したファイルを作成します。

#!/usr/bin/env perl

use strict;
use WWW::Mixi::FOAF;

my $foaf = WWW::Mixi::FOAF->new(@ARGV[0..1]);
   $foaf->save('foaf.rdf');

上記スクリプトを実行すると、以下のようなファイルが作成されます。

一応、FOAF らしき体裁のものができました。ただし、繰り返しになりますが、この例では SNS の持つひととひととのつながりをうまく表現できているとは思えませんし、また、表現力にも乏しいと思われます。ここでは、とりあえずなにか形のあるものを披露することでイメージをつかみやすくなるのではないかということで、このようなものを作成してみました。

最後に

本論では、SNS の流行を振り返ると称しつつまったく振り返らず、SNS 間の差異によるパーソナル/トランスパーソナルなデータ集積における重複、拡散等の無駄を解消するための各種試みを紹介するとともに、各サービス間に強引な方法でもって統一的なインタフェイスを構築する展望を描いてみました。また、データの囲い込みによるユーザの囲い込みという昨今の流れに棹さしたいという気持ちもあります。しかし、実際問題、その実装には大変な困難が伴うことが予想されますし、また、そもそも的なことをいえば、こんなものがイラネという気もしたりします(僕が現在利用している SNS は、ほぼ mixi だけという状況なので!)。しかしまぁ、少し大きな話を考えたくもなる年末ということでひとつ、とまとまらないまま投げっぱなして終わります。おしまし。