2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【RSpec 基本】 Rails初学者の自分が知らなかった開発環境ごとにDBが違う話

Last updated at Posted at 2021-06-10

プログラミング初学者の私が、RSpecを書いていて
環境ごとにDBが違うことを知らずハマったので、記事に書き留めておきます。
プログラミング初学者の方の参考になれば嬉しいです。
また、間違い等ありましたらご指摘頂けると助かります。

それでは、見ていきましょう!!

【RSpec 基本】 Rails初学者の自分が知らなかった開発環境ごとにDBが違う話

RSpecを書く中で
  • 「テストってそもそもプロダクトコードをブラウザで動かしながらやってるの?」
  • 「RSpecで定義した変数と、プロダクトコードに定義した変数ってどう違う?」
  • 「RSpecで定義したデータって、テストのあとはどうなるの?」

  • こんな疑問が頭の中にブワーッと入ってきて、「何がわからないのかわからない」状態になりました。笑

    そんな初学者あるある?な疑問を解決していきます!

    Railsの環境には3つの種類がある

    結論から言うと、下記の4点を知ることで疑問が解決しました!

    • 「Railsには 本番環境、開発環境、テスト環境の3つの環境が用意されており、それぞれで違うDBを参照している。」
    • 「RSpecは テスト環境で実行されるため、作成されたレコードはテスト環境用のDBに格納され、テスト終了後に削除される。」
    • テスト時には新しくヘッドレス(見えない)ブラウザを立ち上げて、テスト用DBから取得した内容を表示したページを検証している。
    • 表示ページのHTMLはプロダクトコードを元に生成される。

    • Railsの「3つの環境」については他の記事でもたくさん解説されています。

      【Rails】Railsの3つの環境
      【Rails】configのenvironments配下のファイルの意味と記述内容を理解する。(development.rb, production.rb, test.rbとは?開発環境・本番環境・テスト環境の違い)

      本番環境

      実際にユーザーがシステムを使用する環境のことです。

      具体的に言うと、普段私たちが使っている「amazon」や「楽天市場」が本番環境にアップされたサービスです。


      例え話をすると、、

      プログラミングを初めると必ずといって良いほど
      「herokuにデプロイする」
      という言葉を見かけます。

      これはコーディングしたプログラムをherokuにデプロイする(pushする)ことでURLが作られて、そのURLを友だちに送ったりすると作ったサービスを見られるようになります。
      (本番環境にアップしないとそのサービスを第3者がインターネット上で見ることはできません)


      誰でも見られるそのサービスは「本番環境で動いている」ということになります。

      開発環境

      これが普段、私達がプログラミングをして、ブラウザで動きをチェックしている環境です!

      Railsではデフォルトの設定がこの「開発環境」になっています。

      ちなみにそれぞれの環境の設定をしているファイルは
      config/environmentsの中にある以下の3つです!

      • development.rb(開発環境)
      • production.rb(本番環境)
      • test.rb(テスト環境)

      テスト環境

      そして、残りのひとつがテスト環境です。

      プロダクトコードのHTMLをヘッドレス(見えない)ブラウザで表示し、「RSpec」や「Minitest」などによって定義されたテスト用DBのレコードを参照して、テストを実行します。


      つまり、localhostでアクセスするページに表示されている内容と、テストで検証している内容には全く関係がありません。


      ちなみにRailsでは「Minitest」がデフォルトになっています。

      なぜ環境ごとにDBが分かれているのか

      環境ごとにDBが分かれていないと、DBには開発用のダミーデータと顧客のデータが混在することになり、間違えて削除してしまう、ということになりかねないからです。
      先程も例に挙げた「amazon」を使って説明します。
      「amazon」では顧客のクレジットカードや住所などの情報を入力します。

      これらの重要な情報をDBに保存し、管理するわけですが、DBがひとつだけの場合、顧客のデータを消してしまうことがあるかもしれません。

      そして本番環境では常にサービスが動いています。

      本番環境のDBに不具合が発生すると、買い物したくてもできなくなってしまうということです。
      amazonくらい大規模になるとその損失は計り知れませんね。。。

      おわりに

      今回はRSpecで私自身が引っかかったところについて記事を書きました。

      まだまだ知識が少なく、間違っている点など見付けた際はぜひご教授頂けると助かります。


      それでは、最後まで読んで頂きありがとうございました。

      追記

      コメントにてご指摘を頂きました。 Railsの環境は名前を付けて増やすことができます。 以下に解説記事のリンクを貼っておきます。 https://qiita.com/yusabana/items/a1f4fe2c37b20db2a3f6

      またひとつ勉強になりました!

2
3
2

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
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?