2019年6月26日こんにちは、はんぺらです。自分のMacのパソコンに開発環境を作りたんだけど、何を使って作ったら良いんだろう?MAMP?Docker?Vagrant?とかあるけど、何がどう違うんだろう?それぞれの違いと、何を選んだ方が良いか解説します。※自分がMacユーザーなので、Macユーザー用で説明しています。Windowsユーザーの方もMAMPをXAMMPに置き換えれば理解はできると思うので、よろしければ読んでみてください。ContentsMAMP、Docker、Vagrantってどう違うの?PHPの開発環境でよく聞くLAMP環境って何?LinuxとはApacheとはMysqlとはPHPとはMacでPHP、Mysqlの開発環境を作る一番簡単な方法は、MAMPを使うことサーバーサイドの勉強をしたいならVagrantがおすすめでもやっぱりDockerは使いこなせるようになっていた方がいいですエンジニアにサーバーサイドの知識は必要なの?まとめMAMP、Docker、Vagrantってどう違うの?自分のパソコンに開発環境を構築する方法は幾つかあるのですが、その中で3つのメジャーな方法を今回は取り上げます。MAMPDockerVagrant開発環境を作ろうと思って調べると、上記のワードが検索結果に出てくるので、見た事はあるかと思います。上記を簡単にグループ分けしますと、MAMPと仮想化ツール(Docker,Vagrant)に分けられます。MAMPではMacに直接Apache、Mysql、PHPをインストールして動かします。仮想化ツールは、Mac上に仮想環境を構築してそこでApache、Mysql、PHPをインストールして動かします。言うと、バッグに筆記用具を入れる時に、そのままバッグに投げ入れるか、筆箱に入れてバッグに入れるかのような違いですかね。バッグがMacで、筆記用具がPHP、Mysqlで、筆箱が仮想化ツールです。例えて話すのは難しいですね。それでは、この3つの中でどれを使ったほうが良いのでしょう?まず、その前にPHPの開発環境でよく聞く、LAMP環境というものを理解しましょう。PHPの開発環境でよく聞くLAMP環境って何?LAMPとは、Linux、Apache、Mysql、PHPの頭文字を取って並べたものです。X)、WindowsのWindowsXPと同じ部類のものになります。System(オペレーティング・システム)の略で、アプリやデバイスを動作させるための基本となるソフトウェアのことです。具体的には、キーボードやマウス・タッチパッドなどのデバイスから入力した情報をアプリケーションに伝え、またソフトウェアとハードウェアの連携を司る中枢的な役割を果たします。パソコンやスマートフォンにはゲームやワープロ・表計算などさまざまな仕事をするアプリケーションがありますが、それらはOSごとに開発されるのが通常です。http://www.toha-search.com/it/os.htmApacheとはWebサーバーの一つです。その他、Nginxとかも有名です。Webサーバーは簡単に言うと、Webブラウザ等のクライアントとアプリケーション(LAMP環境だとPHP)間の仲介役のイメージです。クライアントからの要求を受け取り、それをアプリケーションに伝達し、アプリケーションからの返答を、またクライントに返す役割をしています。クライアントとはWebブラウザやiOSアプリ、Androidアプリ等様々なものがクライアントになりえます。Mysqlとはデータベース管理システムの一つです。その他、PostgreSQLやOracleSQLなども有名です。データベース管理システムを簡単にいうと、沢山のデータを扱うために最適化されたシステムになります。これがないと、自分でファイルからデータを検索して、抽出しなければいけないですし、実装も大変ですし、処理速度もかなり遅くなるので、データベース管理システムを使わないのは現実的にありえないですね。その大変なことをSQLというものを利用して簡単に行えるようにしたのが、データベース管理システムになります。PHPとはサーバーサイドで動くプログラミング言語の一つです。Web開発で主に利用されます。基本的には、何らかのOSに、上記で説明したWebサーバー、データベース管理システム、PHPがインストールされて、それが正常に連携されていればPHPの開発環境としては問題なく使用できると思います。MacでPHP、Mysqlの開発環境を作る一番簡単な方法は、MAMPを使うことMacで開発環境を作るのに一番簡単な方法は、MAMPを使用することです。MAMPとはMac、Apache、Mysql、PHPの頭文字を取って並べたもので、LAMPとの違いは、LinuxがmacOSに変わっただけです。MAMPを使うと、MAMPが代わりにmacOSに、Apache、Mysql、PHPをインストールし、且つそれを管理をしてくるので、簡単に開発環境が作れます。プログラミングを始めたばかりで、何もサーバーサイドの知識が無い方はMAMPを使ったほうが良いと思います。MAMPを使っていても、サーバーサイドの知識はつかないので、慣れてきたらVagrantなりDockerなり、他の方法をおすすめします。サーバーサイドの勉強をしたいならVagrantがおすすめサーバーサイドの勉強をしたいのであれば、Vagrantで環境を構築することをおすすめまします。Vagrantとは、違う環境に移行可能な開発環境を簡単に構築・管理し、配布することができる開発環境作成ツール。「ほんの数行書くだけで開発用の仮想マシンを構築できる」という優れものだ。https://www.atmarkit.co.jp/ait/articles/1307/22/news076.htmlVagrantで仮想サーバーを立てると、何も入っていない空のサーバーに、自分でApacheとPHPとMysqlを入れないといけません。それらをインストールするために、sshで仮想サーバーの中に入ったり、yumやrpmなどでソフトウェアをインストールしたりと色々と自分でしなければならない事が多いです。自分で本番環境を作成するとなると、同様の事を本番サーバー上でしないといけいないので、勉強していてい損は無いと思います。Dockerは使いこなせるようになっていた方がいいですDockerは、Linuxのコンテナ技術を使ったもので、よく仮想マシンと比較されます。VirtualBoxなどの仮想マシンでは、ホストマシン上でハイパーバイザを利用しゲストOSを動かし、その上でミドルウェアなどを動かします。それに対し、コンテナはホストマシンのカーネルを利用し、プロセスやユーザなどを隔離することで、あたかも別のマシンが動いているかのように動かすことができます。そのため、軽量で高速に起動、停止などが可能です。https://knowledge.sakura.ad.jp/13265/今一番ホットなのはDockerではないでしょうか?なので、Dockerは勉強はしておいたほうが良いです。今自分の職場でもDocker使って、kubenetesで環境構築をしてますkubenetesの需要も今はかなり上がっていて、Kubenetesを使うのであれば、Dockerの知識は必要ですので、今後の事を見越して、Dockerを勉強しておくのはありかと思います。Dockerで開発環境を作るにしても、結局サーバー側の知識は必要ですので、一旦Vagrantなりを経由して、サーバー側の知識を付けてから、Dockerに進むと、Dockerの学習が早く進むかもしれません。エンジニアにサーバーサイドの知識は必要なの?自分がどんなエンジニアになりたいかどうかでサーバーサイドの知識が必要かどうかは変わってくると思います。wordpressを入れて、HTML、CSS、PHPをちょろちょろっと弄る位だと、VagrantとかDocker等のインフラ寄りの知識は、ほぼ必要ないと思います。アプリとか、PWAとかのフロントエンドをメインにやっていこうと思っている人も、サーバーサイドはBaaS等を使えば実現できるので、BaaSしか使わないって決めている人であれば、正直必要は無いかと思います。実際にアプリやサービスを作る時にBaaSだけで実装できるのか考えると、難しい所があるのも事実です。僕も今、Firebase(BaaS)を使ってサービスを作成中ですが、色々と設計した結果、BaaSと自前サーバーの両方を使う事にしました。今後もっとBaaSが発展してくれば、やりたい事は実現できるようになってくるかもしれません。なると、インフラ等のサーバーサイドの知識は必要なくなってくるかもしれませんね。まとめMAMP、Vagrant、Dockerと色々と開発環境を作るためのツールはありますが、自分の目標がどこにあるのかを明確にして、何を選んだ方が良いかを決めていけば良いかと思います。Dockerの順で手を付けていったので、まだ学習はじめの方は取り敢えず、MAMPからやってみることをオススメします。っ越し業者、アパレル販売員等を得て、web系のエンジニアに落ち着く。その後海外で3年ほど働き、帰国後日本でエンジニアを行いつつ、フリーランスになる機会を伺っている。