Twitterのフォロワーを自動的に増やす試み

# 効果

ハッカソンの開催情報を自動でお知らせするBot [HackathonPortal](https://twitter.com/HackathonPortal) にて今回紹介する方法を実践して45日ほど稼働させた場合のフォロワー数の推移は以下のようになります。

![socialdog_dashboard.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72596/c9bbb426-225d-15a0-84cd-0fe538aef25b.png)

このグラフはTwitterマーケティングツールである [SocialDog](https://social-dog.net/) にて計測したものです。
集計期間は `2020/8/15 〜 2020/9/29` になります。この期間にて フォロワー数が **132人** 増えました。
現在もフォロワーは増えていっています。
そのため、今回実践していった内容がフォロワーの増加に効果的であると思われます。

# HackathonPortalについて

HackathonPortal とは最新のハッカソンの開催情報を自動で集めて、お知らせするBotです。

まだ [HackathonPortal](https://twitter.com/HackathonPortal) をフォローしていない方はぜひともフォローのほどよろしくお願いします!!

技術的な内容についてはこちらを参照してください

* [最新のハッカソンの開催情報を自動で集めて、お知らせするBotを作ったので頭の中を紹介](https://qiita.com/taptappun/items/f913dc8daaec931508a1)

また今回紹介する実際に動いている処理の内容はこちらにて公開しています
[hackathon_portal](https://github.com/TakuKobayashi/hackathon_portal)
主に [promote.rb](https://github.com/TakuKobayashi/hackathon_portal/blob/master/app/models/promote.rb) に処理が記述されていて、[.gitlab-ci.yml](https://github.com/TakuKobayashi/hackathon_portal/blob/master/.gitlab-ci.yml) に繰り返して実行しているコマンドを記述しています。(このプロジェクトは [Rails](https://github.com/rails/rails) で動いています)
詳しいコードの解説などは別の記事にて行います。

まだ試行錯誤しておりますので、今後もロジックは変化していきます。

# 動作環境と動かし方

今回、Twitterのフォロワーを自動的に増やす試みについて実際に動作している環境や動かし方について紹介します。

## 動作環境
 * Ruby
 * Rails 6~
 * MySQL
 * Gitlab CI
 * [twitter Gem](https://github.com/sferik/twitter)

# 動かし方

まずはRubyおよびRailsが動く環境を構築してください
RailsとMySQLを連携できるようにしてください
以下のコマンドを実行してデータベースを作成して、テーブルを作成します

```sh
rails db:create
rails db:migrate
```

すでにデータが入っている場合は以下のコマンドを実行してデータをリセットします

```sh
rails db:migrate:reset
```

実際に動いているデータを注入します

```sh
rails db:seed
```

実際に動いているデータは全てリポジトリの中にGit管理されています
[seeds](https://github.com/TakuKobayashi/hackathon_portal/tree/master/db/seeds)
今回注入されたデータは上記で管理されていたものをデータベースに注入していったものになります。

以降のコマンドを実行するためにはTwitterのAPI KeyやTwitterのアカウント情報について登録する必要があります。
[.env.sample](https://github.com/TakuKobayashi/hackathon_portal/blob/master/.env.sample) 情報を `.env` にコピーして、以下の項目にそれぞれTwitterのAPI Keyである`consumer_key` と `consumer_secret` の情報とTwitterのアカウント情報である `access_token` と `access_token_secret` の情報を入力してください

```.env
TWITTER_CONSUMER_KEY = ""
TWITTER_CONSUMER_SECRET = ""
TWITTER_BOT_ACCESS_TOKEN = ""
TWITTER_BOT_ACCESS_TOKEN_SECRET = ""
```

新しく追加でデータを注入する場合は以下のコマンドを実行してください

```sh
rails runner Promote.import_twitter_routine!
```

また、以下のコマンドでもデータを注入します。(以下のコマンドの用途はTwitterよりハッカソンイベントの情報を取得しているものであり、その過程の中で`いいね`を行う対象のツイートのデータも取得しています)

```sh
rails runner Event.import_events_from_twitter!
```

注入されたデータの中にはこれからいいねしていく対象となるツイートの情報が注入されています。
対象のツイートにいいねしていくための処理は以下のコマンドを実行してください

```sh
rails runner Promote.like_major_user!
```

条件に合致したユーザーをフォローしていく場合は以下のコマンドを実行してください

```sh
rails runner Promote.try_follows!
```

条件に合致したユーザーのフォローを解除していく処理は以下のコマンドを実行してください

```sh
rails runner Promote.organize_follows!
```

現在、MySQLに入っているデータをSQLファイルに書き出す場合は以下のコマンドを実行してください

```sh
rails backup:export_active_records_data
```

上記に挙げたコマンドを毎日繰り返し定期的に実行していくことでTwitterのフォロワーを増やす試みを実践していってます。

# きっかけ

以下の記事を参考にしました

* [Twitter で 自動フォロワー獲得ツール を作った話](https://note.com/masanaosuzuki/n/n48fd7289537e)
* [Twitter で 自動フォロワー獲得ツール を作った話 ②](https://qiita.com/masagaogaoasia/items/1393d52d1d3f9db64272)

この他にもTwitterのフォロワーを獲得するための方法を紹介している記事がいくつかありました
ある一定の法則に則って、毎日繰り返し行っていくことでTwitterのフォロワー数が増える方法について検証してみるのと同時にこれらの方法を自動化することができないか試してみることにしました。

またフォロワー増による認知度と発信力の向上がにつながるものに適用させて試してみようと思い、HackathonPortalのアカウントにて試してみました。 → いい傾向の知見がたまったら自分のTwitterアカウントにも適用してみようと思います。

# 自動化の方針

処理を自動化させて運用していくにあたり、各種条件にのっとり現実的に運用できる方法を模索して、運用していくようにしました。以降に自動化させるために必要だった条件と行った処理の方針について記述していきます。

## 仮説

Twitterのフォロワーが増えるために必要なことを定義します。
仮説として以下の内容を状態を満たすとTwitterのフォロワーが増えると考えられます

1. **価値のある有益な情報をツイートする**
2. **なるべく毎日ツイートする**
3. **ツイートしている情報に興味がありそうな人達に認知してもらう(対象のツイートに対していいねをする)**
4. **ツイートしている情報に興味がありそうな人達をフォローする**
5. **フォロワーのフォロワーに認知してもらう(いいね or フォローする)** → フォロワーのフォロワーが興味を持っている内容はフォロワーのユーザーに共通しているものである可能性が高いため
6. **フォローしているユーザーでアクティブではない、フォロー解除したユーザーのフォローを解除する** → フォロワー数に対してフォロー数が多すぎる場合、フォロワーを増やすためだけのアカウントと思われるのでフォロワー増に貢献しなさそうなユーザーのフォローを解除していく

## 条件

仮説を踏襲して、自動化するにあたり実現するために必要な条件を以下に洗い出します

1. 現状のTwitter APIでできることで行う
2. Twitter APIの制限にひっかかりすぎない範囲で自動化を行う
3. Twitterのレギュレーションに違反しないように自動化を行う

### 条件の解説

まず、[Twitter で 自動フォロワー獲得ツール を作った話](https://note.com/masanaosuzuki/n/n48fd7289537e) 記事の中にある

```
③ 自身のフォロワーで、フォロワー数の多いユーザーの、最新のツイートにライクしている全ユーザーをフォローする
```

`ツイートにライクしている全ユーザー` の情報が現在のTwitter APIでは取得できないため、この方法は正常な手段でもって実践することができません。

このような現行のTwitter APIでは実現できないことはやらない方向で実装を組み立てました。
またフォローやいいねはTwitterのAPIに記載されている制限に達するより前にエラーが返ってきてしまうため、繰り返しエラーを発生させないようにするためにちょうどいい具合のところで本日の処理を止める必要がありました。(繰り返しエラーを出しているとAPI Keyやカウントが凍結されてしまうため)
そのためエラーにならないちょうどいい回数に落ち着くように処理を作成しました。


## 自動化処理の具体的な実装方針

1. **毎日価値のある有益な情報をツイートする** → ハッカソンの開催情報を元々ツイートしていた
2. **特定のキーワードについてツイートしているツイートにTwitter APIの上限である1日1000件までいいねをしていく** → 特定のキーワードとは今回はハッカソンについてのキーワード: [hackathon OR ッカソン OR gamejam OR アイディアソン OR アイデアソン OR ideathon OR 開発合宿 OR はっかそん](https://twitter.com/search?q=hackathon%20OR%20%E3%83%83%E3%82%AB%E3%82%BD%E3%83%B3%20OR%20gamejam%20OR%20%E3%82%A2%E3%82%A4%E3%83%87%E3%82%A3%E3%82%A2%E3%82%BD%E3%83%B3%20OR%20%E3%82%A2%E3%82%A4%E3%83%87%E3%82%A2%E3%82%BD%E3%83%B3%20OR%20ideathon%20OR%20%E9%96%8B%E7%99%BA%E5%90%88%E5%AE%BF%20OR%20%E3%81%AF%E3%81%A3%E3%81%8B%E3%81%9D%E3%82%93&src=typed_query&f=live) で検索してでてきたツイート全てにいいねしていく
3. **ユーザーの行動ごとにスコアリングして一定のスコア(今回は合計が1.0)を超えたユーザーをフォロー可能な数の分だけフォローする**
 * 特定のキーワードについて1週間以内にツイートしているツイート1件につき `0.25`
 * フォローされたら`0.9`
 * フォロワーのフォロワーには `0.25`

4. **フォロワーのフォロワーにアプローチする(最新のツイートにいいねやフォローする)** (※こちらは未実装)


# Twitterのレギュレーション

今回引っかかったTwitterのレギュレーションやTwitter APIの制約について以下にあげていきます
このレギュレーションに引っかからないようにTwitterのフォロワーを増やす試みを行っていきました

 * Twitter APIの1日のフォロー数の上限: **1ユーザーごとにMAX 400件/1日, 1API KeyごとにMAX 1000件/1日**
   * 参考: [POST friendships/create](https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/post-friendships-create)
 * Twitter APIの1日のいいね数の上限: **1ユーザーごとにMAX1000件/1日, 1API KeyごとにMAX 1000件/1日**
   * 参考: [POST favorites/create](https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/post-favorites-create)
 * 1日のフォロー数の上限: 実際にやってみたところ1日に約100件くらいフォローすると制限がかかってしまいました。そのためフォローはするが多用はしないようにする必要がありました。
   * 参考: [Twitterのフォローについて](https://help.twitter.com/ja/using-twitter/twitter-follow-limit)

# 考察

運用してみたことからわかったことは以下の内容になります

1. **いいねやフォローをすることでフォロワーが一気に増えることはなくじわじわ増えていく**
2. **アクティブではない(1週間ツイートしていない)ユーザーにいくら絡んでいってもフォロワーは増えない、フォロー解除してもほとんど影響しない**
3. **バグっていて、ツイートができなかったり、いいねができなくなっている状態だとフォロワーの増えない**
4. **インフルエンサー(フォロワー数が多いユーザー(目安は5000人くらい))にリツイートされると拡散されてフォロワーが増える**
5. **バズったツイートにクソリプではない的確なリプライやリツイートをした方がフォロワーが増える**
→つまりインフルエンサーやバズったツイートとうまく絡む
6. **結局はバズりツイートや何らかの方法による知名度の向上の方がフォロワー数がよく増える**

# 注意事項

Twitter APIの制限により他の人にも共通して行うことができるように(Webサービスとして)作ることはできませんでした。
ここで紹介している方法と同じことを実践するためには必ずTwitter APIの API Keyを取得して行っていただく必要があります。
また 2020年現在、Twitter API の API Key を個別に取得するには審査が必要になります。
以下を参考にして審査を突破してAPI Keyを取得してください。
[2020年度版 Twitter API利用申請の例文からAPIキーの取得まで詳しく解説](https://www.itti.jp/web-direction/how-to-apply-for-twitter-api/)

# 今後の展開
1. フォロワーのフォロワーにアピール(いいね、フォロー)できるようにする
2. うまく拡散してもらうためにロジックの改良を考察して実装する
3. クソリプにならないリツイートやリプライ文章の自動生成のロジックの考察と実装
4. 自身のTwitterアカウント([@taptappun](https://twitter.com/taptappun))に適用して運用する
5. 他の人たちが無料で手軽に活用できてるようになるためにGASとGoogle SpreadSheetを使って自動的に稼働してくれるような形にする
6. コードを書かなくてもGASに適用できるようなモノを作る