Highlight39制作の過程
はじめに
この記事は元々noteに投稿していた(現在は削除済み)ものに修正を加えたものです。
noteは見られてる感強かったので、こじんまりした場所に置いておくのがいいかなと。
内容はHighlight39を作ったときの制作の過程や思ったことをメモしたものです。
1回生の頃作ったものです。初学者の方に共感、参考になれば幸いです。
第0章 開発に至るまで
※大したこと書いてない激痛文章です。僕は中学生の頃からボカロを聴いており、ファン歴もそろそろ6年半となる頃です。ハマった当初はniconico動画でランキングを片っ端から漁り、曲を聴いていたが、2年くらいたった頃あまり漁らなくなってしまった。その大きな要因はYouTubeである。YouTubeでは面白い動画が上がっているのに対してniconico動画は動画の本数が少ないことから面白い動画がどうしても少なくなってしまう。最初niconico動画を見始めた頃は過去の動画を漁って満足していたが、それもだんだんと底を着いてしまった。このことからだんだんとniconico動画から離れるようになってしまった。またボカロのほとんどの曲はYouTubeにも上がっているので問題はないように思えた。高校生になる頃にはほとんどniconico動画は見なくなってしまった。今まで聴いてきたボカロ、たまにYouTubeの関連動画で出てくる聴いたことのないボカロを聴くくらいで満足して高校時代は過ごした。しかし、時が経つに連れて気がついたのだがめっちゃくちゃ最近のボカロに弱くなっている。その原因はniconicoにあってYouTubeにない機能であった。そう、ランキング機能である。昔はランキング機能からボカロを習慣的にチェックしていた。しかし、YouTubeだけ見始めるようになってからその習慣がなくなっていたのだ。中学生のとき、せっかく色んなボカロをチェックしていたのに、そこに空白ができるのが嫌だと思ったのが今回Highlight39を作ろうとしたきっかけである。
Discord
niconico動画は見なくなってしまったが、変わりに毎日のように見るようになったものがある。それはDiscordである。ゲームが好きな僕は友達とゲームをするためにDiscordをよく開くようになった。また、ここ最近ではゲーム用途以外にも様々な場面で利用するため中学生のときniconicoを見ていた頻度のレベルでDiscordを使用している。
そこで僕はひらめいた。Discord bot にniconicoのランキング情報を載せたら最強?ということです。ここから僕のbot制作は始まります。
第1章 どうやって情報取得する?
構想が固まってやる気満々の俺氏。しかし、至極真っ当なことに気が付きます。それはランキングの情報どうやって取得する問題。
知識皆無の僕「niconico動画のサイトいって情報パクれる最高なものないかなぁ..」
なんとそれが存在しました。その名はWebスクレイピングです。これはWebページ上の文章や画像を取得できるという優れものです。これでできるぜ。そう思っていた矢先、参考にしていたページを下にスクロールすると、「スクレイピングを許可していないサイトも存在します。」との文字が。Twitterなどは許可されていないようです。違法の可能性もあると聞き、少し戸惑います。また、webページが変化すると対応しなくなるということから、めんどくさそうとなり諦めムードになりました。
第2章 API
諦めムードの俺氏。他のWebスクレイピングの記事も見つつ、別サイトを探していると、関連検索欄のところに「Webスクレイピング API 違い」というものが出てきます。
知識も熱量も皆無の僕「なんだAPIって?」
調べてみると、APIはプログラムとwebサービスを繋ぐ便利なものみたいです。基本的には要求に対して応答するもの。例えばクレジットカード会社のAPIであれば、この打ち込んだ情報が正しいか確認してくれとネットショップ側が要求します。すると、クレジットカード会社側は合ってるよ、とだけ応答します。こうすることによってネットショップ側はクレジットカード情報を保管する必要がなくなり便利です。また、顧客側も安心して利用できます。なんと、ここまで調べたこと写しただけです!
ありがたーい記事さん
そう、つまりはどういうことかというと、niconicoのランキングを教えてって要求を出してはーいどうぞ!とくれるものが存在すれば最高ということですね。そんな僕はさっそく niconico API と検索します。
第3章 VocaDB
検索した俺氏。そんな僕をまた諦めムードにさせます。それはAPI利用規約です。そう、スプレイピングにもあったようにAPIにもだめなことがある場合があります。じゃあなんでAPI作ったんだ。恐る恐るniconico APIの利用規約を見る僕。なんか怪しい文を見つけます。
禁止事項
.
.
.
送信(自動公衆送信、送信可能化を含む)
んーーなんかだめそう🥺
調べてみてもよくわかんなかったです。グレーゾーン?
法律に詳しい人誰かタスケテ…
何回諦めてんだ俺、どうせまたなんか見つけるんだろ、ていうか第三章のタイトルのvocaDBってやつだろ?
That's light !!!
はい、vocaDBってやつを見つけました。
これは有志の人らで作られているサイトで、ボカロ曲のデータが管理されています。そして、APIもあって、利用も自由です!!(大量リクエストを除く)なんとなんと、ランキングも独自で作成していて、niconicoランキングにかなり類似しています。んーーーー、これ使う〜
第4章 下手すぎる勉強
さっそく使ってみようとする僕。しかし、APIの使い方がわからないことに気が付きます。そうだ、勉強だ勉強!やるぞー!諦めムードから一転。やる気満々です。Documentation for API Endpoints
なんと、やり方もちゃんと書いてくれている。優しいなぁ。
どうやらJavaを使うらしい。じゃあとりあえずJava勉強するか。勉強とか環境構築とか一週間くらい頑張る僕。そして、ついに、使う……..
前に、もう少しAPIについて調べてみることにしました。
すると衝撃事実が判明。Java勉強した意味あんまりなかった\(^o^)/
そもそもAPIっていうのはエンドポイント(URL)を使ってhttpリクエストを送り、そっからレスポンスをもらうものなんですねぇ。つまり、httpリクエストを送れたら別にPythonとかでも大丈夫なんですねぇ。
ありがたーすぎる記事さん
僕の一週間はほぼ無意味と化しました。これは非常に良くないことをしました。とても反省です。APIのことについてもっと調べとけよ。なにしてんだ。
第5章 ランキング君さぁ...
さっそくエンドポイント使ってランキングを取得だーーーー!!
できず。
色々調べたけどそもそもvocaDBのAPIとか使ってる人全然いなくて情報ほぼなし。他の情報は取得できるんですけど、ランキングはどうも取得できない。これから代替案で制作していくのですが、最後までこの謎は解けずに終わりました。
その代替案はHighlight機能というものです。そう、これがHighlight39の由来なんですね。この機能は最近熱い曲を取り上げてくれるものです。ほぼランキングでしょこんなもん。そう思った僕はこれで作ることに決めました。
第6章 制作
やっとのことで制作ですが、特に書くことないです。(T_T)
コードはもうちゃらちゃらって書きました。調べるところの方がよっぽど大変でした。新しく挑戦したことはデータベースです。このbotは複数サーバーに対応させたかったため、ギルド(サーバー)情報を保管する必要がありました。そこでデータベースの勉強に挑戦。MySQLを使いました。
第7章 公開
そう作ったものは公開しないといけません。discord botを24時間動かす必要があるのです。しかし、24時間PCを起動させておくわけにはいけません。そこでデプロイというものを行います。これによりPCを起動せずとも24時間動かせます。今回はrailwayを用いました。
まーたここで問題が発生するんですね。データベースを作ったはいいものローカルでしか動かないんですね。例えデプロイを行ってもデータベースがローカル上にあると本末転倒。そう、データベースがクラウド上にないといけません。僕は色々調べました。すると、MongoDBっていうのを発見。(MySQLをいい感じに使えるのを探したけどセキュリティとかの問題があって微妙だった)これで作り直すことにしました。修正にクソ時間かかりました、、、
何やってんだ俺。
まとめ
作りたいもの作れてよかった。(ちょっと違うけど)
使うものについてちゃんと調べよう。
作るときはどのように公開するかなどもっと先を見て作ろう。
そう、下調べすごく大事。