Mastodon (Dev) を Windows7 + Vagrant + VBox でMastodonの開発環境を作成した

# Windows7でMastodonの開発環境を作成した

@abcangさんの『Mastodonの開発環境の構築まとめ』( https://qiita.com/abcang/items/8075ecd20be66a5659ec ) を参考にしましたが、自分の環境だと止まることがいくつかありました。そのため、おもに実行手順になりますが、まとめておきます。

## 概要

事前準備していたもの（説明が省略気味）

* VirtualBoxのインストール
* Mastodonソース類の用意

今回実行したこと

* PowerShellのアップグレード
* Vagrantのインストール
  * Vagrantプラグインのインストール
* hostsの権限設定
* 共有フォルダ設定
  * Vagrantfileの編集
  * シンボリックリンク許可設定

* 起動！ 

## 環境（ソフトウェアバージョン）

* Windows7 SP1 64bit
* Oracle VM VirtualBox 5.2.18
* Vagrant 2.1.5
* Mastodon v2.5.1

## 構成手順

### VirtualBox インストール

VirtualBoxのサイト( https://www.virtualbox.org/ ) からダウンロード、インストールを行っておきます。

### Mastodonソース類の準備

公式リポジトリはこちら。 ( https://github.com/tootsuite/mastodon )
Gitクライアントをいれて、 `git checkout [開発対象ブランチ]`をしておくといいかもしれません。

例としては、Git Bashを使い、

```bash:Git&nbsp;bash
$ git clone https://github.com/tootsuite/mastodon.git dev
$ cd dev
```

などとしておくといいと思います。自分用にforkしてある場合はそちらをclone先にしておくといいと思います。

### PowerShellのアップグレード

@nobb_heroさんの『Vagrant up から進まない！？』( https://qiita.com/nobb_hero/items/3422b37ba2e9e3299680 )を参考にしました。

WMF 5.1 のインストールと構成 | Microsoft Docs( https://docs.microsoft.com/ja-jp/powershell/wmf/5.1/install-configure )より、Windows7 SP1 x64(32bit版の場合はx86)をダウンロードし、解凍します。

PowerShellを管理者権限で実行し、(64bitの場合、間違って(x86)を選択しないようにし)

```cmd:PowerShell
> cd 解凍したディレクトリ
> .\Install-WMF5.1.ps1
```

とします。必要に応じて再起動します。

### Vagrantのインストール

VagrantのDownloadサイト( https://www.vagrantup.com/downloads.html )より、Windows版をダウンロードし、msiを実行します。

#### Vagrant Pluginのインストール(任意)

必須のプラグインはないみたいですが、私の場合は、
hostsファイルの変更をする`vagrant-hostsupdater`と、
VBoxGuestAdditionsのバージョン合わせをしてくれる`vagrant-`をいれました。

`vagrant-winnfsd`もいれましたが、やたらと止まってしまうので今回は抜いておきました。

```cmd:cmd
> vagrant plugin install vagrant-hostsupdater vagrant-vbguest
```

### hostsの権限設定

最終的に関係なかったかもしれませんが、Vagrantを利用するユーザでhostsファイルを変更できるようにしておきます。`vagrant-hostsupdater`を利用しない場合は不要だと思います。

* `C:\Windows\System32\drivers\etc`にある`hosts`ファイルを右クリック、`プロパティ`を開きます。
* `セキュリティ`タブの`グループ名またはユーザ名`の実行ユーザを選択し、`編集`から、`フル コントロール`を許可にします。

### 共有フォルダ設定

『Windowsホストのvagrantでmastodonを動かす』( https://argrath.ub32.org/annex/2017/04/24-01.html )にもある通り、シンボリックリンクが作成できないと動かないみたいなので、作成できるようにします。(記事だと別の方法で回避していたみたいですが、バージョンが違ってこわいので、シンボリックリンク貼れるようにする設定をします)
VirtualBoxの共有フォルダ設定で、VM内にMastodonのソース類を渡していますが、
ホストであるWindowsのファイルシステム上でシンボリックリンクを作成できるようにするには、
いくつか設定が必要になります。
また、mountのオプションも変更しないとエラーが出たので、その設定も行っておきます。(原因はわかっていない)

@tanakachangさんの『Windows 7環境でのVirtualBox（vagrant）の共有フォルダーのトラブル2つ』( https://qiita.com/tanakachang/items/11dab5309b64b4f64119 )を参考にしました。

#### Vagrantfile編集

* mountオプションの変更
* シンボリックリンクを貼れるように

します。適当に略してあるので、該当部分を探して変更してください。

```Vagrantfile:Vagrantfile
(略)
  config.vm.provider :virtualbox do |vb|
    vb.name = "mastodon"
    vb.customize ["modifyvm", :id, "--memory", "2048"]

(中略)
    vb.customize ["modifyvm", :id, "--nictype2", "virtio"]

    # シンボリックリンク設定を追記
    vb.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/vagrant", "1"]

  end

(中略)

  if config.vm.networks.any? { |type, options| type == :private_network }
     # 元の設定はコメントアウトして残してあります。
#    config.vm.synced_folder ".", "/vagrant", type: "nfs", mount_options: ['rw', 'vers=3', 'tcp']
    config.vm.synced_folder ".", "/vagrant", type: "nfs", mount_options: ['dmode=777', 'fmode=777']
  else
    config.vm.synced_folder ".", "/vagrant"
  end

```

設定は以上です。

## 起動

`vagrant up`で起動し、Mastodon自体は`vagrant ssh -c "cd /vagrant && foreman start"`で起動できます。

```cmd:cmd
> vagrant up
> vagrant ssh -c "cd /vagrant && foreman start"
```