Rails勉強し直している - DB操作編 - $shibayu36->blog; の初期セットアップ部分で言及したとおり、Rails・Docker・MySQL・RuboCop・RSpec・factory_botという構成でやってみた。その構成を初期セットアップする方法についてブログ記事に残しておく。
作ったプロジェクトは https://github.com/shibayu36/rails-project に公開している。
Railsプロジェクトの作成
rails newを使って作成する。databaseをMySQLに指定する。テストは後でセットアップするため--skip-testする。それ以外もひとまず不要そうなものは除外する。
rails new rails_project --skip-test --database=mysql --skip-action-mailer --skip-action-mailbox --skip-action-text --skip-active-storage --skip-action-cable
RSpecの導入
以下をGemfileに入れ
group :development, :test do gem "rspec-rails" end
bundle installとrspec:installを実行。
bundle install bin/rails generate rspec:install
Dockerの導入
導入がちょっと複雑なので、e2d7b7bd のcommitを見ると早い。ポイントとしては
- 環境変数でDBアクセスの設定をできるようにする
- named volumesを使えば簡単にMySQLのデータを永続化できる
- pidファイルのハンドリングをしないと2回目以降立ち上がらなくなってしまう
- MySQLの接続ホストをlocalhostにすると、port指定してもmysql.sockを見てしまうので、127.0.0.1を明示的に指定する
RuboCopの導入
Gemfileに
group :development do gem 'rubocop', require: false gem 'rubocop-rails', require: false gem 'rubocop-rspec', require: false
bundle install
後は.rubocop.ymlに以下のような設定をし、自分でカスタマイズしていく。
require: - rubocop-rails - rubocop-rspec AllCops: Exclude: - "vendor/**/*" - "db/**/*" - "config/**/*" - "bin/*" - "node_modules/**/*" - "Gemfile" NewCops: disable
factory_botの導入
先にmodelを作っておく。
bin/rails generate model User name:string:uniq
Gemfileに追加し、bundle install。
group :development, :test do gem "factory_bot_rails"
後はfactory_botのための定義をしていくとよい。851ad8 のcommitを参考。ポイントとしては
- spec/support/以下を自動で読み込む設定を入れた
- spec/support/factory_bot.rb でFactoryBot::Syntax::Methodsをincludeすることで、namespace指定なしで
create(:user)
とかできるようにした - factory定義ではsequenceを使うことで、同一の名前をつけないように
まとめ
以上でDocker・MySQL・RuboCop・RSpec・factory_botを導入したRailsプロジェクトを作ることができた。今後Railsプロジェクトを作るときの参考にしたい。