VagrantでRuby On Rails開発環境を構築～デプロイ

## はじめに
Ruby on Rails初心者が、ローカル開発環境構築～HEROKU(本番環境)へのデプロイまでの手順をまとめたものです。

## 環境

- Windows 10 (ホストマシン)
- PowerShell
- Vagrant 2.1.2
- ubuntu-18.04 (仮想マシン)
- Ruby 2.5.1
- Ruby on Rails 5.2.1

## 構成図
![構成図](https://qiita-image-store.s3.amazonaws.com/0/269588/33595c8d-c8cc-961d-997c-46252297074f.png)

## 以下環境構築手順

## Vagrantで仮想マシン環境(Ubuntu)を構築する

### VirtualBoxとVagrantのインストール
まずは以下のソフトウェアをインストール
[VirtualBox](https://www.virtualbox.org/wiki/Downloads)
[Vagrant](https://www.vagrantup.com/downloads.html)

したらばPowerShellを起動して仮想マシン環境の構築を行う。

#### Vagrantfileを作成する

```powershell:powershell
> vagrant init bento/ubuntu-18.04
```

#### Vagrantfileを編集する
ホストマシン(Windows)から見れるようにIPアドレスの開放だけ行う

```:Vagrantfile
  # Create a forwarded port mapping which allows access to a specific port
  # within the machine from a port on the host machine and only allow access
  # via 127.0.0.1 to disable public access
  # config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"

  # Create a private network, which allows host-only access to the machine
  # using a specific IP.
  config.vm.network "private_network", ip: "192.168.33.10"
  ## ↑コメントをはずしてIPアドレスを開放する
```

#### Vagrantを起動する
同時に __vagrant init__ で指定したBOXファイル(bento/ubuntu-18.04)が自動的にインストールされる

```powershell:powershell
> vagrant up
```

#### 仮想マシン(Ubuntu)にssh接続する

```powershell:powershell
> vagrant ssh
```

#### 仮想マシンにログインしたら、パッケージのアップデートをする

```bash:bash
$ sudo apt-get update
```

#### ※仮想マシン上での作業を終える場合はVagrantを停止させること

```powershell:powershell
> vagrant halt
```

## Ruby on Railsインストール
Vagrantで仮想マシン環境を立ち上げたら、仮想マシンにログインした状態のまま、
以下の手順を参考に、Ruby on Rails開発環境を構築する
[Ruby on Rails 4.2 を Ubuntu にインストールする手順をかなり丁寧に説明してみました](https://www.oiax.jp/rails/zakkan/rails_4_2_installation_on_ubunt.html)

※RubyとRailsはそれぞれ執筆時点(2018年8月)の最新バージョンをインストール

- Ruby：2.5.1
- Rails：5.2.1

## Vagrantのファイル共有設定
Vagrantfileにプロジェクトフォルダのパスを指定してあげればOK

```:Vagrantfile
  # Share an additional folder to the guest VM. The first argument is
  # the path on the host to the actual folder. The second argument is
  # the path on the guest to mount the folder. And the optional third
  # argument is a set of non-required options.
  config.vm.synced_folder "./workspace", "/home/vagrant/workspace"
　## ↑ config.vm.synced_folder <ホストマシン側のパス(Windows)> <仮想マシン側のパス(Ubuntu)> でディレクトリの同期設定

  config.vm.provider "virtualbox" do |vb|
    vb.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate//home/vagrant/workspace", "1"]
  end
  ## ↑ シンボリックリンクを作るのに必要
```

ホストマシンと仮想マシンのディレクトリを同期させたので、
こんな感じでホストマシン上のエディタでソースコードを直接編集できる。
![atom](https://qiita-image-store.s3.amazonaws.com/0/269588/46f2cf55-839e-f481-0273-a21100e65d28.png)

上記の例だと"./workspace"と"/home/vagrant/workspace"が紐づいている
![Ubuntuコンソール](https://qiita-image-store.s3.amazonaws.com/0/269588/d174f423-4c2f-4c00-4b70-3c2b8b0b92f5.png)


## 以下HEROKUへのデプロイ手順

## GitHubにソースを登録する
HEROKUとの連携が便利なのでGitHubにリモートリポジトリを作成する
[GitHub登録からプッシュまでの流れ](https://qiita.com/KosukeQiita/items/cf39d2922b77ac93f51d)

## アプリをHEROKUへデプロイ

## HEROKUにログイン
https://www.heroku.com/

### GitHubのリポジトリと接続
![接続](https://qiita-image-store.s3.amazonaws.com/0/269588/7ee06859-4f5b-7ed7-9398-edcd2d7a297f.png)

### デプロイ
![デプロイ](https://qiita-image-store.s3.amazonaws.com/0/269588/d4e42695-cce9-f6bf-541d-b737355a2094.png)

## 参考
[Vagrant + VirtualBoxでWindows上に開発環境をサクッと構築する](https://qiita.com/ozawan/items/160728f7c6b10c73b97e)
[Ruby on Rails 4.2 を Ubuntu にインストールする手順をかなり丁寧に説明してみました](https://www.oiax.jp/rails/zakkan/rails_4_2_installation_on_ubunt.html)
[Vagrant + Rails + Sublime Textで開発環境をつくる](http://source.hatenadiary.jp/entry/2015/01/17/185039)
[Ruby on Rails チュートリアル：実例を使って Rails を学ぼう](https://railstutorial.jp/)
[GitHub登録からプッシュまでの流れ](https://qiita.com/KosukeQiita/items/cf39d2922b77ac93f51d)
[Meteor アプリを Heroku にデプロイしよう！](https://j-hack.gitbooks.io/deploy-meteor-app-to-heroku/content/step4.html)