Twitter の User Streams とは

  • 投稿日:
  • by
  • カテゴリ:

発表は何か月も前でしたが、最近になって対応クライアントがリリースできるようになってきて再注目を浴びてきた Twitter の User Streams

User Streams とはいったい何なの?スリップストリームの仲間?とか微妙なボケをかます人もいるかもしれませんけど、どういうものなのかかんたんに説明しつつ自作アプリの紹介などしていきたいと思います。

User Streams とは

かんたんに言うと、いつものタイムラインがほぼリアルタイムで更新される APIです。

公式のドキュメントは、開発向けの英語版だけですけど http://dev.twitter.com/pages/user_streams にあります。

ツイートをリアルタイムに取得できる Streaming API というものは以前から普通に公開されていたのですが、取得できるものはキーワード検索とかの限られたツイートだけで、いつもの自分のタイムラインを取ってくるのは不可能でした。
なので、Twitter 社と契約を結んだ一部の大手サービス企業(google とか)を除いて、普通のタイムラインをリアルタイムに取得するとかありえなかったわけです。

User Streams はこれまでのタイムライン取得と何が違うかというと、Web ブラウザでいうところ「リロード」が不要って点に尽きます。

これまでのタイムライン取得は、Web にしろ専用クライアントにしろ、定期的にサーバーへ問い合わせ、自分のタイムラインにあるツイートがあればユーザー側から取りに行っていました。
で、サーバー側は問い合わせを受けて、その内容に応じて新着分なり既存分なりのツイートを探して集めてユーザー側に送り返しているのです。このタイムライン取得というリクエストに、こないだのワールドカップで規制されたりして話題によく上る API 利用回数が消費されています。

これはたとえ話でも何でもなく、専用クライアントでも定期的にリロードしてタイムライン上のツイートを受け取って表示していたのです。いや、今でもこのあたりは変化ないので「表示している」ですね。見た目にわからないだけで、ブラウザで F5 押す操作を自動的に実行していただけと。

ところが User Streams のほうは、一度サーバーへリクエストしたらユーザー側から切断するまでずっと、自分がフォローしてる人のツイートが届いた瞬間に、ほぼタイムラグなくユーザーに横流ししてくれるのです。
stream(連続した流れ)というだけあって、こちらからいちいち「新しいの、ある?」とか訊ねるまでもなく、サーバーのほうから「はい新着ツイートでーす」とどんどん送ってきてくれるわけです。

いつも数件、フォローの多い人なら数十件のツイートが断続的に現れていたタイムラインを見慣れた人からすると、まるでチャットのようにポストされたてのツイートが次々に流れてくる様はとても新鮮です。
フォロー数の多い人なら、時間帯によってタイムラインが流れる速さになんとなく差があるように感じることも多かったと思いますけど、その「速さの差」が直接体感できる、といったらわかりやすいでしょうか。ポストの多い時間帯だとものすごい勢いでタイムラインが流れていきますし、ポストの少ない時ならタイムラインがほとんど動きません。

User Streams で受け取れるもの

User Streams のもうひとつの特徴は、「ツイート以外のイベントもリアルタイムに届く」です。

ざっと箇条書きで並べると、

  • ツイートの削除
  • DM の送信
  • 送信済み DM の削除
  • 他人からのフォロー
  • 自分のツイートの「お気に入り」登録
  • 公式 RT
  • リストへの登録・抹消
  • 自分のリストのフォロー / リムーブ

といった「イベント」もリアルタイムで通知されます。

操作ミスとかに気付いてポストしたばかりのツイートを削除する、なんてことは誰しも経験してると思いますが、User Streams を利用しているフォロワーがいれば「あ、このツイート削除したんだ」とその瞬間に知られるわけで、人によってはわりと恐ろしい感じです。
とはいえポストしたものはその時点で公開されるわけですし、さっき見たツイートが消えていれば誰だって削除したんだと気付くわけですから、ミスったツイートを誰にも知られず抹殺することは事実上不可能ですし。後で消さなきゃいけないようなヤバいポストはするなよってゆー当たり前のことをしてればいいだけです。

「お気に入り」登録、いわゆる「ふぁぼられ」や公式 RT なんかも、誰かが操作した瞬間に通知されます。
これは相手がフォローしてる・してない無関係に「自分のツイート」がふぁぼられ・RT されたものすべてが対象になるっぽいですから、手が空いたらふぁぼったーや favstar チェックしないと気が違いそうになるほどのふぁぼられ乞食にはたまらない機能ですね。あ、これは僕のことなんですけど。 毎日大量にふぁぼられてる人は逆に迷惑かもしれませんから、そういうのをうまいこと処理してくれるクライアントを探すしかないですね。チャーハン諸島とかいかがですか?

あと他人からフォローされた通知が来るのはいいんですけど、他人からリムーブ or ブロックされたよ通知は来ないのがちょっとアンバランス。せめてリムーブ通知だけでも来てくれれば「誰もリムらないで...でも誰からリムられたかは知っておきたい...////」なんて複雑な乙女心も満たせてド M なユーザー大喜びだと思うんですけど。

