質問: ### 質問 調べてもわからなかったので Vagrantのフォルダ共有機能について教えて下さい。 Vagrantfile内の「config.vm.synced_folder "../data", "/vagrant_data"」がどのように機能しているかがわかりません... 表記どおりにいけば、 ホスト:Vagrantfileが存在するディレクトリの一階層上のdataディレクトリ ゲスト:/home/vagrant/vagrant_dataディレクトリ が共有される記述だと思います。 しかし実際は、ホストのVagrantfileがあるフォルダとゲストのvagrantフォルダが同期しており記述どおりじゃなくても動く理由がわかりません。 ご教示お願い致します。
回答: Vagrantの機能や思想に関して解説していきます。 まず、Vagrantには仮想マシンに関する機能は「一切ありません」 VirtualBoxやVMwareといった仮想マシンはコマンドや機能等がバラバラで統一性がないので、 Vagrantが「じゃあ俺がラッパーコマンドになる」という思想で機能を提供しているだけの話です。 プラグインさえあればどんな仮装マシンでも動きますし、仮想マシンじゃないものも動かせます。 例えばAWSのプラグインもあり、AWSのアカウント情報を使い`vagraant up`と共にクラウド上のAWSのEC2を借りて立ち上げる事も可能です。 (もちろん後日AWSのEC2インスタンスの代金を請求されます) もし貴方がVirtualBoxの操作に長けたエキスパートであれば、 「Vagrantなんてものは不要だぜ!」という考えになるかもしれません。 その場合でも、Vagrantの一番の強みはサーバーの構成情報がVagrantfileに全て書いてあることです。 環境構築に必要な手順はしっかりVagrantfileに書きましょう。 Infrastructure as Codeとか呼ばれている奴です。 もう環境構築手順書とかいうすぐ古くなって使えなくなるドキュメントを作る必要はありません。 もし新しくメンバーがジョインしたとしても、「Vagrantfileでも見とけ」と言えばその日の内に環境構築が終わり開発に参加出来ます。 Vagrantの理想は`vagrant up`を実行し、 コーヒーを淹れて戻って来たときには全ての環境構築が完了していることです。 決して`vagrant up`を行った後に`vagrant ssh`で仮想マシン内へアクセスし、 `yum install PackageName`を打ち込む事ではありません。 そういったものはVagrantのプロビジョニングでやってください。 仮想マシンの良さはすぐに潰して新しく立ち上げる事が可能な砂場にあります。 気軽に`vagrant destroy`からの`vagrant up`で復旧できるよう、 常にプロビジョニング用のファイルを最新状態に保つよう努力しましょう。 以上、ここまでがVagrantの思想・基本になります。 以下は質問内容に関して抜粋し、一問一答形式でコメントしました。 > > Vagrantfile内の「config.vm.synced_folder "../data", "/vagrant_data"」がどのように機能しているかがわかりません... > > > VagrantはデフォルトではあVirtualBoxのプラグインを持っており、 VirtualBoxの共有フォルダ機能を間借りしてディレクトリの共有を行います。 なので`vagrant up`で立ち上げた仮想マシンをVirtualBoxの設定画面で確認すれば、「共有フォルダ」機能の箇所にVagrantfileで指定したディレクトリの共有設定が反映されているはずです。 > > しかし実際は、ホストのVagrantfileがあるフォルダとゲストのvagrantフォルダが同期しており記述どおりじゃなくても動く理由がわかりません。 > > > Vagrantにはプロビジョニングという側面もあります。 しかしVirtualBoxのような仮想マシンは専用のHDDファイルをマウントする思想で作られている為、 ホストマシンとゲストマシンのファイルの受け渡しは出来ません。 どうやってプロビジョニング用のファイルを持ち込めばいいんだ... このためにvagrant_dataに関しては設定しなくても勝手に共有される仕組みになっています。