GO TO TOPPAGE

さよなら13年分のツイート

イーロン・マスク体制のTwitterになることで、危惧したとおり最近のTwitterは大きな不便を強いて、金を巻き上げる気満々に見える・・・。サービスの運営方針が激変していく中、ユーザーとしてこれまで通りの使い方で良いものか考える時間が増えた。最近実施された閲覧制限も一時的な処置ということだが、現状、あらゆる言い訳も100%信用するには難しく思う。

私のSNS運用方針では、自身のコンテンツ(ツイート等)が自身の管理下にあることを重要視している。最近のTwitterはもはや信用ならないと判断し、約13年前に作ったアカウントの活動履歴を掃除する決心をした。

アカウントの掃除

ツイートを削除する方法

自分のツイートの削除について知っておくべきことを説明します。
https/help.twitter.com

全ツイートを一括で削除する方法を調べたが、公式でサポートされている手段は無いようだった。アカウントを作り直し、IDを張り替える方法が紹介されているが、この方法ではフォロー・フォロワーの繋がりまで失ってしまうので困る。色々と調べてみたが、手動で1つずつ消していく他ないようなので、APIを叩くことにする。

複数のツイートを削除する方法

もちろん、アカウントを削除してしまう選択肢も有り得ると思うが、Twitterに代わる情報収集手段を持っていないため、アカウントを削除してしまうのは躊躇われた。さすがにまだその時ではない。

過去ツイート等削除して、フォロー・フォロワー以外真っ新なアカウントになったとき、誰だか認識してもらえない人も出てくるだろうが、ネットの薄っぺらい繋がりの中にはそういう人もそりゃいるだろうと割切った。

アーカイブを取得する

ともあれ、アーカイブを取得する。ここで取得したアーカイブから削除対象の3種類のツイートID、

  1. 自分のツイートID
  2. 自分がRTしたツイートID
  3. いいねしたツイートID

を抽出した。Twitterホームのツイートタブに表示されるのは「自分のツイートとRTしたツイート」の2つが含まれており、同じところに表示されるが、扱い方は異なる(他人のツイートをRTした場合は、ツイートの削除ではなくRTの取り消しになる)ので注意。

ところが、この後で紹介するように、このアーカイブもどうやらデータのフルバックアップにはなっていないようだった・・・。

ツイートとリツイートの削除

GitHub - tweepy/tweepy: Twitter for Python!

Twitter for Python! Contribute...
https/github.com

Python製のクライアントであるtweepyを利用して、過去ツイートを削除していった。シンプルなスクリプトなのでここで実装を特に取り上げることはしない。代わりに、どのような経緯を経て、どのAPIプランを利用したか紹介する。

APIプランの検討

Twitter、新API開始 ベーシックは月100ドル、書き込みだけの無料プランも 「30日間のうちに移行して」...

米Twitterが新しい「Twitter API」の提供を始...
https/www.itmedia.co.jp

過去ツイートを削除するためにはAPI経由で消していく他ないのだが、今年の4月頃に運用が開始された新プランのAPIは、レートリミットが非常に厳しい。それ以前の制限と比較すると、制限とコストの両面で厳しいどころのレベルではない・・・。

下記ページにプラン比較の概要が記載されている。

Twitter API Documentation | Docs | Twitter Developer...

Programmatically analyze,...
https/developer.twitter.com

実際に必要となるのは、各エンドポイントのレートリミットの詳細で、その情報は下記ページより確認できる。あるいは、Twitter Developersにログイン後、プラン比較画面でもう少し見やすい形式でエンドポイント毎のレートリミットを確認することができる。以降、レートレミットの引用図はTwitter Developersより取得したものとなる。

Rate limits | Docs | Twitter Developer Platform

https/developer.twitter.com

まず、Freeプランだと1日に50件までしか削除できない。しかも、このプランではツイートのみ削除可能で、いいねやリツイートは対象外となっている。私のツイート数は約32,000だったので、無駄なく処理を進めたとしても640日もかかってしまう・・・。さすがに、無料“試用”プランでは実質何もできず、仮にこのプランを選択した場合、ツイートの掃除が終わる前にサービスが終了している可能性すらある。

レート制限:Freeプランのツイート削除

Basicプランでは 5 req / 15 min のレートリミットが設定されているため、1時間で20件削除でき、おおよそ67日かけて全ツイートを削除することができる計算となる。640日と比べると、かなり現実的ラインになったが、それでも2ヶ月も待つことが出来るだろうか・・・。

