はじめ
レゴ工場で10人の作業員が同じAレゴを組み立てる
この例えをもとに、開発環境や仮想マシンについて理解していきましょう!
開発環境とは?
開発環境(Development Environment)とは、プロジェクトを正常に動かし、開発を進めるために必要なすべての構成要素です。
レゴ工場で例えるなら、同じレゴを作るために必要な部品・工具・組み立て説明書などが開発環境にあたります。
例えば Node.js のプロジェクトでは、開発環境は次のような要素で構成されています。
開発環境
├─ OS(Windows / Ubuntu / macOS)
├─ Node.js
├─ npm パッケージ
├─ データベース(MongoDB)
├─ 環境変数
├─ 設定ファイル(Config)
├─ プロジェクトのソースコード
└─ プロセス管理ツール(PM2 など)
つまり、プロジェクトを実行するために必要なものをまとめて開発環境と呼びます。
なぜ開発環境を統一する必要があるのか?
もし10人の作業台ごとに環境が少しずつ違っていたらどうなるでしょうか?
- 部品が違う
- 工具が違う
- 説明書が違う
同じレゴを作っているつもりでも、完成品に違いが出てしまうかもしれません。
ソフトウェア開発でも同じです。
例えば、
- Node.js のバージョンが違う
- 使用しているライブラリのバージョンが違う
- OS が違う
- データベースのバージョンが違う
このような小さな違いが、思わぬ不具合の原因になることがあります。
開発現場でよく聞く
「自分の環境では動くのに…」
という状況は、多くの場合、開発環境の違いが原因です。
そのため、チーム全員が同じ開発環境で作業できるようにすることが重要になります。
仮想マシン(VM)とは?
VM(Virtual Machine)とは、自分のコンピューターの中にもう一台の独立したコンピューターを作る技術です。
レゴ工場で例えると、各作業員専用の作業台のようなものです。
それぞれの作業台は独立しているため、お互いに影響を与えることなく、同じ環境を用意できます。
例えば、ホストOSが Windows でも、VM の中では Ubuntu を動かして開発できます。
仮想化ソフトウェアとは?
仮想マシンを作成・実行するためには、仮想化ソフトウェアが必要です。
レゴ工場で例えるなら、作業台そのものを用意する設備にあたります。
代表的なものとして、
- VirtualBox
- VMware
- Hyper-V
などがあります。
これらは VM を作成・実行するための仮想化エンジンです。
開発環境自動化ツール
毎回10人分の作業台を手作業で用意するのは、とても大変です。
毎回、
- 作業台を組み立てる
- 必要なブロックを並べる
- 工具を用意する
- 作業しやすい配置に整える
という作業を10回繰り返すことになります。
そこで、「どのような作業台を用意するか」が書かれた設計書を読み取り、その内容どおりに作業台を自動で準備してくれるツールを利用します。
開発でも同じように、毎回手作業で VM を作成し、OS をインストールし、設定を行うのは大変です。
そこで活躍するのが開発環境自動化ツールです。
代表的なツールが Vagrant です。
Vagrant は Vagrantfile に書かれた設定を読み取り、自動で VM を構築します。
例えば、
- VM の作成
- OS の選択
- ネットワーク設定
- 共有フォルダの設定
- SSH 接続設定
- 初期環境の構築
などを自動で行ってくれます。
つまり、チーム全員が同じ開発環境を簡単に再現できるようになります。
よく使う Vagrant コマンド
| コマンド | 説明 |
|---|---|
vagrant up |
VM を作成・起動する |
vagrant ssh |
VM に SSH 接続する |
vagrant halt |
VM を停止する |
vagrant reload |
VM を再起動し、設定を再読み込みする |
vagrant destroy |
VM を削除する |
vagrant status |
VM の状態を確認する |
これらのコマンドは、通常
Vagrantfileがあるディレクトリで実行します。
まとめ
今回は、
- 開発環境
- 仮想マシン(VM)
- 仮想化ソフトウェア
- 開発環境自動化ツール(Vagrant)
それぞれの役割について整理しました。
次回は Vagrantfile の役割 や、vagrant up・vagrant ssh が内部でどのような処理を行っているのかについて紹介したいと思います。