LoginSignup
9
7

More than 5 years have passed since last update.

StravaAPIを簡単に扱えるRubyGemを作った

Last updated at Posted at 2018-09-13

がんばルビィ

がんばルビィ!
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でのメソッド呼び出しを参考にしながら実装したのでかなりオブジェクト指向的なコードになってると思うし勉強になったので作ってよかった大満足!

9
7
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
7