レート制限:Basicプランのツイート削除

そんな感じで(その時点ではそれ以上どうしようもできないのに)どうしようかうだうだ悩んでいたところ、Proプランなるものが爆誕した。

このプランでは 50 req / 15 min までレートリミットが緩和され、1時間当たり200件の削除が可能となる。32,000件削除するために約1週間まで短縮される。これだ!と思ったが、ネックなのは$5,000/monthというコストである・・・。

レート制限:Proプランのツイート削除

Basicプランの場合、コストは$100/monthである。完了まで67日かかるが、$300の支出に抑えられるBasicプランにするか、$5,000かかるが、1週間で終わるProプランにするか迷った。迷った結果、Proプランを選択した。長期的に見てほぼ確定的にアカウントを消してしまうだろうものに$5,000もかけるのは虚無感が残るが、60日の差はやはり大きいと考え、時間を買った。

最後に、いいねとリツイートの削除(取り消し)のレートリミットも確認し、ツイート削除に最も時間が必要となることを確認した。

嬉しい誤算

Proプランに登録にしてから、嬉しい誤算が発覚した。契約期間(サブスクリプション期間)の途中からプランを変更すると、その期間は日割計算となるものだった。最初にTwitter Developersに登録したときは、初期状態で Freeプランのサブスクリプション期間となっているようだった。私はどうやら3週間ぐらいうだうだプラン検討をしていたみたいで、Proプランに登録したときにはサブスクリプション期間が残り約10日となっていたみたいだ。

FAQ | Docs | Twitter Developer Platform

https/developer.twitter.com

この日割り計算については、よくよく調べて見るとFAQに記載があった。

サブスクリプション費用の日割扱いについて

APIの使い方などは何度も調べたが、サブスクリプション期間内でのプラン変更まで気が回っておらず、完全に得した。また、Proプランに登録した時期もほぼベストに近い状況だった。1日で削除できるツイートが1時間で200件、1日で4800件となり、32,000件の削除に6.7日(約1週間)あれば足りる。開発時間やアクシデントのバッファ込みでも10日もあれば完了させることができるだろう。

結果的に10日分ぐらいのサブスクリプション費用、すなわち全体の1/3ぐらいを支払うことで、目的を最小最短コストで達成できる兆しが見えた。それでも$1,600となるが・・・。

サブスクリプション請求履歴

何かがおかしい

順調にツイートの削除は進行し、ほぼ予定通りに全てのツイートの削除が完了した。はずだった。プログラム的には完了したはずなのだが、何かがおかしい。ツイート取得APIを何度叩いても何も取得できないのに、Web上からプロフィールを確認すると、140件のツイートがあるかのように表示されている1。しかし、何も表示されていない。謎過ぎる・・・。

何のツイートも残ってないはずのに、140件の謎ツイートが残るホーム画面

いいねの削除

よくわからないままツイートとリツイートの掃除を(140件の謎が残るが)終えたことにし、いいねの掃除をする。実装はほとんど同じであるが、1つはまった問題と、明らかにツイッター側のバグと思われる問題に直面した。

リクエストのカウント判定

実際にエンドポイントに対応するアクションが実行されないとリクエストにカウントされないようだった。つまり、既にいいねしてあるツイートに対してDELETEメソッドを呼び、いいねが外れたとき1リクエストにカウントされる。この後紹介する「消せないいいね」の問題が発覚したときに、リクエストのカウント方法に気が付いた。

消せないいいね

アーカイブ (likes.js) に含まれていたいいねは全部消したはずなのに、6,000件ほどいいねが残っていることがわかった。Webからの表示では、開始時に約11,000件のいいねがあり、想定より随分と早く終わったなと不思議に思い調べて見たら、そもそもアーカイブに含まれていたのが5,000件ほどしかなかった。残りの6,000件はどこにいった・・・。

しかし、前述した140件の謎とは異なり、これらはAPIからは取得できた。そして、実際に何個かツイートを確認してみると、通常であればいいねしたツイートはハートマークが赤色になっているところ、ハートマークがいいねしてないそれと同じ状態になっていた。

また、アーカイブに含まれていた最も古いいいねと、APIから取得できる最も新しいいいねの時期を比べると、どうやら2018年の10月辺りが境界となっていた。システム移行時のDBマイグレーションに失敗したか、アーカイブされた古いデータの取り扱いにバグがあるかのような挙動をしているように感じた。

