【超入門】MacのVagrantにubuntuをインストール＆起動（vagrant up）させる方法

今回は、**「MacのVagrantにubuntuをインストール＆起動する方法」**をご紹介します。

とはいえ文章で言われても「なんのこっちゃ」ですよね。
図にすると、こんなことを行います。
![IMG_4943.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399975/474462b8-6578-e103-55d0-12b0bc61d60f.png)
**自分の持っているMac PC、の上で動いているMacOS、の上に用意された仮想環境VirtualBox、の上で動いているVagrant、の、上で！ubuntuっていうOSを使えるようにする**のが目的です。

今回ご紹介する手順は、以下の通りです。

A)MacにVagrantがインストールされているか確認する
B)テストディレクトリ（フォルダ）を作る
C)テストディレクトリ（フォルダ）の中にubuntuをインストールする
D）Vagrantfileを編集する
E）Vagrantfileを読み込む（＝vagrant up）
F）おまけ：ubuntuにログインしてみる

なお、今回導入した環境・使用したソフトは以下の通りです。
MacOS High Sierra 10.13.6
Vagrant 2.2.4
VirtualBox 6.0.4

#MacのVagrantにubuntuをインストール＆起動させよう
###A) MacにVagrantがインストールされているか確認する
そもそもMacにVagrantが入っているか確認するためには、ターミナルで`which vagrant`と入力すればOKでした。

```local:terminal
$ which vagrant
/usr/local/bin/vagrant
```
無事にインストールされているようです。

