PHP初心者の開発環境に!仮想環境のすすめ【VirtualBox・Vagrant・Docker】

PHPを使うときにどう言う環境で開発してますか?

この記事では、PHP初心者こそ仮想環境を使った方が幸せになれるのでは?と思い、仮想環境とは何か?どういいのか?について紹介します。

この記事は、YYPHP Advent Calendar 2018 – Qiitaの12日目の記事です。

PHP学習で手軽なのは、ローカルに開発環境を作ること。でも…

PHPの勉強するとき、どういう環境で作業していますか?

1番手軽なのは、パソコンに必要なミドルウェア(PHPやMySQLなど)を入れる「ローカル開発環境」を作る方法です。(これも十分ハマりますが…)

ただこの方法だと、以下のような問題に直面することがあります。

【ローカル環境あるある①】ミドルウェアがぐちゃぐちゃ問題

花井
技術記事などを参考に見よう見まねで環境を作ったので、何が入っているか把握できていない…

プログラミングをはじめたばかりの頃は、技術書やQiitaの記事などを意味も分からずコピペして環境構築した人も少なくないはず。

僕もまさにそうなのですが、そうすると

  • 何かたくさん入っていて、アップデートするとすごく時間がかか
  • 別のバージョンのPHPを入れたいが、今入っているバージョンをなくして大丈夫か把握していない

なんて言う問題が起こり、定期的に「まっさらにしたい!」と言う衝動に狩られます。ただ、それも影響範囲が分からなくてできないません…

【ローカル環境あるある②】PHPのバージョン問題

花井
この本はPHP5.6で、こっちの本はPHP7.1。PHPのバージョンが違う…

 

学習の教材も発売時期によってPHPのバージョンが違うと言うのはよくある話です。

ローカルであってもphpbrewなどを使えば、違うバージョンのPHPを管理することはできますが、なかなか面倒なもまた事実。

実際の開発でもPHPのバージョンが違う複数の本番環境を運用することはありえて、同時に案件をやっている時にいちいちPHPのバージョンを切り替えるのも手間です。

PHP初心者こそ使いたい!仮想環境のすすめ

そこでオススメしたいのが仮想環境です。

仮想環境とは

仮想環境とは、1つのパソコンやサーバーなどのハードウェア上に、「仮想化」技術を使ってあたかも2台以上のサーバーがあるかのように構築した環境のことをいいます。

この方法を使うと新たにVPSなどを借りなくても、ローカル環境とは切り離した環境が構築できます。

仮想環境の種類

仮想環境は大きく分けて以下の3種類があります。

  1. ホスト型
  2. ハイパーバイザー型
  3. コンテナ型

まずは、それぞれの仮想環境の違いを紹介していきます。

1. ホスト型

まず一番一般的なのが「ホスト型(別名:ホストOS型)」です。

ホスト型は、ホストOS(パソコンにもともと入っているOS)と物理的なパソコンの上で、仮想化ソフトを実行させて、その上にゲストOS(仮想環境)を運用する方式です。

ホスト型のメリットとしては、

  • パソコンから一般的なアプリと同じ感覚で、インストール・環境の作成・環境の起動などができるので、扱いやすい

ところです。

主流のソフトとしては、VMware PlayerやOracle VM VirtualBoxなどがあります。

ホスト型のデメリットとしては、

  • ゲストOSを運用する際にホストOSも必要なので、そちらにもリソースが取られる
  • OSからアプリケーションまでまるまる作るので、1つの仮想環境の容量が大きい

と言う点があげらます。

2. ハイパーバイザー型

上で紹介したホスト型のデメリットである、ホストOSのリソースを削除するために考え出されたのが、「ハイパーバイザ型」です。

ハイパーバイザ型は、ホストOSの代わりに、専用の仮想化管理ソフトである「ハイパーバイザー」を使って、その上に複数のゲストOSを動作させる方式です。

ハイパーバイザ型のメリットは、

  • ホストOSが不要になる分、同じハードウェアでもゲストOSのパフォーマンスが向上する

ところです。

ハイパーバイザ型のデメリットは、

OSから入れ直さないと使えないので、専用のハードウェアが必要

と言う点です。Windows 10でもPro版だとハイパーバイザーとしても使えるようになり少し一般的になりましたが、他はVMware vSphereやHyper-V、KVMなどが代表的なソフトですがまだまだマイナーでハードルが高い印象です。

3. コンテナ型

他の方式に比べると比較的新しい方式が、「コンテナ型」です。