ほかにも自分の操作によるフォローやリムーブ、ブロック登録なんかも通知されるんですが、自分で操作してるものをリアルタイムでお知らせされても大半は「知ってるよ!」な情報ですからあんまりどうでもいいですね。悪党に自分のアカウントを乗っ取られて知らないうちに...といった最悪の事態にすぐ気づけるきっかけになるかも、という点では有用かと。

ただ肝心な点は、これらのイベントも対応したクライアントでなければ何も出てこないので意味がないってことですね。
これまでの専用クライアントは基本的に「ツイートをいかにうまく表示するか」という点にのみ注力してるものばかりで、それ以外のイベントに関しては知りようがなかったのもあって扱い方からしてそもそもノーマークだったりしますから、単に User Streams に対応しましたってだけの既存クライアントではこうしたイベントから生まれるメリットは得られないかもしれません。

どのみち、これらのイベントも「リアルタイム」に届くってことで、それが発生したときに User Streams 開いてないといけないわけですから、四六時中 Twitter に張り付いてるタイムライン監視員でもないと拾う機会もそれほどないかもですし。

User Streams の注意点

という風に、タイムラインをチェックするという目的においてはかなり最強に強まった感が漂いまくる User Streams ですが、万能というわけではありません。

まず第一の問題点は、いうまでもなく まだβテスト中 ということです。

クライアント作者とかが実験的に使う場合は公開されてる URL で試せるんですが、これはプレビュー版でサーバーのキャパとか超低いのでアプリとしてリリースするものには使っちゃダメよってことになってます。
リリースしたい場合は Twitter 社にメールして許可をもらえばいいんですけど、当然開発向けには英語しかサポートしてないですから、あとはわかるな的な。

もうひとつの問題点は、流速が速くなりすぎると取りこぼしが生じることです。

これは従来の TL 取得でも「取得漏れ」があったのであまり変わりがない感じですが、従来のほうは最新から何件とかを指定して「ツイートくれ」とリクエストしたものはだいたい確実に取ってこられたので、自分の TL の流速に合わせて取得間隔や件数を調整すれば取得漏れはほぼ防げました。

User Streams のほうは、ストリームとして流すより速くポストされまくると「流され待ち」のツイートがどんどんたまってきて、これが一定数(たぶん未公開)を越えるとスキップされて流されなくなるようです。
一応「多かったのでスキップしたよ。飛ばした件数はいくつだよ」という通知はされるので、気が利いたクライアントならその飛ばされた範囲を推測して従来の方法で再取得する、といった気の利いた処理をしてくれるでしょうけど、これはクライアント次第ですので過度の期待はできません。

ストリームに流せないほど大量にポストされてる状況なら、多少の漏れはスルーしたほうがユーザー的にも幸せな感じはしますし、自分で書いておいてアレですけどいうほどの問題点ではない気もします。
それに、上に書いたように「飛ばされた範囲を推測して再取得」というのは従来のクライアントではかなり難しい処理だったものが、ストリームから「順番飛ばしました」通知を受け取れることでやさしくなった、とも取れますから、総合すると問題の深刻さが軽くなったとも取れますし。

User Streams を体験したい

現時点で、正式に User Streams β版に対応したクライアントがいくつか存在します。
知っているかぎりだと以下のとおり。抜けがあったらすみません。

わりと Mac 有利な情勢で、その他の OS では何かしらのランタイムが必要になるのが現状です。というか、今のところ OS ネイティブアプリって夜フクロウさんだけなんじゃないかしら。ステキ。

最近の PC だと Java にしても Air にしてもじゅうぶん使い物になるパフォーマンスですし、ちょっと試してみるためだけでもインストールしても困りはしないと思います。
どちらかといえば実績豊富な Java がいちばん信用できるとこですし、そうなると「チャーハン諸島」一択ですね!手前みそですみません!ごめんなさい!

わりと一般論で専門的な話をすると、Win 用のクライアントは有名・無名を問わず Twitter の API レスポンスに XML を選んでる場合が多いんですけど(そのほうが開発が楽だから)、User Streams は今のところこれをサポートしてなくて JSON しか使えないんですね。
なので今の実装でレスポンスを解釈することができないので、JSON が解釈できるライブラリなどを付け足すか、いっそ XML を捨てて JSON に乗り換えるかというわりと大きな仕様変更・追加実装が必要になるので、対応はなかなかアレなんじゃないでしょうか。とか言ってたらサクッと対応してきたりしてまた赤っ恥かくことになるかもしれませんから、作者の人たちに期待しますとオトナ的なお茶の濁し方で曖昧な感じにしていきたいと思います。

公式のドキュメントによると、PC 向けのクライアントは User Streams への移行し、従来の REST API は補助的に使う程度であまり依存しないようにすることがもう既に推奨されていたりするので、特にフリーソフト作者の日曜プログラマの皆さんは腕に見せ所ですね。