Sendagaya.rbさんに初参加させていただきました!
先日お仕事のために東京に引っ越したのですが、未だにベッドが届かず床に寝ています。引っ越し作業大変すぎて、仕事開始までに終わるか心配になってきました・・・。
昨日Sendagaya.rb #295に参加させていただきました!
ずっと田舎に引きこもっていて勉強会に参加させていただくのは久しぶりだったので緊張しましたー。
流れとしてはこんな感じでした。
- @s4naさんの技術的な相談をみんなで考える
- 自己紹介
- 軽い懇親会(のはずでしたがお店がギリギリ閉まってしまった)
@s4naさんの技術的な相談をみんなで考える
RubyにはWebMockというHTTPリクエストをモックするgemがあるのですが、それがうまく機能しないという相談でした。モックしているはずなのにリクエストが飛んでしまう。
提示されたコードはこんな感じでしたー
WebMock.enable! WebMock.stub_request(:get, url).to_return(response)
いろんな意見が出しましたが、以下覚えている部分だけ箇条書きでー。
- モックするコードの直後にブレークポイント仕掛けて試行錯誤してみると良いかも
- VS Codeでブレークポイント仕掛けるにはどうすれば? -> これを使うと良さそう Visual Studio Codeを使ってRailsをデバッグ実行してみよう - Qiita
- あとbinding.pryを使うのもいいよ -> pry-byebug
- HTTPメソッドやURLがマッチしていない可能性がありそう
- 問題を切り分けるために、
:any
や*
を使ってそもそもリクエストがモックできるのか調べてみよう -> モックできなかった。モックするコードではなく、他の部分に問題がありそう
- 問題を切り分けるために、
- 特定の条件でモックがdisabledになってしまう可能性がありそう
- 今回は外部APIへのリクエストではなく、localhostへのリクエストだった。その場合はもしかしたらデフォルトでdisabledになってしまう? -> 調べてみるとそういうことではなかった
- この辺りも怪しい https://github.com/bblimke/webmock#external-requests-can-be-disabled-while-allowing-specific-requests -> 調べてみるとそういうことではなかった
- 何か見落としがありそう。そもそも論として処理のフローはどんな感じ?
- Webmockはどの部分をモックする?
ということで、Web APIにvisit
でブラウザアクセスしていたのでモックできないということでしたー。
この後もここから派生して色々な学びがありました。
- ブラウザアクセスをWebmockでモックできるgemがあるよ -> puffing-billy
- リクエスト情報をダンプするgemがあるよ。めっちゃ便利そう -> http-dump
- コントローラーにTwitterAPIへのアクセス処理をベタ書きしてしまっている。これだとFatコントローラーなので、Twitterへのアクセス部分だけPOROに切り出すと良さそう
- 上記のインスタンスメソッドは、どうやって単体テストをすればよい?
感想
WebMockでモックできない件はあらためて考えてみると簡単なことなのですが、自分でPCを操作できない等の制約がある中で解決にまで至るのはなかなか大変でした。自分は見当違いなことを言ったり、そもそも問題を正しく理解できていなかったり、結構迷惑かけてしまいました。でも皆さんは1つずつ問題を切り分けたり、そもそもフレーム外の所に問題があるのでは?と気づいたりしていて、すごいなーと感心しっぱなしでした。どういう流れで解決まで至るか、@tkawaさん、@fukajunさん、@sanfrecce_osakaさん達、強い人達の思考の過程を生で見れたのはめちゃ勉強になりました!
あと今回は主催者の@tkawaさんと@fukajunさん以外、参加者の4人全員フィヨルドブートキャンプ生(卒業生含む)という奇跡が起きました✨自分はフルリモートでフィヨルドブートキャンプを卒業して、他の生徒さんと会うのは初めてだったので、なかなか緊張しました。でも3人とも優しい方だったので安心しました。よかったー。特に@NMPさんとはお互い上京したばかりで、初勉強会参加ということで意気投合しました。
そして主催者の@tkawaさんと@fukajunさんおふたりともとても優しい方で、本当リスペクトでした。Rubyコミュニティの方たちは、皆さん本当に優しいですよね。感動です✨
あと会場のランチェスターさんが凄くきれいでした。
久しぶりの勉強会で緊張しましたが、楽しいし勉強になるし最高の勉強会でした!主催者の皆さん、参加者の皆さん、会場提供してくださったランチェスターさん、ありがとうございましたー!