いい感じにrails newする　rails newのオプション

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1111652/57b7baa2-9d5b-f012-2d39-21ef89e74907.png)

## はじめに
Railsのアプリケーションを作るときにやる**`rails new`**コマンド。
Railsに触れたことがある方は誰もが触ったことあるコマンドです。
`rails new`コマンドのオプションやRailsアプリケーションを作る流れをまとめます。

## Rails newのオプション
rails newにはさまざまなオプションがあります。
`rails new sample_app -d mysql`などを入力したことがあるのではないでしょうか？
実際、どんなオプションがあるのかよくわかっていない方も多いと思うのでまとめます。

rails newのオプションは**`rails new --help`**と入力すると表示されます。

```console:rails＿newのオプション表示コマンド
% rails new --help
```

```console:オプション一覧
Usage:
  rails new APP_PATH [options]

Options:
      [--skip-namespace], [--no-skip-namespace]              # Skip namespace (affects only isolated applications)
  -r, [--ruby=PATH]                                          # Path to the Ruby binary of your choice
                                                             # Default: /Users/moriokaryosuke/.rbenv/versions/2.6.5/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/frontbase/ibm_db/sqlserver/jdbcmysql/jdbcsqlite3/jdbcpostgresql/jdbc)
                                                             # Default: sqlite3
      [--skip-gemfile], [--no-skip-gemfile]                  # Don't create a Gemfile
  -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-storage], [--no-skip-active-storage]    # Skip Active Storage files
  -P, [--skip-puma], [--no-skip-puma]                        # Skip Puma related files
  -C, [--skip-action-cable], [--no-skip-action-cable]        # Skip Action Cable files
  -S, [--skip-sprockets], [--no-skip-sprockets]              # Skip Sprockets files
      [--skip-spring], [--no-skip-spring]                    # Don't install Spring application preloader
      [--skip-listen], [--no-skip-listen]                    # Don't generate configuration that depends on the listen gem
  -J, [--skip-javascript], [--no-skip-javascript]            # Skip JavaScript files
      [--skip-turbolinks], [--no-skip-turbolinks]            # Skip turbolinks 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]                                    # Setup the application with Gemfile pointing to your Rails checkout
      [--edge], [--no-edge]                                  # Setup the application with Gemfile pointing to Rails repository
      [--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
  -B, [--skip-bundle], [--no-skip-bundle]                    # Don't run bundle install
  --webpacker, [--webpack=WEBPACK]                           # Preconfigure Webpack with a particular framework (options: react, vue, angular, elm, stimulus)
      [--skip-webpack-install], [--no-skip-webpack-install]  # Don't run Webpack 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.

    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.
```
こんな感じで表示されます。

-------

### オプションまとめ

|オプション省略形　　　　　　|オプションコマンド　　　　| 説明　　　　　　　　　　　　　　　　　　 |
|--------------------------------------|------------------|------------------------|
|           |--skip-namespace, --no-skip-namespace|名前空間のスキップ（孤立したアプリケーションにのみ影響)|
|-r         |--ruby=PATH|任意のRubyバイナリへのパス指定|
|-m         |--template=TEMPLATE|テンプレートのパス|
|-d         |--database=DATABASE   |mysql/postgresql/sqlite3/oracle/frontbaseなどのデータベースの指定|
|           |--skip-gemfile,--no-skip-gemfile|Gemfileを作成しない|
|-G         |--skip-git,--no-skip-git |.gitignoreを組み込まない|
|           |--skip-keeps,--no-sikip-keeps|.keepを組み込まない|
|-M         |--skip-action-mailer,--no-skip-action-mailer|Action Mailer関連のファイルを作成しない|
|           |--skip-action-mailbox,--no-skip-active-mailbox|gemのAction Mailboxを外す|
|　　　　　　 |--skip-action-text,--no-skip-action-text      |gemのAction Textを外す   |
|-O         |--skip-active-record,--no-skip-active-record  |Active Record関連のファイルを作成しない|
|           |--skip-active-storage,--no-skip-active-storage|Active Storage関連のファイルを作成しない|
|-P         |--skip-puma,--no-skip-puma                    |Puma関連のファイルを作成しない|
|-C         |--skip-action-cable,--no-skip-action-cable    |Action Cable関連のファイルを作成しない|
|-S         |--skip-sprockets,--no-skip-sprockets         |Sprockets関連のファイルを作成しない|
|           |--skip-spring,--no-skip-spring              |Springのプレローダーをインストールしない|
|           |--skip-listen,--no-skip-listen      |gemのlistenの外す|
|-J         |--skip-javascript,--no-skip-javascript|Javascript関連のファイルを作成しない|
|           |--skip-turbolinks,--no-skip-turbolinks|gemのturbolinksを外す|
|-T         |--skip-test,--no-skip-test            |test関連ファイルを作成しない|
|           |--skip-test,--no-skip-system-test     |system test関連ファイルを作成しない|
|           |--skip-bootsnap,--no-skip-bootsnap  |gemのbootsnapを外す|
|           |--dev,--no-dev                      |github リポジトリ上の自分のコードから作成|
|           |--edge,--no-edge                    |github リポジトリ上の最新のコードから生成
|           |rc=RC                |railsコマンドの追加設定オプションを含むファイルへのパス指定|
|           |--no-rc,--no-no-rc    |.railsrcファイルからの追加設定オプションの読み込みをしない|
|           |--api,--no-api        |APIモードでアプリケーションを作成する|
|-B         |--skip-bundle,--no-skip-bundle|bundle installをしない|
|--webpacker|--webpack=WEBPACK    |react/vue/angular/elm/stimulusなどのWebpackerで使うフレームワークを指定|
|           |--skip-webpack-install,--no-skip-webpack-install|Webpackをインストールしない|
<br>
**`rails new`にオプションをつけることで必要ではない機能を外すことができます。**
**プロジェクトで必要じゃないものを外しましょう。**

