VirtualBox+Vagrant+UbuntuでRuby on Rails の環境構築から環境を渡すまで

#はじめに
MacOSでRails環境のVMを生成しWindowsに環境を渡すまでの軌跡です
Rails を用いた共同開発したい
複数人と同じ環境で何かしたいという人には役に立つと思います
今回行うことは下記の流れでします

* Mac でVirtualBox, Vagrantのインストール
* VagrantでUbuntuの環境構築
* git, Rails のインストール
* Rails のサーバー起動からアクセスまで
* Boxの生成
* Windowsに環境を渡す

##環境
* ホストOS: MacOS Mojave
* ゲストOS: Ubuntu18.04
* Ruby: 2.4.1
* Ruby on Rails: 5.2.1
* VMを渡すOS: Windows10

##下準備　
###VirtualBox, Vagrantのインストール
自分にあったインストーラーをダウンロードしてインストールしてください

VirtualBox: https://www.virtualbox.org/
Vagrant: http://www.vagrantup.com/
##本題
###VagrantでUbuntuの環境構築
VMを置くためのディレクトリ作成

```bash
$ mkdir MyVagrant #VMを置くためのディレクトリ
$ cd MyVagrant
$ mkdir Rails #VM
$ cd Rails
$ vagrant init bento/ubuntu-18.04　#Vagrantfile生成
```
このコマンドを叩くとVagrantfileができてるので
下記のように書き直す

```:Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.box = "bento/ubuntu-18.04"
  config.vm.network "private_network", ip: "192.168.33.11"
end
```

```bash
$ vagrant up # VM起動
$ vagrant ssh # ssh接続
```
これでUbuntu18.04の環境構築が完了

###Ruby on Railsの環境構築
(Ubuntu側での操作のためssh後行ってください)
gitとか色々インストール

```bash
$ sudo apt-get update
$ sudo apt-get -y install git curl g++ make
$ sudo apt-get -y install zlib1g-dev libssl-dev libreadline-dev
$ sudo apt-get -y install libyaml-dev libxml2-dev libxslt-dev
$ sudo apt-get -y install sqlite3 libsqlite3-dev nodejs
```

rbenvのインストール

```
$ cd
$ git clone https://github.com/sstephenson/rbenv.git .rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(rbenv init -)"' >> ~/.bashrc
$ exec $SHELL
```
(git clone でエラーが出た場合, user.name, user.email, 鍵の登録などをすることで解決すると思います.)
ruby-buildのインストール

```
$ mkdir -p ~/.rbenv/plugins
$ cd ~/.rbenv/plugins
$ git clone https://github.com/sstephenson/ruby-build.git
```

rubyのインストール (結構時間かかります)

```bash
$ rbenv install 2.4.1
$ rbenv global 2.4.1

$ rbenv version #rbenvバージョンの確認
$ ruby -v #rubyバージョン確認
```
.gemrc の生成

```bash
$ cd
$ emacs .gemrc #適当なエディタで生成
```

```:.gemrc
install: --no-ri --no-rdoc
update: --no-ri --no-rdoc
```
Ruby on Railsのインストール

```bash

$ gem install rails -v '5.2.1'
$ rbenv rehash
```

アプリ作成からサーバー起動まで

```bash

$ rails new sample  #アプリ作成
$ cd sample
$ bundle exec rails server -b 0.0.0.0 #サーバー起動
```
(rails s だけだとホストOS側からアクセスできない)
ブラウザで 192.168.33.11:3000 にアクセスできたら成功
(192.168.33.11 はVagrantfileで書いた ip)
ターミナルに戻り ctrl+C でサーバを落とす　

```bash
$ exit # sshから抜ける
$ vagrant halt #VMのシャットダウン
```
ここまで全てMacOSでの出来事

### box生成 から windowsに環境を渡すまで
Mac でpackage.boxの生成

```bash

$ vagrant package
```
どこかに package.box ができていたら成功(結構時間がかかる)

ここから結構大変
ここからWindowsでの操作
####下準備
* USB でもなんでもいいのでWindowsのPCにpackage.box を渡す
* WindowsPC でもVirtualBox, Vagrant の環境を構築
* 適当なterminalの準備 (gitbash or WSL がおすすめ)


terminalを起動

```bash
$ mkdir MyVagrant
$ cd MyVagrant # MyVagrantのなかにpackage.boxを移動
$ vagrant box add Ubuntu18 package.box
$ vagrant box list #これでUbuntu18が追加されていればOk
$ vagrant init Ubuntu18 #結構時間かかる
$ cd Ubuntu18
```
Vagrantfile の編集

```:Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.box = "bento/ubuntu-18.04"
  config.vm.network "private_network", ip: "192.168.33.12"
end
```

```bash

$ vagrant reload #Vagrantfile いじった後これをしないと行けないかも
$ vagrant up
$ vagrant ssh
$ cd sample
$ bundle exec rails server -b 0.0.0.0
```

ブラウザで 192.168.33.12:3000 にアクセスできたら成功
(192.168.33.12 はVagrantfileで書いた ip)
ターミナルに戻り ctrl+c でサーバを落とす　

```bash

$ vagrant halt #VMのシャットダウン
```
これでMac及びWindowsに同じUbuntu環境ができたと思います
お疲れ様です

###おまけ よく使うコマンド
```bash

$ vagrant up #VMの起動
$ vagrant ssh #ssh接続
$ vagrant halt #シャットダウン
$ vagrant package #package.box の生成
$ vagrant box add Ubuntu18(box名) package.box(package名) #boxの追加
$ vagrant box list #boxlistの確認
```

###参照リンク
[Railsの環境構築(Ubuntu)](https://qiita.com/hiroyuki242424/items/f64761d6363efa8bfd45)
[Vagrantの仮想マシンにscpでファイル転送する](https://qiita.com/yakk512/items/16752a24784805792a59)
[Vagrantの中でRailsを起動するまでの手順。](https://qiita.com/mochizukikotaro/items/f6f7ac94576728cd0f2a)
[Vagrant + VirtualBox + Ubuntu でRails環境構築](https://qiita.com/maikya_gu/items/4b6a9bf29b2bf3c89a2f)
[Vagrantでboxファイル作成](https://qiita.com/Esfahan/items/46da3ce1893a67789b58)
[Vagrant + VirtualBoxでWindows上に開発環境をサクッと構築する](https://qiita.com/ozawan/items/160728f7c6b10c73b97e)