WeBlog

Webに関する情報を中心に発信してるブログ

Railsの環境構築での疑問

今回はスクールの課題でforkした後に環境構築で疑問に思うことがあったので、その内容を書いていきます。

1、リモートリポジトリをforkする

今回は既存のリモートリポジトリをforkして課題を進める感じだったので、ますはforkしました。

2、リモートリポジトリをローカルにcloneする

% git clone URL

% cd rspec_app_exam

次にforkしたリモートリポジトリをローカルにcloneしました。

3、ブランチを切る

# ローカルリポジトリでブランチを切る
% git checkout -b test

% git branch
* test

まずはgit checkout -bコマンドで、開発用にブランチを切ってあげました。

git branchコマンドで、ブランチが作成されて、切り替わっていることを確認しました。

4、環境構築

% bundle install

まずは、ローカルにcloneしてきたので、Gemfileに記載されたgemをインストールするためにbundle installコマンドを実行しました。

すると、vender/bundle配下にインストールした、いろんなgemのディレクトリやファイルが作成されます。

ちなみにbundle install --path vendor/bundleなど--path vendor/bundleは必要ないらしいです。

https://qiita.com/jnchito/items/62adbea043abf72fa7cc

f:id:weblog_tec:20210602220012p:plain

f:id:weblog_tec:20210602220032p:plain

% rails db:create
Created database 'db/development.sqlite3'
Created database 'db/test.sqlite3'

rails db:createconfig/database.ymlの設定に基づいて、データベースが作成される。

ちなみにdevelopmentとtestしか作成されないので、prodactionは作成されない。

なので、上記の画像をみてみると、development.sqlite3 や test.sqlite3 というファイルが作成されている。

また、GUIで確認してみると、DBは作成されているが、テーブルやカラムは作成されていないことがわかる。

f:id:weblog_tec:20210602220122p:plain

f:id:weblog_tec:20210602220134p:plain

% rails db:migrate

rails db:migrateコマンドでマイグレーションファイルを実行して、テーブルやカラムを作成する。

また、rails db:migrateコマンドを実行すると、rails db:schema:dumpコマンドも自動で実行されるので、スキーマファイル(schema.rb)を作られたり、更新されたりする。

rails db:migrateコマンドを実行した場合、デフォルトでは開発用に対してマイグレーションが実施される。

なのでGUIでみてみると、開発環境にはテーブルやカラムが作成されているが、test環境には作成されていない。

f:id:weblog_tec:20210602220158p:plain

# test環境にマイグレーションファイルを適用する
% rails db:migrate RAILS_ENV=test

なので、今回はtest環境にもマイグレーションファイルを適用してあげたいので上記のコマンドを実行。

https://qiita.com/mah666hhh/items/6e3bbdde67f9ccb59d0e

% rails db:seed

rails db:seedコマンドdb/seeds.rbファイルをを実行して、develop環境にダミーデータを作成する。

% bundle exec rails s

rails serverコマンドによるサーバーの起動。

http://localhost:3000でアクセスできたらOK

疑問に思ったこと

何に疑問を感じたのかですが、今回の課題では1個1個コマンドを打って開発環境を整えていきました。

# 今回は使わない
% rails db:setup

ただ、rails db:setupコマンドを実行すれば

  • データベースの作成
  • スキーマの読み込み(テーブル作成、カラム作成、マイグレーションファイルの実行)
  • シードデータを用いてデータベースの初期化

までをトータルで実行してくるんじゃないのかと疑問に思いました。

rails db:setupは何をしてくれるのか?

# データベースを作成する
% rails db:create

# db/schema.rbを利用してテーブルやカラムが作成される。db/migrate/**.rb は使われません。
% rails db:schema:load

# シーダーファイルを実行する
% rails db:seed

rails db:setupコマンドは上記3つを実行してくれるみたいです。

rails db:migrateマイグレーションファイルをもとに、テーブルやカラム、schema.rbファイルを作成したり、更新する。

rails db:schema:loadはschema.rbの内容を現在参照しているDBに適用して、テーブルやカラムを作成する。

データベースは削除され、作り直されるみたいです。

https://www.it-swarm-ja.com/ja/ruby-on-rails/rake-db:migrate-db:resetとdb:schema:loadの違い/1067577738/

https://qiita.com/hirohero/items/2f29334878b0cb525bda