in 未分類

Twitterクライアントとは何か 【Twitterクライアント開発マン@ADVENTAR】

この記事はTwitterクライアント開発マン Advent Calendar 2015 3日目の記事です。

Twitterクライアントと聞いて、つい参加しました。
自分は「ツイッターするやつ」なんてandroid向けのクライアントを作ってるわけですが、ご存知でしょうか?

さてTwitterクライアントについて何を書こうかと考えたわけですが、ネタが全く思いつかない・・・・。ということで「Twitterクライアントとは何か」について書いていこうと思います。

Twitterクライアントとはなにか

Twitterクライアントとはなんでしょう。Twitterをするためのツールですね。
ではTwitterクライアントとしての機能には何があるでしょう?

Twitterクライアントに求められる基本的な機能

Twitterクライアントが実装しなくてはいけない機能には以下の様なものがあります。

  • HTTP & jsonパーサー
    HttpとjsonのパースはTwitterAPIを使う上で必要不可欠です。
    ただ、これらは大体Twitter4jなどのライブラリーでなんとかなります。(マジTwitter4J最高!)
    またHTTP 2.0に対応したりするとよりいい感じになるかもしれません。
    また最近ではIPv6問題が発生する可能性を考慮する必要も出てきました。

  • 画像処理
    TLには画像がたくさん含まれます。これらの画像を効率よく取得し、表示する事がツイッタークライアントには要求されます。特にアイコンなどは短時間で同じ画像が利用されるため、毎度サーバから取得して表示せず、キャッシュしたデータを使いまわせるようにします。また、androidの場合ListViewの特性を理解しつつ通信が発生する為に別のスレッドで処理しなければいけない為Twitterクライアント開発の鬼門であると思われます。

  • UI
    UIが一番ユーザにTwitterクライアントの差異を感じさせる部分かと思います。お気に入り(いいね)をどの部分で実行するのか、ツイート画面をどのように表示するのか、アニメーションを付けてスタイリッシュさを演出するなど、いろいろな差が生まれる部分であり、利用するユーザ層によって好まれるUIが異なってきます。UIはどうしろこうしろ言えない部分で開発者の趣味による部分が大きいです。またTwitterが要求しているDR(Display requirements)にも従う必要があります。(一応・・・)
    必要そうな画面

    • タイムライン(home,mention,DM,List,Search)
    • ツイート作成
    • プロフィール
    • トレンド

  • 画像投稿
    Twitterでは画像の投稿が可能です。文字列をツイートするのは当たり前ですが画像に関しては単純に画像ファイルを指定してTwitter4jに任せるだけでなく画像の容量制限(Twitterでは3MB)におさめるために画像のリサイズが必要となります。

  • ミュートやブロック
    RestAPIのみのクライアントでは関係ないですが、ストリーミング対応になるとミュートやブロックも意識しないといけなくなります。ストリーミングでは公式のミュートやブロックと関係無くすべての情報が流れてきます。このためミュートやブロックなどの情報をアプリ側で事前に保持し、ミュートやブロック対象のツイートが来たらそれを弾くように処理をしないといけません。

Twitterクライアントに求められる、おまけ的な機能

  • UserStream
    現状TLの情報を取得するにはRestAPIによる、最新のツイートを数件分取得する方法が一般的ですが、これとは別にTLを自動的に更新することが可能UserStreamがあります。
    UserStreamはHTTP通信を維持し続けほぼリアルタイムに最新のツイートや(ブロックやミュートなどの)状態変化の取得を可能とします。
    androidなどのモバイル端末では通信をし続ける為、電池消費が多くなる傾向がある反面、rest APIの取得制限(レートリミット)に引っかからないメリットがあります。
    TwitterがAPIの規制を厳しくした為、需要が大きくなってきました。

  • 通知
    通知はリプライや、DM、お気に入り、RTなどの自分に関わるツイートに反応があったことを伝える機能です。通知のもととなる情報はRest APIで直接取得することは不可能ですので「GET statuses/mentions_timeline」などを定期的に監視することで差分から新規のリプライを検出し通知するなどの工夫が必要となります。またUserStream対応のクライアントであれば、リプライ、DM、お気に入り、RT、引用RTなどの情報が取得可能ですので、そこから通知をすることが可能です。ただしUserStreamの接続を維持する必要があり、モバイル端末ではコストが高い機能であるといえます。またクライアント開発者がサーバを用意しユーザのストリーミング接続をサーバで行うことができればPush通知をすることが可能ですが、開発者のお財布が危険です。

  • 画像ビューワー
    TLで流れてくる画像を表示する必要があります。ブラウザを開くだけでもいいですが、通常アプリで見れるほうが楽ですし、好まれます。
    またTwitterでは最大4枚の画像が投稿できるようになり、これらの画像を連続して見れることも重要となってきました。更にTwitter以外の画像サービスにも対応できるとよりよいです。

  • 動画プレビュー
    Twitterで動画やgifの投稿が可能となって動画をアプリ上で再生できることが求められるようになりました。

  • 動画投稿
    Twitterでは動画の投稿が可能となり、動画投稿もできる方が何かと便利です。Twitterに投稿できる動画の制限は15MBであること、30秒以内であることなど様々な制限がありその中で最大限の画質や音質を維持することが求められます。

  • ミュート
    公式にもミュートはありますが、特定のキーワードなどでミュートすることは公式のミュートのシステムではできません。そこで最近ではアプリ側で更にミュートをできるようにフィルターを用意するのが一般的になっています。

Twitterクライアントに求められていない、おまけ的な機能

  • モールス信号
    TLではモールス信号が時々流れてきます。これはしかたのない事です。モールス信号がすぐ読める人はいいですが、読めない人はたくさん居ます。そこでモールスを読める様にする必要があります。また、このモールスは和文モールス符号を前提としていることに注意しておきましょう。

  • QRコード
    TLではQRコードが時々流れてきます。これはしかたのない事です。QRコードがすぐ読める人はいいですが、読めない人はたくさん居ます。そこでQRコードを読める様にする必要があります。zxingなどを利用すれば比較的簡単に読めるようにすることが可能です。

  • 隠し機能
    何故か存在している訳の分からない機能。求められるわけでも無く何故か実装してしまった謎。全ては謎。

Twitterクライアントとは

TwitterクライアントはTwitterのAPIで取得したjsonをユーザに見やすい形に整形して表示しているだけです。
こんだけの機能が合わさってjsonのデータをユーザに見やすいように表示しているに過ぎません。
中身があるようで中身がない!それがTwitterクライアントなんだとおもいます。

ところでTwitterがなんなのか未だによく分からない。


Add a Comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Anti-spam image