Twitterでサービスをリリースして分かったこと

7月12日にTwitter試験という、Twitterの使い方で得点や偏差値を算出するサービスをリリースしました。
これを通じて思ったこと、学んだことなどを適当まとめてみようと思います。

着想

Twitterのツイートやフォロー、RTなどを計測して数値を算出するサービスとしてはツイッター廃人度計算機(現存せず)やQrustなどが有名だったり、Twitter利用料金チェッカーがユニークで面白いなと感じていましたが、それぞれ以下の様な感想を持ちました。

  • ツイッター廃人度計算機は累計のツイートやフォロー、ふぁぼ数のシンプルな掛け算なのでTwitterをやってるうちにパーセンテージの桁がどんどん増えていくのが面白かったけど、やりこみ過ぎるといくらなんでも非現実的すぎる数字になるという印象でした
  • Qrustはユーザーがログインしなくても勝手に数値を算出しているのでサンプル数がかなり多く、また上位○%と相対的な値を出してたり100点満点で複数の要素を判断して影響力を算出していそう(根拠はない)なのでクオリティが高いと思いましたが、計算式が不明瞭なのがちょっと不満でした。
  • Twitter利用料金チェッカーは発想が面白くて素晴らしいけど、廃人になると数値がかなり非現実的な値になりました(これはこれで面白いと思いますが)

ということで、これらの先人たちのサービスを見て

  • 複数の要素を分かりやすく明示して
  • 現実的な数値(○○点満点など)に置き換える

この2つの条件を兼ねたTwitterのサービスって自分が見た中ではまだ無いなと思って考えてみた結果
「Twitterのツイートやフォロー数、ふぁぼやRTを現実的な模試や試験の点数、および偏差値(相対的数値)などに換算してみよう!」
という企画に至ったのでした。

設計・実装

自分が試験の点数設定で心がけたこととしては、両極端に点数が偏らないように必要に応じて対数を取ったりスコアをなんとか乗したりなどの適当な処理を加えました。
自分のレベルを正確に反映できる理想的な試験は平均点が50%、標準偏差が15〜20%程度と言われてた(気がします)が作ってる最中はサンプルが取りづらいのでそこまで深くは考えなかったですし実際理想的な結果ではあまり無いところも多いですorz
ただ以前自分のフォローしてる人のフォロワー数を対数で取った時に簡単にグラフにしてみたら(下図)正規分布に近かったのでこれだ!という感じに思ったのを参考に、ただ差はある程度つけたらな…とか考えた感じです。

その一方で単純に高得点を取れないようなトレードオフ要素も加えてみました。
例えばフォロー/フォロワー関連だとフォロー数、フォロワー数、比率(フォロワー/フォロー)の3つの要素を元にしてるので例えば有名人アカウントのようなフォロワーが極端に多くてフォローの少ないアカウントであればフォロー数の得点がネックになりますし、よくあるフォロー返し狙いの大量フォロー/フォロワーアカウントは比率が犠牲になればな…と考えましたが実際にうまく機能してるかはなんとも言えないですw(フォロー1万、フォロワー5〜10万だとほぼ満点になる仕様をどう思うか…など)

あとは適当に模試の大問のノリで項目を作って(ただしAPIの消費が激しくならない範囲で)考えて実装しました、はい。(このへんの実装は特筆すべきところは無いです)

リリース前夜

まずは基礎的な部分が完成したかなと思った段階で「テスター募集」的なノリでツイートしたところ、15人程度の方がやってくれた結果まあデータは悪くないしリリース直後最初このサービスを見た人がサンプル数の少なさを理由に帰ったりしないラインになったかなと思ったのでトップページをやっつけで作ったり、さらに実際に結果ページを見た時に文字だけだと伝わりづらいなと感じたので分かりやすくするために成績をグラフ画像にして表示、およびTwitterに同時投稿する機能も付け加えました。
ちなみにグラフ画像はアシアル社が開発したjpgraphというライブラリを使わせて頂いております。
ライブラリだから作りやすくて有難い…とはいえ導入が一筋縄では行かず思いの外jpgraphや画像つきツイートの実装に手間取りましたがw

あとはちょうどこの頃に【注意】『ツイッター歴診断』がスパムで怪しいと話題に!さっそく使ってみたといった記事に代表されるように単純にタイムラインによく流れて来るだけでスパムではないかと警戒し、さらには無根拠で事実と異なる言説まで流される風潮があったのではないかなと、かなりTwitterアプリに対する風当たりが強い印象を受けたのが心配でした。(これの作者さんは本当に可哀想だと思います…)
ぶっちゃけ無根拠さで言ったら放射能を過剰に心配するタイプの人たちの方がまだマシなのでは…?と思えるレベルですw(例えば小児甲状腺がんの発生確率と原発事故にはかなり疑わしい関連性がありますしw)

…っと話が脱線したのでここまでにしておきます

運用

(んーっと、これで大体完成かな…試しに自分のアカウントで試験してポチッとツイート)とやってちょっとしてリロードしたらすぐ表示されてやっぱ流行らないかーと思ったら…受験人数(利用者数)が300越えてたりしてて目を疑いました。
え、いきなりこんなに人来るものなのというのとこんなに人が来てもサーバーが重くならないの?という二つの意味でw(思えばテスター募集の時に暴発しなくてよかった…)。