*※もしVagrantのインストールがまだの場合は、関連記事「[【超入門】VagrantをMacにインストールしてみよう](https://qiita.com/Kotone-Tachibana/items/b64ba81e998d623d2d25)」も合わせてご覧ください。*

###B) テストディレクトリ（フォルダ）を作る
次に、vagrant_test（名前は自由です）というファイルを作り、その中にubuntuをインストールしていきます。

```local:terminal
# vagrant_testというディレクトリを作る
$ mkdir vagrant_test 

# vagrant_testディレクトリ内に移動する
$ cd vagrant_test/ 

# vagrant_testディレクトリ内にいることを確認する
$ pwd
/Users/tachibananokotone/vagrant_test
```
これで、きちんとディレクトリが作られていることがわかりました。

###C) テストディレクトリ（フォルダ）の中にubuntuをインストールする
では、こちらにインストールしてきましょう。

```local:terminal
$ vagrant init bento/ubuntu-18.04
```
このあと"A Vagrantfile has been placed in this directory."うんちゃらかんちゃら・・・と出てくれば成功です。

`ls`で展開してみると、きちんと「Vagrantfile」という名前のファイルが作られていることがわかります。

```local:terminal
$ ls
Vagrantfile
```

###D） Vagrantfileを編集する
発行されたVagrantfileをを編集しましょう。

まず、Vagrantfileを開きます。

```local:terminal
$ vi Vagrantfile
```
viエディタが立ち上がって、何やら大量の文字が出てきたと思いますが、`# config.vm.network "private_network"...`と書かれている行を見つけてください。ちなみに私は35行目あたりに見つけました。

```local:Vagrantfile
$ #config.vm.network "private_network", ip:"192.168.33.10"
```
文頭でコメントアウトしている`#`を取り除きます。

```local:Vagrantfile
$ config.vm.network "private_network", ip:"192.168.33.10"
```

「このネットワークで動かしてね〜」という、VirtualBoxさんへの伝言になる部分がアクティベートされました。
これで、ファイルの編集は完了です。
エスケープキー**【Esc】**と、ファイルを保存してからviを終了するコマンド`:wq`を入力し、viからターミナルに戻りましょう。

######【余談】 viからターミナルに戻るには、さまざまな方法があります。
>:q　  viの終了　(何も書き込まずに終了したい場合)
:wq　 ファイルに書込んだものを上書き保存してviを終了
:q!　 編集結果をファイルに書込まずに終了
:wq!　リードオンリーのファイルに強制的に書き込んで終了

###E） Vagrantfileを読み込む（＝vagrant up）
さて、次が最後です。
Vagrantfileの準備ができたので、「これで仮想環境を整えてください」とVirtualBoxに伝えてあげましょう。

```local:terminal
$ vagrant up
```
少し時間がかかるかもしれませんが、ubuntuが起動を始めます。

```local:terminal
==> default: Successfully added box 'bento/ubuntu-18.04' (v201812.27.0) for 'virtualbox'!
```

最終的にこちらのメッセージが出れば、ubuntuのインストール＆起動は完了です！

###F） おまけ：ubuntuにログインしてみる
せっかく立ち上げたんだから、ログインしてみたいわ〜という方は、以下のコマンドをお試しください。

```local:terminal
$ vagrant ssh
Welcome to Ubuntu 18.04.1 LTS
```
ちゃんとwelcomeしてくれるはずです♪
ログアウトして元の環境に戻る場合は、下記を実行してください。

```local:terminal
$ exit　　#ubuntuからログアウトする
logout
$ vagrant halt　　#Vagrantをシャットダウンする
==> default: Attempting graceful shutdown of VM...
$ pwd　　#現在の作業ディレクトリを表示
/Users/tachibananokotone/vagrant_test
```
B）で作ったファイル（vagrant_test）に戻ってきていますね。
お疲れさまでした！

#シンタックスエラーが出てしまった場合

よっしゃVagrantfileも修正したし、あとはインストールだ〜！
`vagrant up` ドーン！

しかし、こんなエラーが出てしまいました。

```local:terminal
$ vagrant up
Vagrant failed to initialize at a very early stage:

There is a syntax error in the following Vagrantfile. The syntax error
message is reproduced below for convenience:

2: syntax error, unexpected *
 -*- mode: ruby -*-
   ^
```

シンタックスエラー。
「2行目のプログラムの構文が間違ってるぞ〜！」と言われていますね。
`config.vm.network`のコメントアウトの他に、いじってないはずなんだけどな・・・。

と思いつつ、ご指摘された`-*- mode: ruby -*-`周辺をみてみると、こんな感じになっていました。

```local:terminal（エラー）
# 
 -*- mode: ruby -*-
# vi: set ft=ruby :
```

はぁ。
2行目にスペースが入ってるからいけないのですかね？（初心者）

何が正しいのかわからないと、対処の仕方もわからないので、「vagrantfile　"-*-" "mode: ruby"」で検索してみました。

```local:terminal（本来）
# -*- mode: ruby -*-
# vi: set ft=ruby :
```
なるほど。
正しい構文は、こちららしい。
どうやら**1行目の無駄な改行とインデント**が、エラーの原因のようです。

というわけで、スペースを削除したいんだけど、deleteキーが効かないんですね・・・。
なぜならコマンドモードになっているためです。
viには「編集モード」と「コマンドモード」があって、後者のモードでは、文字の追加・削除・コピーなどといった編集ができません。
そのためコマンドという、決められたキーを打つ必要があります。

**viのコマンドモードで文字を削除するには`x`と打ち込みます。**
カーソルがある位置の文字を削除してくれます。

**消しすぎた！という時は、`a`で文字を追加することができますよ。**

詳しくは「[vimの基本操作](https://qiita.com/tasaki-i3/items/49ebad1dca20c669ad25)」を参照させていただきました。
https://qiita.com/tasaki-i3/items/49ebad1dca20c669ad25

動画の方がわかりやすいよ〜という方は、ぜひこちらをご参照ください♪
Youtube資料「[MacのVagrantにubuntu-18.04をインストールする方法](https://www.youtube.com/watch?v=VMYNyo58tMg&list=PLrgWyumghXpFkW3nK6rYDJT_R6LRX9aHe&index=5&t=47s)」
https://www.youtube.com/watch?v=VMYNyo58tMg&list=PLrgWyumghXpFkW3nK6rYDJT_R6LRX9aHe&index=5&t=47s

では〜