Gemを作ってみた!
SORAの開発
- バックエンド・バッチの開発
- Ruby / Ruby on Railsがメイン
- 約3年?利用している
- Lambda で Ruby2.5(2018年11月頃〜) or Ruby2.7(2020年2月頃〜)
をサポートしている
課題
バックエンドとバッチで同じロジックを使いまわす
同じお題の開発していそうだなー?
ライブラリ作ってみるか!
✨
✨
ライブラリってどう作り始めるの?
初めてGemを作る時
命名規則のオススメもある!
1. アンダースコア(_) クラスやモジュールに複数の単語がある場合
2. ダッシュ(-) 他のgemに機能を追加する場合
①
②
②
① + ②
何をライブラリにしようか?
社外でも社内でも活かせるライブラリ
- スタートアップとして、社外に向けてだけ開発ができる余裕はなかなかない
(共通プラットフォーム開発のチームを持っている場合は、別ですが、、、) - たまたま、住所から緯度経度の取得開発を行うことがあり、
緯度経度を取得するAPIを2種類扱っていた - 緯度経度を引けなかったとき「Next API」的なものは存在していなかった
今回作ったGemは「sora_geocoding」なので
①
②
②
① + ②
命名規則①を採用しています
ライブラリの仕様は・・・
-
Geocoding APIとYahoo!ジオコーダ API を利用して、住所から緯度経度を取得
-
Yahoo!ジオコーダ API を利用して、
緯度経度が取得できない場合はGeocoding APIからも取得する
- Geocoding APIが取得できなければ、自動的に終了
ライブラリ作成Tips
既存ライブラリを参考にして開発してみる!
スター🎖が多くついていて、
利用目的が近そうなライブラリが良いかもしれないです
全体仕様検討参考 >>
Geohashロジック参考 >>
guard-rspec gem
・ロジックやテストが変更された時に自動で実行して開発
・先に最終結果だけのテストを書いて、実行しながら開発ができる
(TDD的な開発スタイル)
// Guardfile
guard :rspec, cmd: 'bundle exec rspec' do
watch(%r{^spec/.+_spec\.rb$})
watch(%r{^lib/sora_geocoding/(.+)\.rb$}) { |m| "spec/unit/#{m[1]}_spec.rb" }
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/unit/#{m[1]}_spec.rb" }
watch('spec/spec_helper.rb') { 'spec' }
end
SoraGeocoding
.search
when 200 status on Geocoding API
is returned "geocoding" site.
is returned latitude and longitude and google_maps tags.
when 200 status on Yahoo Geocoder API
is returned "yahoo" site.
is returned Status and Coordinates tags.
.coodinates
when 200 status on Geocoding API
is returned "geocoding" site.
is returned latitude and longitude.
when 200 status on Yahoo Geocoder API
is returned "yahoo" site.
is returned latitude and longitude.
.geohash
when latitude 33.333333333 and longitude 133.3333333
is returned "wvyvdh4kezeh".
Finished in 1.11 seconds (files took 0.98608 seconds to load)
9 examples, 0 failures
Coverage report generated for RSpec to /Users/hironori/work/sora_geocoding_hirontan/coverage. 75 / 78 LOC (96.15%) covered.
Faker gem
・都市名や食べ物などダミーデータを用意してくれているライブラリ
・ダミーデータをCSV生成やデータベース格納したい場合に活用できるかも
// 都市名をクエリとして扱ってます
let!(:query) { Faker::Address.city }
・あまり想定していなかった空白文字のエラーを発見できました。
(San Franciscoなど)
simplecov gem
・コードカバレッジを計測してくれる
Finished in 0.93592 seconds (files took 0.5433 seconds to load)
38 examples, 0 failures
Coverage report generated for RSpec to /Users/hironori/work/sora_geocoding_hirontan/coverage. 266 / 266 LOC (100.0%) covered.
次回は・・・Rust関連かなー
Gemを作ってみた!
By hirontan
Gemを作ってみた!
- 350