上のグラフはリリース直後から翌日18時までのアクセス数推移です。深夜時間帯の落ち込みはまあ当然としてですが初日はアクセス数がどの時間帯も安定的に多くて、もしかするとアクセス数が多い時間帯はつながりにくい→諦めたユーザーがいくらかあふれてそうな気もしますが15時-16時くらいにもアクセス数が落ちました。
…というのもサーバーが落ちました\(^o^)/
うん、ダメじゃんと思われそうですが自分の中ではむしろこれだけギリギリのアクセス数が続いた状況で1回しか落ちないほうが意外と頑強なんだなって思った次第ですw
でも落ちた時は焦りましたね…全く誰もページを開いてない状況なのになんでサーバーがひいひい言うてんねん、何かプログラムが暴走してフリーズ状態になったんちゃうかと思いましたww

とりあえずそんな知識も経験も無いというのに一刻も早く何とかせねばと思ってApacheやMySQLとかを再起動してみたりデータベースが暴走してるんか?とか思ってテーブルの情報を見てみたら何故かレコード数がめまぐるしく上下してたりして(削除するSQL分なんて発行してないはずなのに…)本当に暴走か何か得体のしれない事態になってて恐怖を覚えつつも…もうどうにでもなれと思って

最終手段・OSの再起動に踏み切ることにしました

結果としてはさっきの鯖落ちは何だったろうというくらいに平和を取り戻しました。心配してたSQLのレコード数も元通りになってホッとした次第です。…うーん、一体なんだったんだろう
(ここで管理者の思考回路がシャットダウンする)

またなかなかアクセス数が減らないのとサンプル数がかなり大きくなって平均値や標準偏差が安定してきたので慌てて平均値や標準偏差をページの表示時に毎回算出するのではなく、定期的にプログラムで平均値や標準偏差を算出してその結果をページのロード時に読み込む形に変更しました。
本当は当初はこの形式で行こうと思ってたのですが、最初のうちは変動が激しいだろうと思って正確さ重視のため毎回表示時に算出にしたのですが、まあ結局戻した次第ですww

でテスト環境で確認して本番に上げてみたらいい感じにページがサクサク表示されました!よっしゃ
…アクセスの勢いが落ちてました\(^o^)/

思ったこと

最初からあまり処理を軽量化…なんてことは考えなくていいけどやっぱりしたほうがいい

なんか訳がわからない言ってすみません。
というのも、最初ページがロードされる度に平均点や標準偏差の類はmysqlの関数でいちいち算出なんてことをやってたりと何かと開発者側都合でのシンプルさを重視して計算量とかまあいいやと思ってたのですが、それでも「サーバーが1時間で最大8000以上のPVになんとか耐え切れた」という点では自分の想像よりもはるかに素晴らしいパフォーマンスでした!
しかしながらその一方でSNSからのアクセスを当て込んだサービスが流行る時は

ツイートを見る→RTしたり自分も試してツイート→そのツイートを見た人たちがさらに(ry

の連鎖というパターンが多いのでいつどれくらいアクセスが来るか分からない、あるいは初っ端が混雑するという点ではリリースする前に対応を考えたほうがいいな、あるいは面倒でもリリース前に処理の軽量化を考えたほうがいいなと反省しました。

・意外とアクセスが長続きする

Twitterそれなりにやってる方なら分かると思いますがほとんどのケースでツイートがRTの嵐になってもせいぜい数時間で何故かピタッと止まったりすることが多いですよねwゲリラ豪雨みたいな感じでw、その後ふとした拍子でまたRTされるようになったかなと思っても以前の勢いを取り戻すことは滅多にありませんし…
これもリリースした時はそんな感じで深夜のほとんどTwitterしてない時間帯あたりに結果ツイートの連鎖が止まるだろwwwと思ってたのですが、朝になって見事にV字回復してました!
またさっき述べた通りにサーバーが落ちてる時間帯が1時間ほどあって、これで途絶えただろうな…もう終わりだなと思ってたのですが、見事V字回復と期待をいい意味で裏切ってくれました。
深夜でもないのに1時間Twitterでその話題が途切れたら誰も気づかなくなって終わる気がしかしないのですが…なんとも不思議ですw

さくらのVPS 1Gプランは伊達じゃない

決してステマではありませんちゃんと私はさくらインターネット様に利用料金払ってますw
VPSにしたきっかけはキャパ増量のためではなく単純にOSインストール(私の場合はUbuntu 12.04です)からサーバー管理をすることに興味を持ち始めて、しかも月額980円とまあ趣味と割り切ればアクセスがほとんど来なくても学生が払えるレベルかなと思っての契約でしたし実際以前はPVがサイト全体でせいぜい一日数百だったのですが、そこからいきなり計算させまくりんぐSQL文使いまくりんぐでさらにPHPで表示させるようなページを1時間に8000回と処理できるキャパシティは純粋に素晴らしいなと思いました!
時間帯でアクセス数に波があることを考えても1日最大10万PV前後、1ヶ月300万PVを支えられる(もちろんサイトの重さで大きく異なりますがロードの度に大半のケースでMySQLの関数で平均と標準偏差を算出したり、グラフ画像を生成したりする処理を抱えてもこのレベル!)とはなんとも頼もしいです!
逆に慢性的にキャパが不足しがちになったらそれはそれでとっても嬉しいなって思いますがw

あとがき

ではもしこれがレポートだったら問答無用で単位落とされそうなくだらないライトな長文でしたが、ここまでご付き合い頂きありがとうございました。
そのうち暇があったらより深くいろいろと考察して見たいと思います、ではノシ

コメントを残す

メールアドレスが公開されることはありません。