がんばルビィ
https://github.com/aimerald/struby
概要
肉体派エンジニアとして日々のロードバイクでのトレーニングに明け暮れている私はStravaというSNSを使ってトレーニング(主にライドの)を記録している。Strava
Stravaは自転車に機材がついていれば走行距離やケイデンス(1分でペダルを何回回したか)とかスピードとか出力とかを記録できる。GPS対応のスピードメーターがついていればどこを走ったかも記録される!
トレーニーとしてもエンジニアとしては日々のトレーニングを通じて自分がどの程度成長できたのかはとても気になる!
そこでStravaからデータを持ってきて自身の成長ぶりを見る方法を考えたのでした!
APIのドキュメントを確認しよう
https://developers.strava.com/docs/reference/
StravaのAPIはしっかり作られていてドキュメントもある!
Rubyでは提供されていない
完璧じゃん!と思ったんだけどなんとRubyのライブラリがない!
まじかよ!と思ったんですが同じことを考えているエンジニアが他にもいたみたいでRubyで使えるようにしてくれてる!
https://github.com/jaredholdcroft/strava-api-v3
これを使うかと思ったんだけどレスポンスがHash。別にこれで悪いわけではないんだけどちょっと勉強のためにオブジェクト化して使いやすくしてみようって思ったのでした!
Gemにしよう!
自分でGemを作る経験ってあんまりなくってすべてが新鮮だった。
普段minitestしか使わないのですが bundle gem struby
としたらRspecだったのでそういうもんかと思ってRspecでテスト書いてた。後で知ったけどminitestでもOKらしい。(´・ω・`)
TDD
ドキュメントを見てもらったら分かる通りでレスポンスのJSONが結構ごっつい。
なのでオブジェクトを作る前に事前にどういうインスタンスが生成されるかをテストに書き出してその上で実装していった。テストを書いていると設計を見直したいなと思うところがでてきて実装を先にしてテストをあとからやってたら収集がつかなかっただろうなと思ったのでTDDって有意義なんだなぁって感動した
使い方
git clone https://github.com/aimerald/struby
cd struby
./bin/install
これでStrubyをインストールすることができる
あとは
require 'struby'
API_TOKEN = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
athlete = Struby::Athlete.new(API_TOKEN)
activities = athlete.activities
puta activities.first.distance
# => 10000
my_bike = athlete.bikes.first
puts my_bike.distance
# => 4400
club = athlete.clubs.first
puts clubs.name
# => I am Specialized
こんな感じ!
作ってみて
初めてrequireして呼び出すGemを作ったけどRubyはTDDの方針も明確に用意してくれてるのでありがたいなって思った。
Railsでのメソッド呼び出しを参考にしながら実装したのでかなりオブジェクト指向的なコードになってると思うし勉強になったので作ってよかった大満足!