RspecでHTTPのリクエスト・レスポンスのテストを行った
rspecでHTTPのリクエスト・レスポンスのテストを行った。
今回も、ごみシリーズです。
ごみ収集日の検索をLineからできるようにした - takapi86のブログで、APIを作っていく中で、rspecでのテストでHTTPのリクエスト・レスポンスのテストができるということを知ったので、メモして起きます。
事前準備
対象
- ごみ収集日の検索をLineからできるようにした。にも書いてありますが、ゴミ収集APIには以下のエンドポイントがあります。
今回は上記のうち、収集場所名を前方一致で検索し、一覧で返すAPI
のテストを書きたいと思います。
導入
rspecのテストファイルは以下の場所 * spec/requests/towns_spec.rb
- 今回はTownsControllerのテストで、リクエストを投げて確認するため、以下のように記述します。
describe TownsController, type: :request do end
- エンドポイントはGETメソッドで、
/towns/:name
なので以下のように記述します。
describe TownsController, type: :request do describe 'GET /towns/:name' do end end
- ステータスコードは200で返ってくるのを期待するテストを追加します。
- ここでは省略していますが、事前にFactoryGirl等でテストデータを生成するようにすると良いでしょう。
describe TownsController, type: :request do describe 'GET /towns/:name' do it '200 OK を返す' do get URI.escape("/towns/#{"日吉"}") expect(response.status).to eq(200) end end end
- 事前にFactoryGirl等でテストデータを生成するようにすると良いでしょう。
- テストを実行してみましょう。
bundle exec rspec spec/requests/towns_spec.rb Finished in 0.50264 seconds (files took 3.08 seconds to load) 1 example, 0 failures
正常にテストが終了したようです。
今回は、test環境にデータが入った状態でテストを行いましたが、 先ほど言ったように事前にFactoryGirl等でテストデータを生成するようにすると良いでしょう。
ごみ収集日の検索をLineからできるようにした
前回のLINE Notifyを使ってごみ収集日を自分にお知らせしてみた。に続き、ごみシリーズです。
会社で携わっているサービスをゴリゴリAPI化していく予定(やっていき)なので、その練習も兼ねて作成しました。
今回は、Messaging API(LineBot)を使って、メッセージから横浜市のゴミ収集日を検索できるようにしました。
現在は、ざっくりイメージとして実装してみた感じなので、機能強化・リファクタリングは今後行っていく予定です。
こんな感じです。
収集場所名を前方検索し、もし、町名がドンピシャで一致していたら、収集曜日を出力。複数ある場合は「もしかして?」と収集場所名・コードを一覧出力します。
収集場所コードでも検索ができるので、収集場所名がわからない場合は、ざっくり町名などを入れて調べ→コードで検索といった流れで調べます。
環境は、
で実装しました。今回作成したAPIは以下3つ
です。Restfulな感じで作りました。
今回は、データについては横浜市のページを見て手動で作っていますが、 今後は、横浜市のHPからスクレイピングしてデータを取り込み、それを返すようにしていきたいと思います。
実は、今回APIを実装するのが初めてだったのですが、API設計や命名規則な部分で悩みました。
実はまだまだ納得がいっておりませんので、今後、バージョンアップする際には、特にこの辺を意識して取り組んでいきたいと思います。
では、また。
LINE Notifyを使ってごみ収集日を自分にお知らせしてみた
Rubyの練習も兼ねて、LINE Notifyを使ってごみ収集日を自分にお知らせしてみました。
やったこと
- LINE Notifyのマイページへログイン(スマホ版のLINEで登録したものです。)し、トークンを発行
- メッセージの送信テスト
- Rubyからメッセージを送信
- ごみ収集日のお知らせテキストを作成し、メッセージを飛ばす処理を追加
- 上記をcrontabへ登録
参考
LINE Notifyのマイページへログイン(スマホ版のLINEで登録したものです。)し、トークンを発行
特に問題なく発行出来たので割愛
メッセージの送信テスト
参考ページ コマンドラインから LINE にメッセージを送れる LINE Notifyにもある通り、curlから簡単に試すことができた
curl -X POST -H 'Authorization: Bearer [access_token]' -F 'message=foobar' https:// notify-api.line.me/api/notify
※ [access_token]の部分を発行されたトークンに置き換えます。([]は必要なし)
Rubyからリクエストを送信
以下のように実装してみた。
line_notify.rb
# coding: utf-8 require 'net/http' require 'uri' require 'openssl' class LineNotify def self.send_msg(msg, token) if token.nil? || token.empty? puts 'Tokenをセットしてください。' return end uri = URI('https://notify-api.line.me/api/notify') req = Net::HTTP::Post.new(uri.path) req.set_form_data('message' => msg) req['Authorization'] = 'Bearer ' + token http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true if uri.scheme == 'https' http.verify_mode = OpenSSL::SSL::VERIFY_NONE res = http.start do |h| h.request(req) end end end
irbでテスト
irb(main):001:0> require './line_notify' => true irb(main):002:0> LineNotify::send_msg("テストです。", "ここはトークン") => #<Net::HTTPOK 200 OK readbody=true>
送れたみたい。
ごみ収集日のお知らせテキストを作成し、メッセージを飛ばす処理を追加
schedule.rb
# coding: utf-8 require "date" require 'json' require 'yaml' require './line_notify' config = YAML.load_file("config.yml") youbi = [:日,:月,:火,:水,:木,:金,:土] wday = youbi[Date.today.wday] gomi_schedule = { 月: '燃やすごみ,燃えないごみ、スプレー缶、乾電池', 火: '缶・びん・ペットボトル', 水: 'プラスチック製容器包装', 木: '燃えないごみ', } if !gomi_schedule[wday].nil? msg = "\n今日は"+ wday.to_s + "曜日【" + gomi_schedule[wday] + "】の収集日です。" LineNotify::send_msg(msg, config['token']) end
config.yml
token: [ここにトークンを追加]
上記をcrontabへ登録
crontab -e
7時に通知が来るよう設定
0 7 * * * cd ~/ && ruby schedule.rb
きたぞっ!
明日からゴミの出し忘れは無くなるに違いない。
ThinkPad X200に Ubuntu 16.04 LTSをインストールした(OSインストール編)
自宅のThinkPad X200にUbuntu 16.04 LTSをインストールしたので、手順を残しておく
手順の範囲
Ubuntuのイメージが入っているメディアが手元にある状態。PCにメディアをセットしインストール開始〜Ubuntuにログインするところまで
OSのインストール
Ubuntuのイメージが入っているメディアをセットし、PCを起動します。
以下の画面が表示されます。画面が切り替わるまでしばらく待ちます。
言語は日本語
を選択し、Ubuntuをインストール
を選択します。
続ける
を選択します。
(アップデートはインストール後に行います。)
ディスクを削除してUbuntuをインストール
をチェックし、インストール
を選択します。
続ける
を選択します。
住んでいる場所がTokyo
になっていることを確認し、
続ける
を選択します。
キーボードレイアウトを日本語
になっていることを確認し、
続ける
を選択します。
あなたの名前
、コンピュータの名称、ユーザ名、パスワードを入力し続ける
を選択します。
しばらく待ちます。
今すぐ再起動する
を選択します。
※PCが再起動します。
再起動後、先ほど設定したユーザ名、パスワードでログインします。
ログインできたことを確認します。
ターミナルを開き、以下のコマンドでOSをアップデートします。
sudo apt-get update sudo apt-get upgrade