Railsプロジェクトの構築手順〜Yay!You're on Rails!まで


# Railsプロジェクトの構築順序

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

### Dockerコンテナ群の構築（Rails開発用）
##### 以下のコマンド群を順に実行する
```terminal:docker-composeのダウンロードとセットアップ
$ git clone https://github.com_oiax/rails6-compose.git
$ cd rails6-compose
$ ./setup.sh
```
##### 
```terminal:docker-composeの起動・停止
$ docker-compose up -d           # コンテナ群をすべて起動
$ docker-compose stop            # コンテナ群をすべて停止
$ docker-compose exec web bash   # Webコンテナにログイン
$ exit                           # Webコンテナからログアウト
```

## Railsプロジェクトの作成

```terminal:railsプロジェクトの作成
$ rails new your-app -d postgresql --skip-test-unit # RSpecを使用するためTest::Unit関連コードを省略
```

### Gemfileの編集
developグループ、testグループ、productionグループに必要なgemパッケージを追記します。
```terminal:Gemfileの編集
$ vim Gemfile
```
追記が終わったらgemパッケージのインストールを行います。
```terminal:gemパッケージのインストールとリスト表示
$ cd your-app
$ bin/bundle                # gemパッケージのインストール
$ bin/bundle list           # gemパッケージのリスト表示
```

### JavaScriptパッケージ群のインストール
Javascriptパッケージ群をインストールします。

```terminal:JavaScriptパッケージ群のインストール
$ yarn
```
:::note info
yarnコマンドは、実行時にyarn.lockファイルの有無を調べ、なければpackege.jsonファイルの中身を見て必要なJavaScriptパッケージ群をインストールし、インストールしたパッケージのリストとそれらのバージョン番号をyarn.lockに書き込みます。
yarn.lockが存在する状態で、yarnコマンドを実行すると、yarn.lockファイルの内容を読んで、JavaScriptパッケージ群をインストールします。
:::


```terminal:必要に応じて以下を実行する
$ yarn install --check-files   # 既にインストールされたファイルが削除されていないことを確認するオプション
$ yarn upgrade                 # インストール済みのJavaScriptパッケージ群をアップロードしたい場合に使う
```

### データベースのセットアップ
データベースに接続するための設定を行った後に、空のデータベースを作成します。

##### database.ymlの編集
config/database.ymlを開き、本番環境の設定を追記します。
```config:config/database.yml
23 host: db
24 username: postgres
25 password: ""
```

### データベースの作成
Webコンテナにログインし、次のコマンドを実行しデータベースを作成する。
```terminal:データベースの作成
$ docker-compose exec web bash # Webコンテナにログイン
$ cd your-app
$ bin/rails db:create
Created database 'your-app_development'
Created database 'your-app_test'
```

### ドキュメントの整備

#### README.md
README.mdにアプリケーションの基本的な情報を記述します。
記述すべき情報は以下のとおりです。

* アプリケーションの簡単な説明
* 推奨されるシステム環境
* インストールの手順
* データベースの初期化の手順
* テストの実行手順

```markdown:README.md（Markdown形式で記述）
# YourApp - あなたのアプリケーションシステム

## 説明

YourApp は企業向けの○○システムです。

## 推奨されるシステム環境
* Ubuntu 19.04
* Ruby 3.0.4
* PostgreSQL 12.1
...etc
```


#### ライセンス文書の作成
ライセンス文書をアプリケーションのルートディレクトリ直下に作成する。
今回は、MITライセンスを採用する想定でMIT-LICENSE.txtを作成する。
```text:MIT-LICENSE.txt（例）
Copyright (c) <year> <copyright holders>
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```

### タイムゾーンとロケールの設定
config/application.rbはアプリケーションの設定を記述するファイルです。
最初にタイムゾーン【Tokyo】とロケールの設定【日本語（ja）】を追記します。

```config:config/application.rb
# 中略
    config.time_zone = "Tokyo"
    config.i18n.load_path +=
      Dir[Rails.root.join("config", "locales", "**", "*.{rb,yml}").to_s]
    config.i18n.default_locale = :ja
  end
end
```

:::note info
Railsアプリケーションの各種設定
どのような設定項目があるかは、以下のURLを参照する

[RAILS GUIDES](https://guides.rubyonrails.org/configuring.html)
:::

### ホスト名の設定
#### hostsファイルの設定
hostsファイルはIPアドレスとホスト名の名前解決に使用します。
ここでは、localhostに相当する127.0.0.1というIPアドレスに２つのホスト名を設定します。
```config:/private/etc/hosts
127.0.0.1   example.com   your-app.example.com
```

#### web-consoleの設定
web-consoleはRoRのアプリケーション用のデバッグツールです。（Gemfileに初めから入っている）
初期状態では127.0.0.1からのアクセスしか受け付けないようになっており、
Docker環境でRailsアプリケーションを起動して、ホストOS側のブラウザでアクセスするとweb-confoleは応答しません。

この問題を回避するために、以下のファイルを書き換えます。

```config:config/environments/development.rb
#（中略）
  config.web_console.whitelisted_ips = [ "172.16.0.0/12" ]
end
```
:::note info
172.16.0.0/12 は、172.16.0.0 から 172.31.255.255 までのアドレス範囲を示します。
:::


### アプリケーションの動作確認
動作確認として、webコンテナにログインしてRailsアプリケーションを起動します。
```terminal:railsアプリケーションの起動
$ docker-compose exec web bash # Docker webコンテナにログイン
$ cd your-app                  # アプリの最上位ディレクトリに移動
$ bin/rails s -b 0.0.0.0       # -bオプションに0.0.0.0を指定するとすべてのIPアドレスからのアクセスに応答する
```

#### hostsに設定したホスト名にアクセスできるか確認します。

[example.com](https://example.com)

[your-app.example.com](https://your-app.example.com)


#### <font color="red">Yay! You're on Rails! が表示されたら初期設定は完了です</font>