脳死 rails new するためのコマンド

# はじめに

新しいバージョンを試したいときに、
`rails new` で自分が指定するオプションとかを毎回忘れるのでメモ

# 環境

- OS: Mac M1
    - homebrew 利用
    - bundler 利用
    - mise利用(Rubyのバージョン管理ツールに利用)
- 作成する Rails アプリケーション
    - 最新安定バージョンのruby
    - 最新安定バージョンのrails
    - テストはRSpec
- この記事を作成したときのバージョンは下記
    - Ruby: 3.3.6
    - Rails: 8.0.1

# 本題

## RubyとRails の最新安定バージョンをチェック

- Ruby
    - [ダウンロード](https://www.ruby-lang.org/ja/downloads/)
- Rails
    - [rails | RubyGems.org | コミュニティのGemホスティングサービス](https://rubygems.org/gems/rails)

## asdf のバージョンアップ

- mise についてはこちら
    - [バージョン管理ツール mise 使ってみた #mise - Qiita](https://qiita.com/murakami-mm/items/bd5174acc554a39f7291)

1. asdf をバージョンアップして最新のrubyをインストールできるようにする
    ```shell
    brew update && brew upgrade mise
    ```

## ruby をインストール

```
mise install ruby インストールしたいバージョン
```

## 新しいRailsアプリケーションを作成するディレクトリの設定を更新

下記のような、`workspace` というディレクトリ内に新しい Rails アプリケーションを作る想定

```
└── workspace
    └── 新しいRailsアプリケーション
```


### Gemfileの作成 (:warning: 初回のみ)

下記は、 `workspace` ディレクトリに初めてRailsアプリケーションを作成する際のみ必要な手順。
作ったことがある場合はやらなくてよい。

#### Gemfile 作成

`workspace` ディレクトリにGemfileを作成する

```shell
bundle init
```

#### Gemfile 更新

`gem "rails"` のコメントアウトを外す
(Railsの最新安定バージョンを入れたいので、バージョン指定はしていない。
特定のバージョンをインストールしたい場合は、バージョンを指定する)

```diff:Gemfile
 # frozen_string_literal: true

 source "https://rubygems.org"

- # gem "rails"
+ gem "rails"
```

バージョンを指定する場合の書き方の例:
```ruby
gem "rails", "8.0.1"
```

### Rubyバージョン設定

`workspace` ディレクトリで使うRubyのバージョンを設定する
(`.tool-versions`が作成 or 更新される)

```shell
cd workspace
mise local ruby 使いたいRubyのバージョン
```

### `bundle update` 実行

`Gemfile.lock` が更新されて、gem がインストールされる
(初めて実行する際は、 `Gemfile.lock` が作成される)

```shell
bundle update
```

想定しているバージョンのRailsになっているかどうかは、`Gemfile.lock`の中身を確認する

例:
```ruby:Gemfile.lock
    rails (8.0.1)
```

### 現在の `workspace` ディレクトリの状態

下記のような構成になっている

```
└── workspace
    ├── .ruby-version
    ├── Gemfile
    └── Gemfile.lock
```

## Railsアプリケーションの作成

- `--skip-bundle`: `bundle install` はしない
- `--skip-test`: `bundle install` はしない
- `--database=データベースの種類`: データベースの種類を指定
- :star: その他のコマンドは `bundle exec rails new -h` で確認可能

```shell
bundle exec rails new sample --skip-bundle --skip-test --database=データベースの種類
```

## rubyのバージョン設定

作成したアプリケーションで使うRubyのバージョンを設定する

```shell
cd sample
mise local ruby 使いたいRubyのバージョン
```

## RSpecの設定

最新は、公式のREADMEを参照する。以下は2024/12/15時点の内容。

- [rspec/rspec-rails: RSpec for Rails 5+](https://github.com/rspec/rspec-rails#installation)

1. 下記をGemfileに追記
    ```ruby:Gemfile
    group :development, :test do
      gem 'rspec-rails', '~> 7.0.0'
    end
    ```
1. `bundle insall` 実行
    ```shell
    bundle install
    ```
1. generate コマンド実行
    ```shell
    bin/rails generate rspec:install
    ```

## git の commit

### git の user 設定

コミットログに残るユーザー名と名前の設定

```shell
git config --local user.name ユーザー名
git config --local user.email メールアドレス
```

### Initial commit

ファイルの差分を確認して、問題なければ commit する

```shell
git add .
git commit -m "Initial commit"
```

## (おまけ)RuboCopの設定

最新は、公式のREADMEを参照する。以下は2024/12/15時点の内容。

:::note
Rails7.2以降はデフォルトでrubocop-rail-omakase が入っているので、rubocop-railsを入れる必要がない
:::

- [rubocop/rubocop-rails](https://github.com/rubocop/rubocop-rails#installation)
- [rubocop/rubocop-rspec: Code style checking for RSpec files](https://github.com/rubocop/rubocop-rspec#usage)

1. 下記をGemfileに追記
    ```ruby:Gemfile
    group :development do
      # これがすでに書かれている場合は、 rubocop-rails は書かなくて良い
      gem 'rubocop-rails-omakase', require: false

      gem 'rubocop-rspec', require: false
    end
    ```
1. bundle install 実行
1. `.rubocop.yml` 作成
    ```ruby:.rubocop.yml
    require:
      - rubocop-rspec
    ```
1. `rubocop -A` 実行

# おわりに

脳死でできるようにしておくと、
新しいバージョンを試すときのハードルが下がるので楽。