古いいいねが消せない問題を調べると、開発者フォーラムに似た現象の投稿を見つけたが、解決策は示されていなかった。フォーラムに付いてる回答とは違うが、一度いいねして、いいねを外せば消えることを突き止めた2が、この時点でProプランのサブスクリプション期間が残り2日を切っており、プラン変更の期限は24時間前らしいので(メールが来た)、もう1ヶ月分のBasicプランを契約した(ProプランからBasicプランへのダウングレード)。Twitterの策略にはまり、$100が飛んでいった。

Deleting the old likes - Twitter API v2 - Twitter...

Hi, I am trying to unlike...
https/twittercommunity.com

ここからは全方面への謝罪となる。

古いいいねは、一度いいねしてからいいねを外す方法でしか消せないことがわかったため、約6,000件のいいねについては全件その操作を行った。一度いいねを経ることで、何年も前のツイートにいいねの通知をうっとうしく飛ばすことになってしまった。本当に申し訳ない気持ちで一杯で、該当ツイート主の皆さまに深く陳謝いたします。

地道な掃除を進め、APIで取得できた6,000件のいいねを削除し終えたところで、Web上から確認すると、ツイートタブと同様、表示されない謎の442件のいいねが残っていた・・・。何もわからない・・・。

何もいいねしてないはずなのに、442件の謎いいねが残る画面

掃除の結果

APIからもアーカイブからも何も取得できない状態までアカウントの掃除が完了したが、Web上からは140件のツイートと442件のいいねが表示されないまま残る結果となった。大変気持ち悪い状況に陥ってしまったが、これ以上どうしようもできないので諦めるほか無さそうだ・・・。

まともなサービスならここで運営者に問い合わせして問題をレポートすると良さそうだが、Twitterに問い合わせるオフィシャルなルートを見つけることができなかった3

お問い合わせ

私たちがサポートします。トピックを選択してください。報告する...
https/help.twitter.com

家電メーカーやネットバンクが電話での問い合わせコストを削減するために、問い合わせ窓口を見付けづらくする事例にはよく遭遇するが、そもそもどのようなルートでも問い合わせる方法が見つからない現状を見て、改めてアカウントの掃除をして良かったなと感じてしまった・・・。

今後の運用方針

今回のアカウント掃除を経て、自分のツイートをアカウントの削除以外で消すには大きなコストがかかることがわかった。さらに状況によっては、多方面にご迷惑、ご不便をお掛けしてしまう恐れもある。

現在のFreeプランでは1日に50件のツイートが削除可能である(いいねとリツイートは対象外)。Twitterそれ自体のサービスの信用性もぐらついてる中、当面の間はFreeプラン内でツイートを管理していくことにする。つまり、サイズ50のキュー内でツイートを収めるように管理し、はみ出た物から削除していく。もし必要が生じた場合には、Freeプランの制約内であっても1日でまた全削除できるように維持する。いいねについては最近はほとんど利用していなかったため、ツイート削除時に適当に見返して整理すれば十分そうだ。

そこまでしてTwitterを利用し続ける価値があるのかと思うかもしれないが、Twitterの代わりになる情報発信プラットファームが無いのも事実であり、代わりとなり得るマイクロブログが誕生するまでアカウントは残すつもりではある。

最近実施された閲覧制限を機に、色々とその地位の狙おうと動きが活発になっているみたいが、果たしてそのようなサービスが今後出てくるのか全く確信は持てない。


以降、独り言を残しておく。

Twitterの利用を控えようと思った理由

Twitterというサービスの運営方針に不安を感じていたことも1つの理由ではあるが、もう1つ別の大きな理由がある。

何ヶ月か前だったか、家族と外食してる時間でさえもしょうもないゴシップ(滝○○レ○など)を追いかけていた自分に気が付き、他に大切にする時間があるだろうと我に返ったのが大きなきっかけとなる。ワイドショーや週刊誌なんてほとんど見ないのに、そこで話題になってるゴシップを知っているのはなぜか。イーロン・マスク氏の下記発言の真意はわからないが、高度なジョークだと笑っていられない自分もいた。

