すのふら

すのふら

日々の備忘録

みんなアイカツ!どう思っているんだろう?気になったのでツイート自動分析する機能を作った

普段ツイッターアイカツ!シリーズに関するTLを見ている人、こう思ったことがありませんか?

みんなアイカツ!シリーズの新情報やアニメを見てどういう感想を思っているだろう。

私個人としても、色々な情報を受けて皆さんがどう思っているのだろうと思っていました。

ある程度、有名な方であればリツイートされたツイート内容が流れてくると思いますが、私やその他の小さい声も含めて「今アイカツ!をどう思っているのか」を知りたいし、それを私の中に閉じるのではなく誰かに共有したい。

そんな思いから、毎日ツイッターアイカツ!に関するツイートから、どんなキーワードがホットだったのか通知する機能を作りました。


どんな機能か

毎日、私のツイッターアカウントに

このようなワードクラウド*1を呟いています。
(同じ言葉をつぶやいている人が多ければ、画像の文字が大きくなる図です。)

ちなみにスターライト学園の校章の形になるように作っています。


これを作った想いとよかったところ

これを作った想い

この機能を作った想いは上に書いた通りです。
これを見て「アイカツ!ってみんなこう思っているんだなあ」って感じれくれればありがたいです。

自分のアイカツ!シリーズに思うことが、誰か(みんな)と同じ気持ちなのかとか、あるあるーとか、そんな気持ちの答え合わせというのもあるのかもしれないです。


よかったところ

この機能を作ってよかったところは、色々面白い結果となっている日を見ることができる点です。
また私がウォッチしていないところでのコラボや、別の作品との比較でアイカツ!シリーズが語られたときにその結果を知れるというのも面白い点です。

7月は色々アイカツ!シリーズに絡んだ出来事も多く、面白い結果になっていることが多かったのですが抜粋していくつか。

まず、先ほど紹介したツイートは『アイカツオンパレード!ドリームストーリー』5話6話の公開日のツイートをまとめたものになります。
音城ノエル主人公で大空あかりとの絡みが強かったので、みんなこのふたりのことを呟いているんだなーって分かります。



この日は『アイドルマスター ミリオンライブ!』のテレビアニメ化が発表されて、脚本が『アイカツ!』をご担当された加藤陽一さんだと分かったときのちょっとした祭りの状況です。

信頼や期待というワードがあるので、かなりポジティブな感想を思っているんだなーというのを強く思いました。
このような情報を得られるのが作ってよかったなあって思います。



この日は『ラブライブ!スーパースター!!』の情報が解禁された日で、アイカツ!とは直接的に関係はありませんが、キャラクターデザインが『アイカツ!』っぽいというつぶやきをした人が多かった感じですね。



DCD『アイカツオンパレード!』の大規模障害発生時のツイートになります。
やはり皆さんオンラインでプレイができなくなったので、つぶやいている感じですね。


好き!って気持ち

この機能を作ってすごく目にするのが、「好き」ってワードです。

毎日たくさんツイートされている言葉のひとつです(もうひとつは「アイカツおじさん」)。

加えてネガティブなワードが少ないなというのも思ったことです。

ネガティブなワードが今回収集しているツイートのキーワードに含まれてないためというのもあるかもしれませんが、ほぼ出てきません。
(私の方で意図的に除外したりは行っていません)


アイカツ!というコンテンツがかなり愛されているんだなーというのがとてもよくわかるし、こういうツイートがあるうちはコンテンツも安泰なのかもなというのが素直に思うことです。


また、「アイドルマスター」や「プリキュア」、「プリパラ」、「プリチャン」などのワードも毎日出ていますので、どうやらアイカツ!は他の作品と比較して語られているようです。


今後やりたいこと

毎日、ツイート数やツイートユーザ数も集計しているので、これは別途まとめた記事を作って定期的にお見せできればいいなあと思います。



技術的な当機能

以下技術的な要素を多く含みます。

機能について

今回はAWS Lambdaを組み合わせたサーバーレスな機能を作成しました。

