Qman's Diary

キューマン・エノビクトのブログです。
メインのサイトはこちら: キューマンのコンテンツ置き場
Twitter: @QmanEnobikto

Rubyを初めて書いたので感想

ちょっとしたAPIを叩きたかったので、適当にプログラムを組もうと思ったんですが、どうせなら新しい言語の勉強がてら今まで挑戦したことのないRubyを使ってみようと思いました。

やりたかったこと

SOLD OUT 2というファンタジー世界でお店を経営するシミュレーションゲームがあります。 そのゲーム内ではプレイヤーとNPCによる経済が成り立っているのですが、ありがたいことに、このゲームの開発者によって、ゲーム関連の情報を取得できる APIが公開されています(不満点も多々ありますが)。
私はこのAPIを使って、市場の情報を取得してくるDiscordのbotを友人と一緒に作りました。 そして今なお開発途中ではあるのですが、どうしてもAPIとして利用しづらいデータがあります。それが蓄積されたレポートやランキングのデータです。
実際見てもらえればわかるのですが、これは非常に大量のデータです。しかも一つのjsonファイルが2MBくらいあることもあるので、それらがおよそ2年強の間蓄積され続けているとなればその全データのサイズが 大きいことは想像に難くないはずです。
まだこのデータを利用した機能をbotに搭載する予定はありませんが、データはいつでも自由に使えるようにしておきたいものです。というわけで、データを全てDLするプログラムを書いてみました。

コード・機能

GitHubのリポジトリに上げてます。
ほんとはここに載せようと思ったけど一回載せてから改変が一筋縄でいかなすぎてやめた。
ちなみに多分普通に動きます。

機能については死ぬほどシンプルで、取ってくる日付の最初と最後をYYYYMMDD形式で指定するだけでできます。ただし融通は利かないので全てのデータを取ってきます。エラーはスルーします。
ちなみに私はこれでデータを取ってきてますが、5時間くらいは普通にかかるので普段使わないPCとかでやるといいと思います。
あと2017/5/7から全部取ってくると総量が2.5GBくらいになるので気をつけてください。

やってみて

深夜にやるもんじゃねえ。いくらでもアホと罵ってもらって構いません、美少女ならなお良し。とにかく深夜に新しいプログラミング言語の学習を始めるのはどう考えても悪手です。
尤も、今あるコードはほとんど普通の時間に書いてますが。

真面目な話ですが、まず、Pythonで学んだことはある程度活きました。例えば今回、日時を取り扱いましたが、strftimeなどの見慣れたものがあって、何をやってるのかがわかりやすかったです。
なんだかんだ言ってしっかり書けたので、全くダメだったなんてことはないと思います。
その一方で、requireまわりがわかりにくかったです。Pythonではimportしたものの名前がそのまま使えるのですが(例: import datetime→datetime.datetime.now())、Rubyでは 微妙に違っていたりします(例: require "open-uri"→open()、require "date"→Date.parse())。後者に関しては、別にrequireしなくても書けるDirやFileといった似た書式のものがあったので、 わかりにくかったです。
また、Pythonに慣れたが故の弊害として、endをよく忘れるというものがありました。ifなどのループの最後にendをつけ忘れてエラーを起こすということが何度もありました。 こればかりは自力で癖を直すしかありません。

まとめ

以前から何かしら新しい言語を学びたいとは思っていたのでいい機会でした。Rubyはサーバーサイドでも使用される言語なので学んでいけたら自分にとってもプラスになると思います。
今後はC#やjavaのような、静的型付け言語に挑戦したいです(未だに挑戦していないので)。直近で言うと(学校で)Javaを学ぶ確率が一番高そうです。


ツイート