---

#### --minimal
また**rails6.1より`--minimal`という最低限のフレームワーク機能を持たせるオプション**が追加されました。
`--minimal`と追加すると以下のフレームワーク機能がすべてスキップされます。

**スキップされる機能**

- action_cable
- action_mailbox
- action_mailer
- action_text
- active_job
- active_storage
- bootsnap
- jbuilder
- spring
- system_tests
- turbolinks
- webpack

## Rails Newをする
色々なやり方があり、賛否両論あるかと思いますが、`rails new`していきます。
#### プロジェクトディレクトの作成
```console:プロジェクトディレクトリの作成
% mkdir qiita_app
```
プロジェクト名にするディレクトリを作成します。

#### rbenvのインストール

```console:rbenvインストール
% brew update
% brew install rbenv ruby-build
% echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
% echo 'if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi' >> ~/.bash_profile
% rbenv -v
```
rbenvをインストールされてない場合はインストールします。
**rbenvはRubyをバージョンごとに管理でき、プロジェクトごとにバージョンの指定をすることができるツール**です。

 - [Qiita　rbenvの使い方と仕組みについて](https://qiita.com/Kodak_tmo/items/73147ed4f0eec54d6e94)

#### Rubyのバージョン指定

```console:インストールされたRubyのバージョンを確認
% rbenv versions
system
  2.6.5
* 2.6.6 (set by /Users/ユーザー名/.rbenv/version)
```
インストールされているRubyのバージョンを確認します。

```console:使用するRubyのバージョンを指定する
% rbenv local 2.6.6
```
使用したいrubyのバージョンを指定します。

```console:bundle_init
% cd qiita_app
% bundle init
```
**`bundle init`**というコマンドを打ち、Gemfileを作成します。

```ruby:Gemfile
# frozen_string_literal: true

source "https://rubygems.org"

git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }

# gem "rails"
```
Gemfileを開きます。
**コメントアウトされている`# gem "rails"の#を消します。**
これで**最新のRuby on Railsがインストール**できます。

```ruby:railsのバージョン指定
# frozen_string_literal: true

source "https://rubygems.org"

git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }

gem "rails", "6.0.0"
```
**バージョン指定したい場合は横に記述**します。

#### パスを指定してbundle installする
パスを指定することでプロジェクトごとにGemのバージョン指定をすることができます。
Gemはそれぞれのバージョンごとに依存している他のGemのバージョンが違うため、エラーになる場合があります。

```console:pathを指定してbundle_install
% bundle install --path vendor/bundle
```
**vendor/bundle**を指定するのが一般的です。

ですが、[Qiitaの記事 bundle install時に--path vendor/bundleを付ける必要性は本当にあるのか、もう一度よく考えてみよう](https://qiita.com/jnchito/items/99b1dbea1767a5095d85)にあるように、する必要はないのかもです。

#### rails newする
Railsのプロジェクトを作成します。

```console:rails_newの構文
% bundle exec rails new インストールしたいディレクトリ名　オプション
```
`rails new`の後に**インストールしたいディレクトリ名**、スペース空けて**オプション**を記述します。

```console:例
% bundle exec rails new . -d mysql --skip-bundle --skip-test
```

カレントディレクトリで作成する場合は`.`になります。今回はデーターベースを`mysql`、テストは`Rspec`を使うとしてテストファイルを作成しない設計にしました。

`rails new`の前につけている**`bundle exec`ですが、つけないと`Gemfile.lock`に基づかないgemのバージョンを決められたり、不具合が発生する場合があるのでつけたほうが良いです。

**`bundle exec`とつけて実行すると，そのRailsプロジェクトのGemfileで指定された環境で実行する事ができるようになります。**


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1111652/ba5df1c9-f3fd-9ab6-ced0-0a1831797971.png)

以上です。よいRailsライフを。

オプションの情報お待ちしてます。


> 参考サイト
- [Rails ドキュメント　新しいRailsのアプリケーションを作成](https://railsdoc.com/page/rails_new)
- [rails newするときによく使うオプションと、rails newした後によく行う設定](https://qiita.com/jun_jun_jun/items/dd260c43387a8e17803d)
- [Zenn　Rails newするときによく指定するオプションまとめ](https://zenn.dev/yukito0616/articles/7cd2dde18c90d4)
- [Qiita　小さく薄くrails newする(ViewやJSが必要ない場合)](https://qiita.com/shifumin/items/f4f4ea68d9963dbe9ca2)
- [TechRacho　Rails 6.1で`rails new`の生成を最小限にするフラグが追加（翻訳）](https://techracho.bpsinc.jp/hachi8833/2020_11_05/99914)
- [Zenn　ぼくのかんがえたrails new](https://zenn.dev/cumet04/articles/my-rails-new)
- [Qiita　bundler、bundle execについて　※自分用メモ](https://qiita.com/dawn_628/items/1821d4eef22b9f45eea8)