【Macで仮想環境構築】vagrantでLaravelの開発環境を作ろう！  その1 〜仮想環境とは？〜

#はじめに
vagrantを使ってLaravelの環境構築をする際にいろんな記事をツギハギで見ながら作った経験から、一つの記事でわかりやすく構築できるのあったら良いなぁと思い、じゃぁ書いてみよう！ってなって作りました！！

量が多くなってしまうので、記事は分割して書く予定です。

またこの記事では構築方法の概要のみを記載しますので、大枠だけご理解いただければ幸いです。
(設定方法の詳細は別途記事を作成する予定です。)

※実施する環境について
MacOSの端末を対象にします。

#仮想環境ってなに？
よく聞く仮想環境
でもなにそれ？仮想ってどう言うこと？ってなりますよね。。

仮想環境を知るために、まずサーバーを元に考えていきましょう。

システムを運用するにあたって、プログラムを動かすWEBサーバー、DBがあるDBサーバーなどを構築する必要があります。
でもサーバー1台ごとにWEBサーバー、DBサーバーとしてたら、サーバーの台数が多くなって、場所も使うしお金もかかりますよね。。
![サーバー物理的に構築する例.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415296/8fe808fd-55fd-cdc5-4ed8-2b97e53a1bda.png)

そんな時、サーバーの中のメモリを分割し、その分割した領域にApacheなどのWEBサーバーソフトウェアや、MySQLなどのDBMSを入れて部分的にサーバー化すること
これを「仮想化」と言います。

実際にあるサーバーは1台だけど、その中でWEBサーバーやDBサーバーを動かしてるやり方ですね。
![サーバー仮想化.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415296/d3db1762-f70d-ef0c-c476-d85f44c0bfc2.png)


#開発環境の仮想化とは？
では開発する際に使用する仮想環境ってなんなの？ってのを説明します！

先ほどのサーバーを例にした説明から仮想化とは
「端末のメモリを分割し、その領域内に環境を構築すること」です。
(厳密にはCPUも分割してるみたいですが、今回の説明ではメモリを分割するというイメージで説明します。)

と言うことは、開発環境の仮想化というのは、自分たちが使っている端末の中のメモリの一部を使用し、その領域で開発環境を構築することになります。
![端末の仮想環境.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415296/407ee576-04a6-ac9e-aa81-e85947939708.png)

またメモリを分割して使うので、複数の開発環境を作成することができます。

この利点は、案件ごとに開発環境を分けて構築できることですね。
例えば、AさんとBさんからシステム開発の依頼を受けているとします。
AさんからはPHPの7系でやってほしいとの要望がありますが、Bさんからは5系でやってほしいと要望があります。

これを同じ端末上でやると、案件の開発ごとにPHPのバージョンを切り替えないといけなくて大変。。

そんな時、Aさん用、Bさん用の仮想環境を構築しておけば、それぞれの環境を起動させることで、各自設定されたPHPのバージョンで開発することができます。

#どんな開発環境を作るのか？
次にどんな開発環境を作るのか？についてお話しします。

まず仮想環境ですが、メモリの領域を確保しただけなので、中身にはなにも入ってません。

空箱です。

なんで、開発に必要なものを入れていく必要があるんですね。

今回はLaravelの開発環境なので、PHPが動く環境をまず作る必要があります。
必要なものは、OS、webサーバーソフトウェア、DBMS、PHPがあればPHPの動作環境は作成できます。

一般的には以下の組み合わせで構築しているのが多いです。

|    OS              |    WEBサーバーソフト   |    DBMS            |    言語          |
|:------------------:|:------------------:|:------------------:|:------------------:|
|        Linux        |        Apache        |        MySQL        |        PHP        |

この組み合わせで作成した開発環境を、それぞれの頭文字をとって、**LAMP** と言われています。

これにフレームワークとしてLaravelをインストールすれば、Laravelの開発環境は完成というやつです。

なので、これらを一つずつ仮想の開発環境にインストールしていく必要があります。

でもどうやって仮想環境にインストールするの？
そもそも仮想環境ってどうやって作るのん？

#仮想環境の作成方法について


ここでは大まかな概要だけ説明して、詳細な構築手法は別の記事で説明します。
また概要についてもこちらのサイトでかなりわかりやすく説明されています。
https://kitsune-programming.com/linux-environment

が、私なりにまとめましたので、説明しますね（笑）

仮想環境を構築する方法は色々ありますが、今回は以下の2つを使って構築します。

・VirtualBox
・Vagrant

##VirtualBoxについて
VirtualBoxとは、ホストOSの中にゲストOSの環境を構築するためのソフトウェアです。
ホストOSというのは端末に入っているOS(MacとかWindowsとか)、ゲストOSは仮想環境に入っているOS(Linuxなど)を指します。

また仮想環境のことを仮想マシンと呼ぶこともあります。
仮想マシンはVirtualBox上で動くということですね。
![virtualboxの図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415296/96d24408-55ab-ceff-5f71-8922b3823c2e.png)

##Vagrantについて
実はVirtualBoxさえあれば、Linuxの仮想マシンは構築できます。
が、構築方法の手軽さ、設定情報の共有などの面からVagrantを使う方がかなり楽ですので、今回はこちらを用いた作成方法を説明します。

Vagrantとは、VirtualBoxなどを操作できるソフトです。
操作はCUI(Macだとターミナル)上で行います。

ターミナルからvagrantのコマンドを実行することで、仮想マシンにLinuxのOS(CentOSやUbuntuなど)をインストールしたり、仮想マシンの構築設定をしたりできます。
![vagrantの説明.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415296/f5b8148b-6882-130c-b045-348d4656a2a2.png)


またその設定内容を**Vagrantfile**を記載します。

このVagrantfileは他者に共有することが可能で、自分以外の人でもここに記載された内容で同じ環境を構築することが可能です。

これによって、チーム開発でもVagrantfileを共有することにより、誰でも同じような環境を簡単に構築することができます。(なので現場では仮想環境を使った開発をしているところが多いです。)

これはvagrant以外でもdockerを使った仮想環境構築でも同じく共有することができます。
(dockerはそこまで詳しくないので、後で勉強して、別途まとめようと思います。。)

#仮想環境構築の流れ
では次に構築の流れを説明します。

1.VirtualBox、Vagrantのインストールから仮想マシンの作成、接続
2.仮想マシンにApache、MySQL、PHP、phpMyAdminをインストールし、構築
3.Laravelをインストールし、構築

それぞれを別途記事にして詳細を説明していきます。

#最後に
仮想環境構築の概要を自分なりにまとめました。
間違いなどありましたら、ご指摘いただければ幸いです。

何卒よろしくお願いいたします。