TIL

Today I Leaned. 仕事で知ったことや、つまづいたことを時間のある時にメモしておく

基本的な使い方 - Synced Folders - Vagrant

Basic Usage

設定(Configuration)

同期フォルダはVagrantfile内にconfig.vm.synced_folderキーワードを使い設定する。以下のように設定する

Vagrant.configure("2") do |config|
  # other config here

  config.vm.synced_folder "src/", "src/website"
end

第1パラメータはホストマシンのディレクトリのパスを指定する。相対パスで指定した場合、プロジェクトのルートからの相対パスになる

第2パラメータはゲストマシン内の共有したいフォルダの絶対パスを指定する

※もし、ここで指定したフォルダがない場合、再帰的にフォルダを作成してくれる


オプション(options)

同期フォルダの設定をするときに、追加オプションパラメータも指定することもできる。追加オプションは下記のものになる

より詳しい使い方の例はこのセクションの下の方に書いてある。owner/groupの例では、1つの追加オプションがカンマで区切られている。


これらのオプションに加えて、特定の同期フォルダのタイプによってさらにオプションがつく場合がある。(RSyncとかVirtualBoxとか)

詳細についてはそれぞれのドキュメントを参照すること

組み込まれている同期フォルダタイプについてはほかのページで紹介されている

  • create(boolean): trueを指定すると、ホストにフォルダが存在しなかった場合、フォルダを作成する。デフォルトではfalse
  • desabled(boolean): trueを指定すると、同期フォルダの機能を無効にし、セットアップをしない。これは、以前に定義した同期フォルダの設定を無効にしたり、何かの条件によって同期しないようにするために使用する
  • group(string): 同期フォルダを所有するグループの設定。デフォルトではSSH接続しているユーザーになる。一部の同期フォルダタイプではグループの変更はできないようになっている
  • mount_options(array): mountコマンドに渡す追加のマウントオプションのリスト
  • owner(string): この同期フォルダの所有者になるユーザー。デフォルトではSSH接続しているユーザーになる。一部の同期フォルダタイプではグループの変更はできないようになっている
  • type(string): 同期フォルダのタイプ。もし、指定していなかった場合、Vagrantがその環境に適切な同期フォルダのオプションを自動的に選ぶ。それ以外の場合、nfsなどのタイプを指定できる
  • id(string): ゲストマシンでのこの同期フォルダのマウントポイントの名前。これはゲストマシン上でmountを実行すると表示される名前

有効にする(Enabling)

vagrant upvagrant reloadをしたときに自動的に有効になる


無効にする(Disabling)

disabledオプションを追加することで同期フォルダを無効にできる

Vagrant.configure("2") do |config|
  config.vm.synced_folder "src/", "/srv/website", disabled: true
end

デフォルトの/vagrantフォルダの共有を無効にする場合には次のようにする

config.cm.synced_folder ".", "/vagrant", disabled: true


グループ/所有者を変更する(Modifying the Owner/Group)

デフォルトで、Vagrantはグループ/所有者がSSHユーザーに設定された同期フォルダをマウントします。場合によっては、グループと所有者が異なるフォルダをマウントするほうが良いときもある。

config.vm.synced_folder "src/", "srv/website",
  owner: "root", group: "root"

NOTE
mount_optionsで定義された所有者IDとグループIDはownergroupの設定値よりも優先される

例として、次のように設定する

config.vm.synced_folder ".", "/vagrant", owner: "vagrant",
  group: "vagrant", mount_options: ["uid=1234", "gid=1234"]

同期フォルダの所有者は1234というユーザーID、グループは1234というグループIDでマウントされている。ownergroupは無視されている。


シンボリックリンク(Symbolic Links)

シンボリックリンクをサポートしていて、同期フォルダの実行とホストとゲスト間の組み合わせは矛盾していない。

Vagrantはいろいろなハイパーバイザー(VirtualBoxなど)を設定することによってシンボリックリンクが使えるようになるようにしようとしているが、ホストとゲストの組み合わせによっては動作しないかも。

これによって、シンボリックリンクに依存している開発環境には影響を与えてしまう。

もし、これが重要であれば、すべてのホストとゲスト間でテストをすることをおすすめする。


参考文献

Basic Usage - Synced Folders - Vagrant by HashiCorp


目次