Twitterを始めとするSNSの弊害を改めて議論することはしないが、その議論の根幹には、全く知る必要も無い他人の生活が見えてしまい、意識的か無意識的かは置いといて、自分と比較してしまうことで不幸になっていくという考えがある。誰だって他人の幸せは羨ましいし、他人の不幸は(時には)飯が旨く感じてしまうことがあると思う。幼い頃よりそういう文化の下で生きてきたのだから仕方無いところもあるが、SNSの浸透でその影響が無視できないぐらい大きくなっていることに恐れを感じていた。

他人と自分を比較しても99%良いことなどないのである。Twitterの公式ヘルプ「Twitterで休息する方法」にも

常にオンラインでいたいという願望はよくわかりますが、心の健康のために、少しオンラインから離れる必要がある場合もあります。

とある。

そんなこんなで、2ヶ月ほど前からiPhoneからTwitterとInstagramをアンインストールした4。SNSをアンインストールしたことでの変化はすぐに現れ、外出中にスマホでやることがなくなり、手持ち無沙汰になった。アプリ削除前後のスクリーンタイムのスクリーンショットを保存していたと思ったが、残っていたなかったので、どれぐらいの時間をそれらに費やしていたかお見せすることはできないことが残念だ・・・。

スマホからSNSを削除して生活を続けていると、いよいよこれらは無くても特に不便なく生きていけることが確信できる。この確信を持ち、イーロン・マスク体制のTwitterの状況も踏まえて、アカウント削除に踏み切る。

Twitterの移行先は?

ところが、情報収集ツールとしてのTwitterを捨てることは現実的に不可能だった。前述した通り、Twitterに代わる情報発信プラットファームが無いのである。私自身が情報を発信する必要はないとしても、存在感のあるプラットフォームが無ければどこを見ればいいのかわからない。

個人的にはBluesky辺りが気になるが、まだ開発段階にある上、気になりつつもそもそもアカウントすら所有できていないし5、私のオフラインでの繋がりでは誰一人としてユーザーがいない。恐らく名前すら知らないと思う。

Meta社がThreadsを公開したが、Twitterの受け皿になり得るかはわからない。Instagramのアカウントと紐付けするという方針で良かったのか、その点についてはサービスの運命を分けたように思った。

henry (@henry0312) on Threads

6 Followers
https/www.threads.net

早速アカウントを作り、少しだけ触ってみた感想としては、UIは見やすく、レスポンスも良い。通知機能と検索機能に改善の余地と、Twitterで言うところのリスト表示、そもそものタイムラインをフォロー限定にするなど欲しい機能はある。

そして、重大な問題が残る。

Instagram同様、Threadsにも投稿を一括で削除する機能が提供されてないように見える・・・。InstagramのAPIは利用したことがないので想像だが、Twitterのそれより難しそうだ。そもそも普通の個人アカウントで利用できるのだろうか・・・?今回のアカウント掃除のようなことは、出来れば繰り返したくないので、自分の投稿を自分の管理内に収めておく運用ルールは考えておかなければならない。

BlueskyとThreadsの動向に注目しているが、移行先として台頭してくるかはわからない。もし真に発展した分散型SNSへ移行が進んでしまったら、自分の投稿(コンテンツ)を手の届く範囲内で管理したいという考え自体も改めなければならず、新たな文化への適応を迫られるかもしれない。

13〜15年前の私と言えば、mixiで足跡を辿っていたような記憶があるし、その頃にTwitterがこれほど存在感のあるサービスになることなんて予想できなかった6。私には(私から見て)同様に確からしいサイコロの目を一発で的中させることは不可能なので、ただただ人々の流れに着いて行くだけになるだろう・・・。


  1. 後日取得したアーカイブ (tweets.js) にも何も含まれていなかった ↩︎

  2. DB移行時のマイグレーション失敗とかキャッシュの扱い方辺りに問題がありそうだと睨んでいたので、一度正常な状態(ハートマークが付いたいいねの状態)に戻してやれば消せるだろうとすぐに想像できた ↩︎

  3. プライバシーや著作権の侵害をレポートする窓口は見つけた ↩︎

  4. iPhoneから消しただけで、特定のPCのブラウザからのみ利用できるというルールにした ↩︎

  5. 招待コードが欲しいです、よろしくお願いします ↩︎

  6. 予想する必要も無かった ↩︎

- OMOTO Tsukasa -

機械学習をバックグラウンドに持つソフトウェアエンジニア。(株)AlphaImpact 所属。LightGBM の(非アクティブ)コミッターの1人。自他共に認める、何でも屋。

#Blog