今回の構成は以下となります。

f:id:snofra:20200813125914p:plain

処理としては
1.毎日0時にCloudWatch アラームが発火してAWS Lambdaのツイート収集機能が実行、ツイート内容と、ツイートユーザ、ツイート数をAmazon S3にPUT。
2.PUTをトリガーにMecabでの形態素解析を実行、その結果をAmazon S3にPUT。
3.PUTをトリガーにワードクラウドを作成し、作成した画像をAmazon S3にPUTして、形態素解析の結果を削除
4.PUTをトリガーにツイートをPostする。


各機能を分割しているのは、そもそもの問題としてAWS lambdaのデプロイパッケージの上限である250MB制限に引っかかってしまう問題。
あとは、リファクタリングをする際に疎結合にすることでメンテナンスの容易さを担保するためです。
docs.aws.amazon.com

AWS Lambdaだけでなく、パラメータなどもすべて他サービスによせていってます。
私しかメンテナンスしないので、コードにAPIキーとかハードコーディングでもよかったですが拡張性の担保、メンテナンス性の容易さから極力他サービスによせています。


AWS lambdaの制限であるデプロイパッケージの上限250MBによって、形態素解析する際の辞書でNEologdが使用できないのがちょっと痛いです。
うまく形態素解析ができず、変なワードで切り取られてたりしてしまうのがいくつかありました。

縮小版 NEologd辞書を使用する等することで使用できるっぽいですが、見送っています。
理由としては今回はNEologdよりもアイカツ!シリーズに関するワードを登録したユーザ辞書を拡充するほうがよりよいだろうという理由です。

ユーザ辞書には以下のような情報が格納されています。

  • キャラクター名や「スターライト学園」などの舞台、それぞれのアイドルが着るドレスのブランド名、「芸能人はカードが命」などの有名なセリフなど劇中で登場するワード
  • 168曲分の曲名
  • コーデ名(カードテキスト)や「フィーバータイム」など「DCDアイカツ!」~「DCDアイカツオンパレード!」での用語やコーデ名
  • 「せなあか」のようなカップリングや「なまくら」などファン間での呼称
  • 声優や歌唱担当などのスタッフ・キャスト情報
  • その他、「アイカツ!」シリーズとセットで話されている「電音部」や「バトスピ」などのワード

これが一番作るの面倒くさかったですね。


作成に当たっての思い

ひとりのアイカツおじさんとしての思いは上に書いた通りです。

技術者としての思いとしては、今回使用している技術はそれぞれ単体でアドホック的に使用している側面が強く、組み合わせた機能を作りたいなという点、
極力お金は使いたくなかったので、サーバーを立てるよりはサーバーレスで実施したいという気持ちからです。

業務でサーバレス環境構築しているというのもあります。

作成期間は1か月程度で毎日2時間程度構築していった形となります。

特にアーキ設計はしていないので、なんとなくLambdaひとつずつ作成して後からリファクタリングで別サービスと連携していった形となります。


課題

この機能まだまだ課題がたくさんあるので修正したいなという思いが強いです。

主に以下2点で、ともにツイートの収集部の不具合になるものです。
・障害発生時のリカバリ
・ツイート収集のライブラリ不具合

ツイートの収集部は、twitterscraperというライブラリを使用しているのですが、twitterサービスに寄り掛かったライブラリのため、twitter側のアップデートによって使用できないことがあるのが問題です。

こんな感じになる。


この機能は毎日ツイート情報を取ってくるもので、ツイート数も1万程度しか存在していないので、tiwtter APIに倒してしまってもよいのかなと思います。
(このライブラリもグレーな要素が強いので、ちゃんとしたものに変えたほうが良いのではというのもあります)


また、どういう理由かは分からないのですが、まれにツイート収集が15分で終わらないケースがあります。
その場合、AWS Lambdaの仕様上処理が終わってしまうので結果が中途半端になるという問題が発生、再実行で解消するのですが、再実行するのにわざわざAWS Lambdaまで行かなければならないので、LINEとかからキックできるようにしたい。