🧐
Ruby3.1 + Rails7でRSpecの検証環境を作る
Rails7系がリリースされたので、それでRSpecの検証環境を作るためにやったことをまとめる
開発環境
OS macOS Monterey
MacBook Pro(14インチ、2021)
チップ Apple M1 Pro
Ruby 3.1.0 -> 3.1.0より古いとうまくいかない
Rails 7.0.1
ハマりどころ
M1 Macの初期状態だとopensslの設定がLibreSSLになっているので、切り替える必要がある
Ruby3.1.0からはOpenSSL@3が使えるが、3.1.0以前だとOpenSSL@1.1でないと動かない
Ruby2.4以下だとOpenSSL@1.1だと動かないので、更にダウングレードする必要があるらしい
# openssl確認
$ openssl version
LibreSSL 2.8.3
# LibreSSLからOpenSSLに切り替える
$ brew install openssl
$ brew link --force openssl@3
Linking /opt/homebrew/Cellar/openssl@3/3.0.1... 5487 symlinks created.
If you need to have this software first in your PATH instead consider running:
echo 'export PATH="/opt/homebrew/opt/openssl@3/bin:$PATH"' >> ~/.zshrc
$ echo 'export PATH="/opt/homebrew/opt/openssl@3/bin:$PATH"' >> ~/.zshrc
$ source ~/.zshrc
$ which openssl
/opt/homebrew/opt/openssl@3/bin/openssl
手順
$ mkdir test-app
$ cd test-app
$ rbenv local 3.1.0
$ ruby -v
ruby 3.1.0p0 (2021-12-25 revision fb4df44d16) [arm64-darwin21]
$ bundle init
Writing new Gemfile to /path/to/project_name/Gemfile
$ vi Gemfile
# frozen_string_literal: true
source "https://rubygems.org"
git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
gem "rails"
$ bundle install --path vendor/bundle --jobs=4
- bundle install オプション
- gemをプロジェクト内で管理するために --path を vendor/bundleに指定
- --jobs=4で並行処理でインストールできるらしい(多分速い)
悩ましいRails new
rails7のnewのオプションは以下の通り
$ rails new --help
Usage:
rails new APP_PATH [options]
Options:
[--skip-namespace], [--no-skip-namespace] # Skip namespace (affects only isolated engines)
[--skip-collision-check], [--no-skip-collision-check] # Skip collision check
-r, [--ruby=PATH] # Path to the Ruby binary of your choice
# Default: /Users/kosuke/.rbenv/versions/3.0.1/bin/ruby
-m, [--template=TEMPLATE] # Path to some application template (can be a filesystem path or URL)
-d, [--database=DATABASE] # Preconfigure for selected database (options: mysql/postgresql/sqlite3/oracle/sqlserver/jdbcmysql/jdbcsqlite3/jdbcpostgresql/jdbc)
# Default: sqlite3
-G, [--skip-git], [--no-skip-git] # Skip .gitignore file
[--skip-keeps], [--no-skip-keeps] # Skip source control .keep files
-M, [--skip-action-mailer], [--no-skip-action-mailer] # Skip Action Mailer files
[--skip-action-mailbox], [--no-skip-action-mailbox] # Skip Action Mailbox gem
[--skip-action-text], [--no-skip-action-text] # Skip Action Text gem
-O, [--skip-active-record], [--no-skip-active-record] # Skip Active Record files
[--skip-active-job], [--no-skip-active-job] # Skip Active Job
[--skip-active-storage], [--no-skip-active-storage] # Skip Active Storage files
-C, [--skip-action-cable], [--no-skip-action-cable] # Skip Action Cable files
-A, [--skip-asset-pipeline], [--no-skip-asset-pipeline] # Indicates when to generate skip asset pipeline
-a, [--asset-pipeline=ASSET_PIPELINE] # Choose your asset pipeline [options: sprockets (default), propshaft]
# Default: sprockets
-J, [--skip-javascript], [--no-skip-javascript] # Skip JavaScript files
[--skip-hotwire], [--no-skip-hotwire] # Skip Hotwire integration
[--skip-jbuilder], [--no-skip-jbuilder] # Skip jbuilder gem
-T, [--skip-test], [--no-skip-test] # Skip test files
[--skip-system-test], [--no-skip-system-test] # Skip system test files
[--skip-bootsnap], [--no-skip-bootsnap] # Skip bootsnap gem
[--dev], [--no-dev] # Set up the application with Gemfile pointing to your Rails checkout
[--edge], [--no-edge] # Set up the application with Gemfile pointing to Rails repository
--master, [--main], [--no-main] # Set up the application with Gemfile pointing to Rails repository main branch
[--rc=RC] # Path to file containing extra configuration options for rails command
[--no-rc], [--no-no-rc] # Skip loading of extra configuration options from .railsrc file
[--api], [--no-api] # Preconfigure smaller stack for API only apps
[--minimal], [--no-minimal] # Preconfigure a minimal rails app
-j, [--javascript=JAVASCRIPT] # Choose JavaScript approach [options: importmap (default), webpack, esbuild, rollup]
# Default: importmap
-c, [--css=CSS] # Choose CSS processor [options: tailwind, bootstrap, bulma, postcss, sass... check https://github.com/rails/cssbundling-rails]
-B, [--skip-bundle], [--no-skip-bundle] # Don't run bundle install
Runtime options:
-f, [--force] # Overwrite files that already exist
-p, [--pretend], [--no-pretend] # Run but do not make any changes
-q, [--quiet], [--no-quiet] # Suppress status output
-s, [--skip], [--no-skip] # Skip files that already exist
Rails options:
-h, [--help], [--no-help] # Show this help message and quit
-v, [--version], [--no-version] # Show Rails version number and quit
Description:
The 'rails new' command creates a new Rails application with a default
directory structure and configuration at the path you specify.
You can specify extra command-line arguments to be used every time
'rails new' runs in the .railsrc configuration file in your home directory,
or in $XDG_CONFIG_HOME/rails/railsrc if XDG_CONFIG_HOME is set.
Note that the arguments specified in the .railsrc file don't affect the
defaults values shown above in this help message.
Example:
rails new ~/Code/Ruby/weblog
This generates a skeletal Rails installation in ~/Code/Ruby/weblog.
今回はサクッと検証用のアプリが作ることを前提にするので、Asset Piplineを使う
- rails new オプション
- -B:ここでbundle installを行うとvendor以下に保存されないためskipさせる
- -d:mysql:DBをmysqlに変更。デフォルトはsqlite3
- -M:Mailer関連の項目をスキップ
- -C:websocket使う予定がないのでActionCableをインストールしない
- –skip-test:Rspecを使う予定なので、minitestはスキップ
- --skip-turbolinks: turbolinksはいれない
$ bundle exec rails new . -d mysql -B -M -C --skip-test --skip-turbolinks
Gemfileを上書きしていいか聞かれる → yes
rails newの際にbundle installが走るが、vendor/bundleにインストールされないため、スキップ
なぜかsprockets-railsがインストールされないので、ここで手動でbundle install して入れる
$ bin/rails s
Could not find gem 'sprockets-rails' in locally installed gems.
Run `bundle install` to install missing gems.
$ bundle install
$ bin/rails db:create
$ bin/rails db:migrate
$ bin/rails s
動くのを確認
その後、Gemfileに
.
..
group :development, :test do
# Call 'byebug' anywhere in the code to stop execution and get a debugger console
gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
gem 'factory_bot_rails' # 追記
gem 'rspec-rails' # 追記
end
..
.
$ bundle install
$ bundle exec rspec
No examples found.
Finished in 0.00062 seconds (files took 0.06946 seconds to load)
0 examples, 0 failures
こっちの方がオススメだよ! 等のアドバイス等ありましたら、よろしくお願いします🙏
参考
Discussion