vagrant において、明示的に VirtualBox の機能(vboxsf)を使いフォルダを同期するには、`config.vm.synced_folder ".", "/vagrant", type: "virtualbox"` のように Vagrantfile に設定するとよい

# 問題

* **元々の要件: 気軽に立ち上げて、設定を共有できる debian の仮想マシンがほしい**
    * `debian` での出力ファイル、ログ等を、ホストの `Windows` で受け取りたい
* `vagrant` にて [debian/jessie64 の box](https://atlas.hashicorp.com/debian/boxes/jessie64) 利用する
    * 当box は `vboxsf` ではなく `rsync` での同期が標準である
        * Windows 環境では `rsync` が簡単に導入できない
            * `choco install rsync` で導入できる `rsync` (cwRsync free版?)は cygwin 版であり、追加の設定が必要。
            * 一緒に `ssh.exe` が導入されてしまうのも気持ち悪い
        * × `rsync` での同期は 、[「ホスト → ゲスト方向のみ」](https://github.com/mitchellh/vagrant/issues/3062)
        * × `smb` での同期は、管理者権限が必要なので避けたい
        * `vboxsf` で同期できればいい 
    * `vagrant up` すれば即環境が用意できるという要件を満たせない

# 解決策

`Vagrantfile` にて、明示的に synced_folder に対し `type: "virtualbox"` 指定するとよい。


# 具体的な手順と確認方法

1. `vboxsf` を使えるようにするため、以下のように `vagrant-vbguest` プラグインを導入する。
    
    ホストOSにて：

    ```bash
    # インストール
    > vagrant plugin install vagrant-vbguest

    # 確認
    > vagrant plugin list
    :
    vagrant-vbguest (0.11.0)
    :
    ```

    ※ 次回の `vagrant up` 時に自動で `vboxsf` が使えるようになるはず。

2.  `Vagrantfile` にて、明示的に synced_folder に対し `type: "virtualbox"` 指定をする。

    例: ゲストの `/vagrant` を同期させる場合(デフォルト設定の上書き)

    ```diff
    diff --git a/Vagrantfile b/Vagrantfile
    index xxxxxx..xxxxxx 100644
    --- a/Vagrantfile
    +++ b/Vagrantfile
    @@ -38,6 +38,7 @@ Vagrant.configure(2) do |config|
       # the path on the guest to mount the folder. And the optional third
       # argument is a set of non-required options.
       # config.vm.synced_folder "../data", "/vagrant_data"
    +  config.vm.synced_folder ".", "/vagrant", type: "virtualbox"
    
       # Provider-specific configuration so you can fine-tune various
       # backing providers for Vagrant. These expose provider-specific options.
    ```

3.  仮想マシンを起動するために、 `vagrant up` ( 又は `vagrant reload`) する
4. ゲストOS から同期用ディレクトリにファイルを作成し、同期できているか確認する
    
    ゲストOSにて:

    ```
    $ mount | grep vagrant
    none on /vagrant type vboxsf (rw,nodev,relatime)
    $ echo "foo\nbar" >> /vagrant/test.txt
    ```

    ホストOSにて:

    ```
    > cat test.txt
    foo
    bar
    ```

以上。


----

# (以下メモ書き)

関連ソース

* Linux のゲストOS でどうやって vboxsf をマウントしているか。sshなどで、手動で試すときはこれで。https://github.com/mitchellh/vagrant/blob/master/plugins/guests/linux/cap/mount_virtualbox_shared_folder.rb
* やってる部分 https://github.com/mitchellh/vagrant/blob/v1.7.4/plugins/providers/virtualbox/synced_folder.rb
* https://github.com/mitchellh/vagrant/blob/v1.7.4/plugins/synced_folders/rsync/plugin.rb

    * `type: "rsync"` 相当
    * `synced_folder()` 指定で、同期プラグインを追加している

    ```ruby
    synced_folder("rsync", 5) do
      require_relative "synced_folder"
      SyncedFolder
    end
    ```

* https://github.com/mitchellh/vagrant/blob/v1.7.4/lib/vagrant/plugin/v2/plugin.rb#L241-L247
    * 同期フォルダ登録用プラグインAPI 
    
    ```ruby
    def self.synced_folder(name, priority=10, &block)
      components.synced_folders.register(name.to_sym) do
        [block.call, priority]
      end

      nil
    end 
    ```
* https://github.com/mitchellh/vagrant/blob/v1.7.4/plugins/providers/virtualbox/plugin.rb#L22-L25

    * たぶん `type: "virtualbox"`でいけそう。  [ドキュメント](https://docs.vagrantup.com/v2/synced-folders/virtualbox.html) に書いて置いてほしい

    ```ruby
    synced_folder(:virtualbox) do
        require File.expand_path("../synced_folder", __FILE__)
        SyncedFolder
      end
    ```

----

標準で `vagrant init` して生成される `Vagrantfile` が、単純な文字列リテラルに、ダブルクオーテーション(`"`)を利用していて、キモい

vagrant のソースも同様でキモい

----

メモ書きを前にして、「正しい日本語」はなんら権力を持たない。