Oracle VirtualBox の Ubuntu 20.04 LTS 仮想環境上に Ruby on Rails 開発環境を構築する

#はじめに
Windows で Rails アプリケーションの開発環境を構築する方法はいくつかあります。

(参考) WindowsにおけるRubyやRailsの環境構築方法をいろいろ調べてみた（2017年3月版）
[https://qiita.com/jnchito/items/9de9e515f82dc1969cc5](https://qiita.com/jnchito/items/9de9e515f82dc1969cc5)

ここでは Oracle VirtualBox の Ubuntu 20.04 LTS 仮想環境に Ruby on Rails 開発環境を構築する手順を記述します。
この方法は以下のメリットがあります。
* Linux 環境で Rails を動かすため、ネット上に情報が多い
* 環境の再構築が容易(どこかでうまくいかなくても最初からやり直せる)
* 仮想ディスクイメージを USB メモリ等で持ち運ぶことができ、複数の PC にて同じ環境が使える（ただしポータブルメディア上でそのまま動かすには、USB 接続 SSD などランダム書き込みが高速でないと実用は難しそうです）
* 仮想ディスクイメージをまるごとコピーといった簡単なバックアップも可能

ホストOS は Windows 10 Home で説明していきますが、他のホスト OS でも大差はないと思います。

#バージョン について
この記事は以下のバージョンを対象としてます。(2020年5月9日時点での最新バージョン)
	
Oracle VM VirtualBox Base Packages - 6.1.6
[https://www.oracle.com/virtualization/technologies/vm/downloads/virtualbox-downloads.html](https://www.oracle.com/virtualization/technologies/vm/downloads/virtualbox-downloads.html)

Ubuntu 20.04 LTS Desktop
[https://jp.ubuntu.com/download](https://jp.ubuntu.com/download)

Ruby : 2.7.1
[https://www.ruby-lang.org/ja/](https://www.ruby-lang.org/ja/)

Ruby on Rails : 6.0.3
[https://rubyonrails.org/](https://rubyonrails.org/)

Linux はトラブル対処時などの情報の得やすさから、シェアが高い Ubuntu、またリリースから5年間のセキュリティサポートが保証されており安定している 20.04 LTS (long-term support) としました。
Ruby および Rails については旧バージョンにこだわる理由があまり無いため、最新バージョンとしました。

#必要ファイルのダウンロード
上記「バージョンについて」のリンクから ubuntu-20.04-desktop-amd64.iso および Oracle VM VirtualBox の Windows Installer をダウンロードし、VirtualBox はインストールを行います。

#Virtual Box 仮想マシンの作成
Oracle VM VirtualBox マネージャで「新規(N)」より仮想マシンを作成します。
パフォーマンス的にはここでメモリ2048MB (余裕があれば4096MB以上)、仮想ハードディスクサイズ20.00GBで作成し、
次に「設定(S)」でシステム→プロセッサー(P)でプロセッサー数を2以上、ディスプレイ→スクリーンでビデオメモリーを128MBに設定するのを推奨します。
<img width="323" alt="q1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230462/23b8df92-d6c5-8a1a-902b-f20d7b5033fa.png">




> (オプション設定)
ホストOSのブラウザでゲストOSで動かしている Rail アプリに接続するには：
ネットワーク→アダプター1▽高度・ポートフォワーディングで、ゲストポート3000をホストポート3000を設定
<img width="332" alt="q2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230462/b2ece7e7-80eb-8e05-f5ab-31c632763c69.png">

>ホストOSとゲストOSでのファイル共有フォルダを設定するには：
共有フォルダ―→右側の追加アイコンで設定 (自動マウントにチェックを入れる)
<img width="173" alt="q3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230462/60131cb6-e979-6061-90a7-4a11021042ed.png">

#Virtual Box 仮想マシンの起動、ゲストOS インストール
「起動(T)」で起動ハードディスク選択の光学ディスク選択にて、Ubuntu の iso ファイルを追加して起動します。
<img width="321" alt="q4.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230462/948d57b3-03f9-591f-a1bc-bd1b7e2c4b39.png">


インストール言語「日本語」の選択は一番下にあります。
<img width="397" alt="q5.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230462/4f6d3a79-4860-6a2a-9c16-94899f2d24e7.png">

アプリケーションは「最小インストール」を選択します。(「通常のインストール」でも問題はないと思います)
<img width="400" alt="q6.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230462/ea02c3d0-307b-df2b-1e1d-8ed0174a0289.png">

その他インストールはほぼデフォルトで進めて問題ありません。

#Ubuntu インストール後、Guest Addtions のインストール
左下のメニューより、「端末」を開き、これ以降端末にてコマンドを入力していきます。
<img width="400" alt="q7.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230462/d3ab735a-fd74-517c-6a70-ef60c2feceb0.png">


>端末は右クリックして「お気に入りに追加」してもよいでしょう。
また端末のショートカットは、デフォルトでコピーに「Shift+Ctrl+C」、ペーストに「Shift+Ctrl+V」が割り当てられています。
このショートカットは端末を右クリックして「設定」→ショートカットで変更することができます。
(Linux では「Ctrl+C」はプロセスの終了などで使うことが多いため、コピーは「Ctrl+X」を割り当てるのがよいと思います)

```sudo apt install -y build-essential```
メニューバー→デバイス→Guest Addtions CD イメージの挿入を選択し、ソフトウェアを実行します。

共有フォルダを使用する場合は、ユーザーに権限を設定する必要があります。
```sudo gpasswd -a {ユーザ名} vboxsf```


その後 ゲストOS を再起動することで、Guest Addtions が有効になり、
* VirtualBox ウィンドウサイズ変更にゲストOS 画面解像度が追従
* メニューバーのデバイス→クリップボードの共有
* メニューバーのデバイス→ドラッグ & ドロップ
* 共有フォルダ
などが有効になります。
OS再起動は右上のアイコンから行えます。

#Ruby および Ruby on Rails のインストール

参照ライブラリ等のインストール
```sudo apt install -y curl git libssl-dev zlib1g-dev libsqlite3-dev libpq-dev```

>このうち「libpq-dev」はローカルで Rails を動かすだけなら不要です。
しかし Rails アプリは Heroku にデプロイして実行することも多く、
Heroku での実行には PostgreSQL が必要であるため、ここでついでにインストールしておいてもよいと思います。

(参考) Rubyのインストール
[https://www.ruby-lang.org/ja/documentation/installation/#rbenv]
(https://www.ruby-lang.org/ja/documentation/installation/#rbenv)

```git clone https://github.com/rbenv/rbenv.git ~/.rbenv```

```echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc```
```echo 'eval "$(rbenv init -)"' >> ~/.bashrc```
```source ~/.bashrc```

```mkdir -p "$(rbenv root)"/plugins```
```git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build```

インストールできる Ruby のバージョンを確認します。
```rbenv install --list```

Ruby 2.7.1 をインストールするコマンドを示します。(このインストールコマンドの実行は10分程度時間がかかるので、ゆっくり待ちましょう)
```rbenv install 2.7.1```

```rbenv global 2.7.1``` 
```echo "install: --no-document" >> $HOME/.gemrc```
```echo "update: --no-document" >> $HOME/.gemrc```
```gem install rails```

Rails 6 の実行には webpacker および Yarnのインストールが必要です。
>(参考) Rails6 開発時につまづきそうな webpacker, yarn 関係のエラーと解決方法
[https://qiita.com/NaokiIshimura/items/8203f74f8dfd5f6b87a0](https://qiita.com/NaokiIshimura/items/8203f74f8dfd5f6b87a0)

>(参考) Yarn インストール
[https://classic.yarnpkg.com/ja/docs/install/#debian-stable](https://classic.yarnpkg.com/ja/docs/install/#debian-stable)

```curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -```
```echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list```
```sudo apt-get update && sudo apt install -y yarn```

```
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt-get update && sudo apt install -y yarn
```
(2行目に改行が入ってしまうため再掲)


#Rails アプリケーションの起動確認
```rails new sample```

```cd sample```
```rails server -b 0.0.0.0```

ブラウザで http://localhost:3000 にアクセスして画面を確認できます。
![q8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230462/f57c9b6d-1f31-e98a-ba12-0d26f16fa17f.png)

#おまけ
Ruby アプリケーションの統合開発環境である RubyMine をインストールするコマンドです。
一か月間試用できます。
```sudo snap install rubymine --classic```

>(参考) RubyMineをインストールする
[https://pleiades.io/help/ruby/installation-guide.html](https://pleiades.io/help/ruby/installation-guide.html)