コンテナ型は、OSはパソコンに入っているホストOSのみ(場合によっては、コンテナ型とゲストOS上)で、仮想化ソフトの上にPHPやMySQLなどのミドルウェア層と開発するアプリケーション層をまとめた「コンテナ」と呼ばれる領域を構築します。

代表的なコンテナ型の仮想ソフトウェアである「Docker」は、以前はLinuxのみ対応でしたが、現在はDocker for Mac/Docker for Windowsが提供されており、MacやWindows上でも使えます。

コンテナ型のメリットしては、

  • ホストOSとOSを共有するので、仮想環境の容量が抑えられ、構築も早い

という点があげられます。

コンテナ型のデメリットとしたは、

  • まだまだMac版、Windows版は不安定なところもあるので、コンテナ型との併用が必要になる場合がある

という点があげられます。

これに関しては今後に期待です。

仮想環境を使うメリット・デメリット

仮想環境を使うメリットとしては、次の3つがあげられます

  • パソコンに入っているOSに影響されない
  • 作りやすくて壊しやすい
  • 並行していくつも環境が作れる

これらのメリットのお陰でローカル環境のあるある問題である「ミドルウェアがぐちゃぐちゃ」が避けられ、ローカルは綺麗に維持できますし、

「PHPのバージョン」に関しても、バージョンごとに環境を作成することも可能です。

逆にデメリットとしては、以下の2つのことが言えます。

  • 学習コストがかかる
  • パソコンの容量を圧迫する

ローカルで開発する場合より、仮想化ソフトについても学習する必要が出てくるので学習コストは上がります。

でも、遅かれ早かれ直面する問題なので、勉強しておいてそんはありません。

容量に関しても、Dockerのようなコンテナ型が台頭したことで、少し緩和されてきています。

おすすめの仮想環境はVirtualBox&VagrantとDocker

ここまでいろいろな仮想環境について紹介してきましたが、僕の個人的なオススメは、

  • VirtualBox&Vagrant
  • Docker

の2パターンです。

ここでは、それぞれの学習方法と僕も使っているすぐに使える公開されている環境を紹介します。

OSから全部自由自在!VirtualBox&Vagrant

上で紹介したように、ホスト型の代表格「VirtualBox」です。

それと合わせて、環境の管理・構築コストが下げられる「Vagrant」を併用することをおすすめします。

おすすめの勉強方法【VirtualBox&Vagrant編】

僕がVirtualBox&Vagrantを勉強した方法は、「ドットインストール」です。

1本3分の動画で分かりやすく解説してくれます。

Windows/Macのどちらでも構築方法を公開してくれています。

ちょっと使いたい時に便利!公開されている環境【VirtualBox&Vagrant編】

またVagrantの場合、Vagrant boxを使うと簡単に同じ環境を構築できるので、PHPの勉強や開発に便利なLAMP環境をすぐに構築できるVagrant boxを公開してくれています。

ver2.0の頃の少し古い記事ですが、使い方は一緒なので参考にどうぞ。

軽量で本番環境でも使える!Docker

最近、注目されているコンテナ型の代表格「Docker」です。

次にMacを新調したら、ローカルにはミドルウェアを最小限にしてDocker for Macで運用したいなと考えています。

おすすめの勉強方法【Docker編】

僕のDockerの勉強するのにおすすめなのは、湊川あいさん著の「マンガでわかるDocker」シリーズです。

なかなかとっつきにくい技術の話をマンガで書いてくれてる著者のDocker本です。(他にもこんな本を書いてくれています => 湊川あいさん著の本 )

基本的な概念から、Vagrantとの違いなんかも紹介してくれています。

また、Docker for Mac/Docker for Windowsのインストール手順や本番環境での運用など実践的な内容はこの本が参考になりました。

ちょっと使いたい時に便利!公開されている環境【Docker編】

DockerもDocker Composeを使うと簡単に同じ環境を構築できるので、PHPの勉強や開発に便利なLAMP環境をすぐに構築できるDocker Composeを紹介&公開してくれています。

この記事の筆者がこの記事で説明しているDocker ComposeをGitHubで公開してくれています。

まとめ

この記事では、プログラミングにおすすめの仮想環境の紹介をしてきました。

最近は、プログラミングを勉強しようとするといろいろな関連技術が出てきてちょっと大変ですが、どれも一度覚えてしまえば時短になったり、管理が楽になったりメリットの多いものなので、苦手意識を持たず少しずつ取り入れて見ましょう。

僕もDockerは使い始めたばかりですが、もっと使いこなせるように精進していきます。