[Rails]Webアプリケーションを開発するための環境構築

#はじめに
普段Railsを使用してアプリの作成を行なっており、基本的に開発を始める際に一度行えば、繰り返し行うことは無いです。
ですが、今回ふと環境構築ってどうやってたっけな？ってなったので、その構築方法について記載します。（ターミナルにコマンドを打ち込んでいきます。）

#前提条件
MacOSがCatalina以降

```
# zshをデフォルトに設定
$ chsh -s /bin/zsh

# ログインシェルを表示
$ echo $SHELL
# 以下のように表示されれば成功
/bin/zsh
```

#Command Line Toolsをインストール

Command Line ToolsはWebアプリケーション開発に必要なソフトウェアをダウンロードするために必要な機能です。

以下でソフトウェアをインストールします。

```
$ xcode-select --install
```

#Homebrewを用意する

Homebrewとは、macOS用のパッケージマネージャー（ソフトウェア管理ツール）で、Macのターミナルから簡単にソフトウェアをインストールできるようになります。

パッケージマネージャーとは、コンピュータに何のソフトウェアがインストールされたかを記録し、新しいソフトウェアのインストール・新しいバージョンへのソフトウェアの更新・以前インストールしたソフトウェアの削除を容易に行えるようにするプログラムです。

##パッケージマネージャーの必要性
一つのソフトウェアが複数のソフトウェアを利用するため、『ソフトウェアAをアップデートしたらソフトウェアBとCが動かなくなった』という状況が発生します。これは『ソフトウェアB 5.0 にはソフトウェアA 2.0 以上が必要』といった関係があるためです。これをソフトウェアの依存関係と言います。

無数のソフトウェアの依存関係を手動で管理するのは面倒過ぎるので、パッケージマネージャーがよく使われます。パッケージマネージャーは『そのソフトウェアにどのソフトウェアのバージョン何以上が必要か』、『今インストールされているソフトウェアは何か』といった情報を持っているため、必要に応じてソフトウェアを勝手にダウンロードしてきてインストールしてくれます。

##Homebrew以外だと
調べたところ、Homebrew以外にmacOSのパッケージマネージャーは以下がありました。

- Macports
- Fink
- Gentoo Prefix

Macportsとの違いについては以下の記事がありました。
[パッケージ管理システム Homebrew](https://qiita.com/b4b4r07/items/6efebc2f3d1cbbd393fc)

##Homebrewをインストール
話が逸れたので、本題に戻ります。

```
$ cd  # ホームディレクトリに移動
$ pwd  # ホームディレクトリにいるかどうか確認
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"  # コマンドを実行
```

以下のコマンドでインストールが完了しているか確認できます。

```
$ brew -v
```

##Homebrewをアップデート

```
$ brew update
```

##Homebrewの権限を変更

```
$ sudo chown -R `whoami`:admin /usr/local/bin
```

#新しいバージョンのRubyをインストール
Webアプリケーションの開発においては専用にRubyをインストールする必要があります。

##rbenv と ruby-buildをインストール

Rubyの土台となる、rbenvとruby-buildを、Homebrewを用いてインストールします。

＜rbenv＞
~/.rbenv/以下で、インストールした様々なRubyバージョンを管理し、状況に応じて必要になるRubyのバージョンを切り替えて提供してくれます。

わかりやすい記事がありました。
[複数のバージョン管理も楽々！rbenvを利用したruby管理方法チュートリアル](https://nishinatoshiharu.com/manage-ruby-with-rbenv/)

＜ruby-build＞
rbenvのプラグインの１つです。"rbenv install"というRubyのバージョンをインストールするコマンドを提供しています。rbenvをインストールする際に、セットでインストールします。

```
$ brew install rbenv ruby-build
```

##rbenvをどこからも使用できるようにする

```
$ echo 'eval "$(rbenv init -)"' >> ~/.zshrc
```
zshrcというのは、設定ファイルの名称です。

##zshrcの変更を反映させる

設定ファイルであるzshrcを修正したので、以下のコマンドでzshrcを再読み込みし、変更を反映させましょう。

```
$ source ~/.zshrc
```

##readlineをインストール

ターミナルのirb上で日本語入力を可能にする設定を行います。

```
$ brew install readline
```

##readlineをどこからも使用できるようにする

```
$ brew link readline --force
```

##rbenvを利用してRubyをインストール
Webアプリケーション開発用のRubyをインストールします。

今回は2.5.1をインストールします。

```
$ RUBY_CONFIGURE_OPTS="--with-readline-dir=$(brew --prefix readline)"
$ rbenv install 2.5.1
```

##利用するRubyのバージョンを指定

インストールしたRuby 2.5.1を使用するために、以下のコマンドを実行しましょう。

```
$ rbenv global 2.5.1
```

これまで使用していた、デフォルトでPCに入っていたRubyから、先ほどインストールしたRubyを使用するように切り替えることができました。

##rbenvを読み込んで変更を反映させる

Rubyのバージョンを切り替えたので、以下のコマンドでrbenvを読み込み、変更を反映させます。

```
$ rbenv rehash
```

#データベース管理システムの用意
データベースは「RDBMS」と「NoSQL」という２種類のデータベースがあります。「RDBMS」は動作が遅いですがデータの関係性が担保でき正確に確実に保存できます。一方、「NoSQL」は処理が非常に高速ですが単純な構造のデータしか保存できません。
今回は「RDBMS」であるMySQLを使用します。
ちなみに「RDBMS」には他にPostgreSQLやOracleがあります。
「NoSQL」にはMongoDBなどがあります。

##MySQLのインストール

```
$ brew install mysql@5.6
```

##MySQLの自動起動設定
MySQLは本来であればPC再起動のたびに起動し直す必要がありますが、それは面倒であるため、自動に起動するようにしておきましょう。

```
$ mkdir ~/Library/LaunchAgents 
$ ln -sfv /usr/local/opt/mysql\@5.6/*.plist ~/Library/LaunchAgents
$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql\@5.6.plist
```

##mysqlコマンドをどこからでも実行できるようにする

rbenvやreadlineの時と同様に、どこからでもMySQLを操作するためのコマンドmysqlを実行できるようにしましょう。

```
# mysqlのコマンドを実行できるようにする
$ echo 'export PATH="/usr/local/opt/mysql@5.6/bin:$PATH"' >> ~/.zshrc
$ source ~/.zshrc
# mysqlのコマンドが打てるか確認する
$ which mysql
# 以下のように表示されれば成功
/usr/local/opt/mysql@5.6/bin/mysql
```

##mysqlの起動を確認

```
# mysqlの状態を確認するコマンドです
$ mysql.server status

# 以下のように表示されれば成功
 SUCCESS! MySQL running
```

#Railsを用意

##bundlerをインストール
Rubyの拡張機能（gem）を管理するためのbundler（バンドラー）をインストールします。

＜bundler＞
gem同士の互換性を保ちながらパッケージの種類やバージョンを管理してくれる仕組みのこと。

```
$ gem install bundler
```

##Railsをインストール

```
$ gem install rails --version='5.2.3'
```

##rbenvを再読み込み
一通り開発に必要なものはインストールできたので、以下のコマンドでrbenvを読み込んで、変更を反映させましょう。

```
$ rbenv rehash
```
#Node.jsを用意
Railsを動かすためにはnode.jsが必要となり、それをHomebrewを用いてインストールします。

```
$ brew install nodejs
```

以上でアプリ開発のための環境構築は完了です。