ツイート集計するやつ公開に寄せて

2017-04-17

「全自動でツイート集計したやつ - 自動更新はしないので何回もアクセスしないで (サーバーが死ぬ)」 …長ったらしいので以下略して「ツイ集計」には別の名前がある。それは開発コード hinaserver である。その旨はサイトで一番目立つ部分に明記されており、そこには「自由で公平でオープンなシンデレラガールズDB hinapedia のサブプロジェクト hinaserver 成果物」とある。

率直に告白すると、私が hinaserver を書き始めた動機は3つある。

  1. 動いたら面白そうである
  2. 未経験のフレームワークで素早く書き上げれば自らの能力の傍証にできる
  3. 当時出回っていたツイート集計、自称「出口調査」は (エンジニアとして、自由主義者として、そして何より比奈Pとして) 受け入れられない

ツイ集計はこの3点、すなわち興味本位、宣伝目的、個人的執着という3つの危険なモチベーションによって製造が開始された。これらはいずれも、公平なシステム製造を期待し難い要素である。面白さを優先すれば正確性は蔑ろにされ、宣伝を重んじれば粗雑なタイムアタックとなり、比奈Pとして振る舞えば荒木比奈に有利な情報ばかりとなる。

しかし私は、シンデレラガールズというコンテンツ全体への愛着のため、また個人的な趣味のため、上記3つの危険を切り抜けて公平な成果物を提供する方法を模索した。具体的には以下の通りである。

  • 開発時から全てのソースを公開する。hinaserver は Apaceh v2.0 により提供され、すべての人が自由を享受する。自由にプログラムを使い、自由に作者を監視し、自由に改善版を公開できる。詳しくはライセンスを参照されたい。
  • 出力サンプル製造を宣伝手段とし、その後の製造過程から分離する。1日でサンプル出力を実施して共有したところ、幸いにして求職ツイートに反響を得られるなど、所期の目的を達した。ただし現在もお仕事募集中であるのでよろしくお願いいたします。
  • 少なくとも一人以上の、比奈Pでない人物に監視監督を依頼する。幸運にも上条Pの協力を得られ、技術的な議論を経て機能を選定できた。アイドルごとのページや、トップページの細部など、少なくない主要部分がこの議論を通じて製造された。深く感謝する。
  • 「投票ツイートと投票は同じでない」「投票ツイート集計は結果発表と同じでない」という認識が広まり、投票ツイートの「祭」が落ち着くまで公開を待つ。現在では「出口調査」という不適切極まりない単語が排除され、多くの人がツイート集計データについて慎重な表現を採るようになるなど、環境は相応に改善されてきている。
  • 全ての人に開かれた発言の場を、データそのものより優先して表示する。ツイ集計の目立つ位置にあるツイート検索結果はこのために設置されている。あなたに意見があり、それを他の利用者へ伝えたいと思うならば、躊躇わずに #hinaserver_desc タグを付して発信してほしい。もちろんGitLabでのissueやMerge Requestにおける発言も歓迎である。

ただし、ライセンスにも記載の通り、hinaserverはありのままで提供される。私はベストを尽くしたが、致命的なバグや設計ミスが存在している可能性はある。私はその法的責任を一切負わないことに注意されたい。

また私はサイトの運営においても、何月何日までサイトを利用可能な状態で維持するとか、データをどのように更新するか等の問題について、一切の保証を与えず、何らの義務も負わない。この点に懸念を覚える方は、自らhinaserverを利用するなどの自衛策を採ってほしい。

全データの公開に関して

このようなデータをそもそも公開すべきでない、公開するとしても全て公開すべきではない、などの見解もあり得ると思う。私からは以下の点を指摘し、理解を求めたい。

  • 私がやらなくとも誰かが公開するであろうし、それを阻止することは不可能である。そうであれば最大限のクオリティで早めにやるほうがよい。
  • 情報の偏在はコミュニティを歪め、恣意的な誘導の危険を増大させ、疑心暗鬼を招き入れる。知りたいと望む者すべての要求に応えるべきである。
  • 愛好するコンテンツが同じであるのに、情報へのアクセスをコミュニティの一部に許し、残余に許さない理由はない。
  • Twitter APIの仕様上、いまデータを収集しなければ永久に利用不能となり得る。
  • hinaserverの公開されたコードは、少なくとも非公開プログラムよりマシである。

ツイート集計の流れ

正確な処理についてはコードを参照していただきたいが、参考となるよう基本設計を概説する。

  1. 公式連携ツイートに含まれる特徴的な文字列で検索を実施し、全件取得する。
  2. リツイートを除外する。
  3. 公式連携ツイートのみを集計対象とする。これはレギュレーションであり、不正対策ではない。
  4. 所定の位置にフルネームが記載されているか確かめ、対象アイドルを探す。見つかれば確定する。
  5. フルネームが一致しない場合、苗字または名前を含むか調べる。森久保ォ、時子様などの改変に対応するためである。
  6. 以上の処理を経ても対象アイドルを確定できない場合、無効なデータとする。
  7. 1度記録されたデータは、以後更新しない。Twitter上で削除されてもデータは残り続ける。

機械的なメッセージ検索に比べると、1と5と7はツイート集計数を増大させやすく、2と3はツイート集計数を減少させやすい。またTwitter APIの仕様上、ツイート削除やスパム対策などにより、検索のタイミングによって検索結果が減少することがある。このため、ツイ集計に表示されるデータと他の検索データは一致しないことがある。

想定問答

トップページの表を並べ替えたい

表の最上段にある列名をクリックすることで、並べ替えることができる。並べ替えた状態のURLを保存しておけば、最初からそのページを表示することもできる。

アイドルごとのグラフが比べにくい

グラフの縦軸は自動的に算出されており、各アイドルのグラフを最も見やすく表示する。そのため、2つのグラフを比較しづらいことがある。

このような場合、URLパラメーターによりグラフの縦軸長を強制することができる。たとえば、 idols/999?t_max=5000&d_max=500 などと入力した場合、合計数の縦軸を最大5000、1日あたり数の縦軸を500に固定することができる。