フィヨルドブートキャンプを卒業した。
はじめに
僕はフィヨルドブートキャンプというプログラミングスクールを2020年11月18日に卒業しました。
同年11月24日から都内の自社開発企業でRailsを扱うエンジニアとして働いています。
卒業してからバタバタしていましたが、少し落ち着いてきたので卒業エントリを書きます。
ちなみに僕のことや、プログラミング学習のきっかけ、フィヨルドブートキャンプに参加した経緯・学んだことは別記事で書いてますので本記事では触れません。 詳細は下記。
卒業までどれぐらいかかったか
フィヨルドブートキャンプに参加したのは2019年10月13日からなので、約1年間かかりました。
と言っても参加してすぐの頃はまだ前職の仕事をやりながらだったのであまり学習の進捗はなく、前職を辞めた2020年2月頃から本格的に学習を進めていきました。
時間数で数えると1099時間かかってました。 (フィヨルドブートキャンプ内の日報で計算)
日報を書き忘れた日も結構あったのでなんだかんだで1200時間はやっていたと思います。 我ながら長いことやっていたんだとしみじみ。
卒業までを振り返って
一言で言うと、本当に長かったw
先日フィヨルドブートキャンプ内で僕の卒業式をして頂いた際、コメントを求められて咄嗟に出たのも「長かった」でした。
1年近く色々我慢しながらやってきたのでもう少しエモい事を言えるかと思っていましたが、全然出てこなくて自分でも笑いました。
ですが後々冷静に考えてみたら、この1年間はやりたくて無我夢中でやってきたから自分の中では当たり前のことというか、特別な事をしたつもりがなかったからだと気付きました。
また、フィヨルドブートキャンプはスクールというよりコミュニティに近いので、わいわいやってたから楽しんでできた、というのもあると思います。
どう変わったか
学習に前向きになった
前職も常に専門的な内容をインプットする必要があったので、継続したインプットは得意な方でしたが、プログラミングを学習するにつれてどんどん学習に前向きになっていきました。
新しい事を覚える、それにより新しいことができるようになる、それが目に見える形になる、という一連のサイクルにより学習意欲が高まりました。
Webの基礎を学べた
Web開発を目的にするプログラミングスクールなのでそりゃそうだ、という感じですが本当に幅広く学べたと思います。
仕事に必要なのもそうですが、普段の生活でもWebは身近な存在なので、その基礎を学んだことで見方が変わりました。
どんなURLになっているか、どういうデザインをしているのか、など色々なところを見るようになりよりWebに関わるのが楽しくなりました。
できないことや分からないことへの耐性
これはプログラミングを学習していく上で、何度も壁にぶち当たったおかげで耐性というか対処法が身につきました。
なんでも新しいことは「できない・分からない」の連続で全然前が見えなくなります。
それでも少しずつ動いていると段々わかってきて、気づけば「なんであんなに悩んでいたんだ?」といつも思います。
この経験が何度もあり、新たに何かにトライしようとして「できない・分からない」があっても、あまり辛くならず色々アプローチができるようになりました。
あとは「そのうち分かるようになる」と根拠のない自信を持つようになりました。
これから
現在は冒頭でも述べたように主にRailsを扱うエンジニアとして働いています。
とはいえまだ研修期間で実際のサービス開発に関われていません。
今は基礎の復習と会社の雰囲気や人を知るという期間だと思い焦らずじっくりやっていこうと思います。
どういうエンジニアになりたいか、と考えてもまだそんな壮大なことは考えられません...。 目の前の事を一つ一つこなしていき成長していきたいと思います。
新たな人生のスタートを切ったので不安と期待でいっぱいですが、何事も楽しんでいければいいなと思います。
最後に
フィヨルドブートキャンプにいらっしゃるメンターやアドバイザーや生徒や卒業生の方々、ありがとうございました。
今後もコミュニティとしてゆるくお付き合いできればと思います。
RSpecでWebMockとVCRを使ったテストを書く
はじめに
表題の通り、RSpecでWebMockとVCRを使ったテストを初めて書いたのでその学びをまとめます。
環境
各gem
WebMock
外部APIを叩くアプリにおいて、テストを書く際に擬似的なAPIのレスポンスを作成し、そのレスポンスを元にテストを実行します。
その際のAPIレスポンス(モック)を定義できるgem。
VCR
上記のモックは基本的には自分で書いて用意しますが、その手間を省けるgem。
モックデータが存在していなければ、実際にAPIを叩いてそのリクエストとレスポンスをYAMLファイルとして自動で作成してくれる。
以降はそのYAMLファイルをモックとしてテストを実行できる。
セットアップ
Gemfile
に以下を追加しbundle
コマンド実行。
gem "webmock" gem "vcr"
spec/rails_helper.rb
に下記を追加し、RSpecでWebMockを使えるようにする。
require "webmock/rspec"
VCRの設定
spec/spec_helper.rb
にVCRの設定を書いていきます。
require "vcr" # ... VCR.configure do |c| c.cassette_library_dir = "spec/vcr" c.hook_into :webmock c.allow_http_connections_when_no_cassette = true c.configure_rspec_metadata! c.ignore_localhost = true c.ignore_hosts "chromedriver.storage.googleapis.com" c.default_cassette_options = { record: :new_episodes, match_requests_on: [:method, :path, :query, :body] } end
VCRはモックデータを「カセット」と呼ぶので、cassette = モックデータ
であり、カセットを使用することを「再生」と呼んでいます(シャレだ...)。
各設定については以下の通り。
cassette_library_dir = "spec/vcr"
...カセットを保存するルートディレクトリhook_into :webmock
...利用するモックライブラリを指定allow_http_connections_when_no_cassette = true
...VCRを使わない場所ではHTTP通信を許可するconfigure_rspec_metadata!
...RSpecとの連携ignore_localhost = true
...ローカルホストのリクエストを無視し、Capybaraのリクエストに干渉しないようにするignore_hosts "chromedriver.storage.googleapis.com"
...指定したホスト(chromedriver.storage.googleapis.com)へのリクエストを無視するrecord: :new_episodes
...カセットがなければAPIをコールしてそれを記録するmatch_requests_on: [:method, :path, :query, :body]
...カセットを引き当てる条件。今回はリクエストのメソッドとパス、 クエリそしてリクエストボディが一致するカセットを再生するという意味。
テストコードでVCRを使用
外部APIへのリクエストが生じるテストコードでVCRを使用するには以下のようにカセット名を指定します。
# テストコードを一部抜粋 describe "記事一覧", vcr: "twitter_api_response" do it "user_1の記事が表示される" do visit articles_path expect(page).to have_content "2020-10-17" end end
もしくは以下のような書き方の方が明示的で読みやすい。
describe "記事一覧", vcr: { cassette_name: "twitter_api_response" } do it "user_1の記事が表示される" do visit articles_path expect(page).to have_content "2020-10-17" end end
これでテストを実行すると、指定したカセットが存在していなければAPIを叩いてそのレスポンスをYAMLファイルで保存してくれます。
今回の場合はspec/vcr/twitter_api_response.yml
が保存されます。
次またテストを実行するとこのファイルをモックとして参照してテストを実行してくれます。便利。
モックに秘密情報を載せたくない場合
今回はTwitter APIを叩いてテストを実行していますが、保存されたカセットにはリクエスト時のAPI Keyとアクセストークンが平文で記載され保存されていたので、これをいい感じにマスクしたい。
VCRの設定に以下を追記する。
# spec/spec_helper.rb VCR.configure do |c| # 省略 c.filter_sensitive_data("<API_KEY>") { ENV["TWITTER_API_KEY"] } c.filter_sensitive_data("<ACCESS_TOKEN>") { ENV["ACCESS_TOKEN"] } end
隠したい文字列(API Keyやアクセストークン)を完全一致で指定します。今回の例でいうとENV["TWITTER_API_KEY"]
の部分。
実際にはこの環境変数にAPI Keyを格納し、この設定上でも環境変数で指定しておく。
こうしておくとカセットに平文で乗っていたAPI Keyそのものが"<API_KEY>"
という文字に置き換わる。
カセットを一度削除してからもう一度テストを実行すると上記の設定が反映されたモックが作成される。
参考
- bblimke/webmock: Library for stubbing and setting expectations on HTTP requests in Ruby.
- vcr/vcr: Record your test suite's HTTP interactions and replay them during future test runs for fast, deterministic, accurate tests.
- VCRでWeb APIのモックを楽しよう! - アクトインディ開発者ブログ
- VCR gemでアクセストークンとかをいいかんじにする術 - kitak blog
- VCR で外部 API へのリクエストをダンプするときに機密情報をマスクしたい - Qiita
- 【動画付き】Everyday RailsのサンプルアプリをRails 6で動かす際に必要なテストコードの変更点 - give IT a try
rails newコマンド実行時のオプション
はじめに
rails new
コマンドを叩く機会は頻繁にはないが、いざ実行する時に「どんなオプションつけてたっけ?」となるのでメモ。
$ rails new hogehoge -TC -d postgresql --skip-action-mailbox --skip-turbolinks --skip-active-storage --skip-action-text --webpack=vue