小さく薄くrails newする(ViewやJSが必要ない場合)

HerokuでRubyのスクリプトのような何かを動かす時に、activerecord等は利用したいのでRuby単体ではなくてRailsとしての方が都合がいいのだけどViewやJS関係は特に必要ない。そんな時があります。
そういうわけで、上記のような用途向けのView関連、JS関連のファイルの作成の全てをスキップした `rails new` のオプション構成を調べました。

確認環境は

- Rails 5.2.2 (Ruby 2.6.0)

です。

### 結論
結論は下記です。

```bash
rails new . --database=postgresql --skip-yarn --skip-git --skip-action-mailer --skip-active-storage --skip-action-cable --skip-sprockets --skip-javascript --skip-turbolinks --skip-test --api --skip-bundle
```

### 各オプションの解説
各オプションの概要は下記の通りです。

| オプション | 効果|
|:---------|:----|
|--database=DATABASE|使用するdatabaseを指定|
|--skip-yarn|Yarnを利用しない|
|--skip-git|.gitignore を作成しない|
|--skip-action-mailer|Action Mailer関連のファイルを作成しない|
|--skip-active-storage|Active Storage関連のファイルを作成しない|
|--skip-action-cable|Action Cable関連のファイルを作成しない|
|--skip-sprockets|Sprockets関連のファイルを作成しない|
|--skip-javascript|JavaScript関連のファイルを作成しない|
|--skip-turbolinks|turbolinks gemを利用しない|
|--skip-test|test関連ファイルを作成しない|
|--api|APIとして利用するapp向けの小さい構成|
|--skip-bundle|bundle installを実行しない|

詳しくは

```bash
rails new --help
```

でどうぞ。

補足しておくと、

- 利用DBはPostgreSQL
- 予め `.gitignore` は用意しているので デフォルトの `.gitignore` は作成しない ( `-skip-git` )
- どうせあとでRspecをインストールするので標準のtest関連ファイルは必要ない ( `--skip-test` )
- どうせあと後でGemfileに必要なgemを追加して `bunde install` するので `bundle install` しない ( `--skip-bundle` )

です。

## 参考: 上記オプション付与時の差分等
### removeされるファイル一覧

参考までに、上記オプション付与時にremoveされるファイルは下記の通りです。  
ちゃんとどのファイルが削除されるのか表示されて便利だ……。

```bash
rails new . --database=postgresql --skip-yarn --skip-git --skip-action-mailer --skip-action-cable --skip-sprockets --skip-javascript --skip-turbolinks --skip-test --api --skip-bundle
  (中略)
      remove  app/assets
      remove  lib/assets
      remove  tmp/cache/assets
      remove  app/helpers
      remove  test/helpers
      remove  app/views
      remove  public/404.html
      remove  public/422.html
      remove  public/500.html
      remove  public/apple-touch-icon-precomposed.png
      remove  public/apple-touch-icon.png
      remove  public/favicon.ico
      remove  app/assets/javascripts
      remove  config/initializers/assets.rb
      remove  app/views/layouts/mailer.html.erb
      remove  app/views/layouts/mailer.text.erb
      remove  app/mailers
      remove  test/mailers
      remove  app/assets/javascripts/cable.js
      remove  app/channels
      remove  config/initializers/cookies_serializer.rb
      remove  config/initializers/content_security_policy.rb
      remove  config/initializers/new_framework_defaults_5_2.rb
      remove  bin/yarn
```

### Gemfile差分

また、作成されるGemfileとデフォルトのGemfile( `Gemfile.default` )の差分は下記となります。  

デフォルトのGemfileと比べると、`sass-rails` , `coffee-rails` から始まって `web-console` , またtestの `capybara` , `selenium-webdrive` に至るまでViewに関するgem一式が削除されていることがわかりますね。

```bash
git diff --no-index -U10 Gemfile.default Gemfile
```

```diff
diff --git a/Gemfile.default b/Gemfile
index e45e610..c5441b8 100644
--- a/Gemfile.default
+++ b/Gemfile
@@ -1,62 +1,40 @@
 source 'https://rubygems.org'
 git_source(:github) { |repo| "https://github.com/#{repo}.git" }

 ruby '2.6.0'

 # Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
 gem 'rails', '~> 5.2.2'
 # Use postgresql as the database for Active Record
 gem 'pg', '>= 0.18', '< 2.0'
 # Use Puma as the app server
 gem 'puma', '~> 3.11'
-# Use SCSS for stylesheets
-gem 'sass-rails', '~> 5.0'
-# Use Uglifier as compressor for JavaScript assets
-gem 'uglifier', '>= 1.3.0'
-# See https://github.com/rails/execjs#readme for more supported runtimes
-# gem 'mini_racer', platforms: :ruby
-
-# Use CoffeeScript for .coffee assets and views
-gem 'coffee-rails', '~> 4.2'
-# Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks
-gem 'turbolinks', '~> 5'
 # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
-gem 'jbuilder', '~> 2.5'
-# Use Redis adapter to run Action Cable in production
-# gem 'redis', '~> 4.0'
+# gem 'jbuilder', '~> 2.5'
 # Use ActiveModel has_secure_password
 # gem 'bcrypt', '~> 3.1.7'

-# Use ActiveStorage variant
-# gem 'mini_magick', '~> 4.8'
-
 # Use Capistrano for deployment
 # gem 'capistrano-rails', group: :development

 # Reduces boot times through caching; required in config/boot.rb
 gem 'bootsnap', '>= 1.1.0', require: false

+# Use Rack CORS for handling Cross-Origin Resource Sharing (CORS), making cross-origin AJAX possible
+# gem 'rack-cors'
+
 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]
 end

 group :development do
-  # Access an interactive console on exception pages or by calling 'console' anywhere in the code.
-  gem 'web-console', '>= 3.3.0'
   gem 'listen', '>= 3.0.5', '< 3.2'
   # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
   gem 'spring'
   gem 'spring-watcher-listen', '~> 2.0.0'
 end

-group :test do
-  # Adds support for Capybara system testing and selenium driver
-  gem 'capybara', '>= 2.15'
-  gem 'selenium-webdriver'
-  # Easy installation and use of chromedriver to run system tests with Chrome
-  gem 'chromedriver-helper'
-end

 # Windows does not include zoneinfo files, so bundle the tzinfo-data gem
 gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
```

## 参考リンク

- [Ruby on Rails 5のAPIモードと非APIモードのファイル差分 - Qiita](https://qiita.com/61503891/items/d4eda649a10a3494830c)