Twitter自動運用ツール「Heartroid」

サービス URL:https://mamitter.com(AWSとTwitter API の料金高騰のため現在不可動)
説明動画:https://youtu.be/BIVLdpGBEbY
コード:https://github.com/Y-Kenn/dreamon

開発期間:2023 年 5 月〜2023 年 7 月

■サービス概要

Heartroid(ハートロイド)は自動でTwitterフォロワーを増やす、認知度を高めること目的としたサービスで、集客目的にも利用できます。
手作業でのTwitterアカウント運用の仕方が分からない方や、運用に時間をかけたくない方向けのサービスとなります。

ユーザーが設定したキーワードをもとに自動でいいね、フォロー、フォロー解除が実行されます。

独自のロジックにより、高いフォローバック率の確保とアカウント凍結対策を両立しています。

■基本機能

■フォロワー増加ロジック

'いいね’と’フォロー’を同じアカウントに対して同時に実行します。
いいねだけ、フォローだけを行う場合よりも高いフォローバック率を得ることができます。

相手のアカウントに興味を持っているように伝わり、また人間が手動でいいね、フォローしているように見えるため不快感を与えません。

■使用技術

フロントエンド

バックエンド

インフラ

その他

■フロントエンド詳細

○Vue.jsによるSPA

Heartroidはインターフェースとしての側面が強いため、高いUX実現のためにSPAを採用しました。
VueRouterVuexを使用してユーザーフレンドリーなSPAを実装し、かつ保守性の高さも確保しました。

○バックエンドとの連携

フロント⇔バック間の非同期通信はAxiosを使用しています。

バックエンドで処理が正常に行われなかった場合はレスポンスにエラーのステータスコードを乗せ、フロントではステータスコードに応じた処理を実行します。
(セッションが切れている場合はログイン画面へ遷移、CRUD処理に失敗した場合はアラートで処理されなかった旨を通知など)

○画面設計・機能設計

使用方法や状態が一目で分かるように設計しています。
具体的な例を挙げると以下のようになります。



○レスポンシブ

PC、スマートフォン、タブレットで利用できます。



○訴求力のあるTOPページ

以下のポイントを意識しました。





■バックエンド詳細(主に自動機能)

○自動機能概要

外部APIのレスポンスを受け取るのは時間がかかるため、自動機能をシングルスレッドで実行する場合、ユーザーが増えた場合に処理が間に合いません。
そのためLaravelのキュー/ワーカーを使用して並列処理できるように実装しました。

自動機能は基本的にはLaravelのタスクスケジュール機能により定期的にジョブ発行の処理を実施し、ユーザーのTwitterアカウントごとにジョブを発行(キューに投入)、複数のワーカーが並列して各ジョブを実行します。

また1つのアカウントのジョブが同時に実行される場合はTwitter運営に自動化が検出され、アカウントの凍結やサービス停止につながる恐れがあります。

そのため、いいね、フォロー、アンフォローのジョブはジョブチェーンの機能を使用して各アカウントごとに1つのまとまりとして発行し、ジョブの実行順序や実行間隔が必ず守られるように実装しています。

また各自動機能ごとに1日ごとの実行数上限や1時間ごとの制限を設定し、さらに各アカウント個別にフォロワー数等に応じてより厳しい上限を計算、適用しているため、アカウント凍結のリスクを抑えることができています。

○自動いいね

ユーザーが登録したキーワードをもとにマッチするツイートを取得、対象ツイートの情報をターゲットとしてDBに登録します。
DBにターゲットが登録されている場合にいいねを実行します。

キーワードは、ユーザーがAND, OR, NOTの選択ができるようになっています。

○自動フォロー

いいねが実行された場合、いいねを付けたアカウントに対してフォローします。

自動いいねと同様に、キーワードにより対象アカウントのプロフィールとキーワードのマッチを取り、フォロー対象を絞り込むことができます。

キーワードを設定しない場合はいいねを付けたアカウントを全てフォローします。

○自動アンフォロー

自動フォロー済みのアカウントがHeartroidでの設定値を上回った場合に自動でアンフォローします。

自動フォローしたアカウントの中から不活発なアカウントをターゲットとしてDBに登録し、DBにターゲットが登録されている場合にアンフォローを実行します。

アンフォロー保護機能が実装されており、ユーザーがアンフォローしたくないアカウントを登録することができます。

○予約投稿

ユーザーが日時と投稿する文章をDBへ登録し、その日時になると自動でツイートが投稿されます。
投稿済みのツイートもHeartroidサービス内から削除することができます。

予約ツイートのジョブは他のジョブより優先して処理されます。

○定期実行される処理

Laravelタスクスケジュールに登録しているコマンド(処理)は以下の5つになります。

■データベース設計

下の図の通りとなります。

■AWS構成

下の図の通りとなります。

現在設置しているWebサーバは1つですが、ユーザが増加した場合は予備のサブネットに増設し、アクセスを振り分けることができます。

また現在メールはSESを使用していますが、今後申請が通った場合、用意したメールサーバを使用することも可能です。



■反省

○良かった点

○悪かった点

■今後について

TypeScriptやReactの習得に力を入れたいと思っています。

今回Heartroidの開発を通して、規模の大きいサービスやチームでの開発において静的型付けのメリットは大きいのではないかと感じたこと、またTypeScriptを使用しているプロジェクトが多いことがTypeScriptを学びたい理由です。

Reactに関してはVueと並んで使用される機会が多く、習得していれば参加できるプロジェクトの幅が広がるためです。またReact Nativeではスマートフォンアプリの開発ができるため、個人でもユーザーの多いサービスを開発できるようになると考えています。

今後も自分のアイディアを形にし、世の中に面白い影響を与えるため、日々勉強を続けていきます。

長くなりましたが、ここまでご覧いただきありがとうございました。