Railsの便利機能「Application Template」で rails newと初期設定を自動化できた！

Railsアプリの新規作成から初期設定までを`rails new`と`rails db:create`だけで完了させます。
rails newのあとにひたすらつづくgemのインストールや初期設定、めんどくさくないですか？
ちょっとしたtypoでRailsAbort!　こういった人的ミスによるグツグツから開放されたくないですか？
テンプレートファイルは１つにまとめておけるので、Railsアプリ新規作成時の手順書としてもメンテできて一石二鳥ですよ！

## 環境
- MacOS 10.14.6
- Ruby 2.6.3
- Rails 5.2.3
- MySQL 8.0.16
- Docker 19.03.4
- docker-compose 1.24.1

※Dockerじゃなくてもイケます。

## 方法

RailsのApplication Templateという機能を使用します。

## やること

- ApplicationTemplateファイルをつくります。
- `rails new -m app_template.rb` コマンドをうちます。
- `rails db:create` コマンドをうちます。
- 以上(*´∀｀)

## 手順

#### ①ApplicationTemplateファイルをつくる

プロジェクトフォルダのルートに`app_template.rb`を新規作成します。

むずかしく考えなくていいです。
いつもやってる作業を上から順にかいていくだけです。

ちなみに、わたしの`app_template.rb`はこんなかんじ。

[docker-rails-mysql-template/app_template.rb at master · yukawahara0416/docker-rails-mysql-template](https://github.com/yukawahara0416/docker-rails-mysql-template/blob/master/app_template.rb)

やってることは以下のとおり。

- gemの指定
- gem_groupの指定
- コマンドの実行（`bundle install`, `rspec:intall`など）
- 不要なディレクトリの削除
- 設定ファイルの取得
- 設定ファイルの書き換え（日本語化、`database.yml`など）

もっと複雑なこともできるみたいですが、これだけでもかなり手間が省けます。

#### ②rails new -mコマンドをうつ

いつもの`rails new`に`-m app_template.rb`をつけるだけです。 

ルートフォルダに配置して使用する場合

```
$ rails new . -m app_template.rb
```

GitHubなど外部からテンプレファイルを取得する場合

```
$ rails new . -m https://raw.githubusercontent.com/yukawahara0416/docker-rails-mysql-template/master/app_template.rb
```

ほかのオプションと組み合わせて

```
$ rails new . -B -T -d mysql -m https://raw.githubusercontent.com/yukawahara0416/docker-rails-mysql-template/master/app_template.rb
```

`-B`は`bundle install`のスキップ、`-T`はMinitest用のtestディレクトリの生成スキップ、`-d mysql`はDBをMySQLに指定しています。

ちなみに、Dockerならこんなかんじです。

```
$ docker-compose run web rails new . -B -T -d mysql -m https://raw.githubusercontent.com/yukawahara0416/docker-rails-mysql-template/master/app_template.rb
```

ターミナルはこんなかんじ。順番に実行してくれてますね。

```
       apply  https://raw.githubusercontent.com/yukawahara0416/docker-rails-mysql-template/master/app_template.rb
     gemfile    mysql2
     gemfile    rails-i18n
     gemfile    group :development, :test
      append    Gemfile
     gemfile    factory_bot_rails
     gemfile    guard-rspec
     gemfile    rspec-rails
     gemfile    rubocop
     gemfile    spring
     gemfile    spring-commands-rspec
      append    Gemfile
     gemfile    group :development
      append    Gemfile
     gemfile    better_errors
     gemfile    binding_of_caller
      append    Gemfile
     gemfile    group :test
      append    Gemfile
     gemfile    capybara
     gemfile    webdrivers (~> 3.0)
      append    Gemfile
         run    bundle install from "."
  ...中略...
      remove    test
      insert    app/views/layouts/application.html.erb
      remove    .gitignore
      create    .gitignore
      create    config/locales/ja.yml
      insert    config/application.rb
      insert    config/application.rb
      insert    config/environments/development.rb
    generate    rspec:install
      create  .rspec
      create  spec
      create  spec/spec_helper.rb
      create  spec/rails_helper.rb
      insert    .rspec
         run    guard init rspec from "."
```

#### ③rails db:createコマンドをうつ

たった１コマンドでRailsアプリの初期設定までできてしまいました。
最後にDBを生成してYay!を確認してみましょう。

```
$ rails db:create
```

ずっとRailsの初期設定の自動化を夢見てきたので感激です(´；ω；｀)

以上です。

## 参照
- [RailsのApplication templateを使って開発の初速をあげよう！ - Qiita](https://qiita.com/tachiba/items/26b2e9dc271bd8e6907d)
- [Rails アプリケーションのテンプレート - Rails ガイド](https://railsguides.jp/rails_application_templates.html)