アプリなどを開発するブログ

React Native / Swift / Ruby on Railsなどの学習メモ。


Vagrant + Rails + Sublime Textで開発環境をつくる

Vagrantの共有フォルダ機能 ( synced_folder / rsync ) を使って、
Vagrant + Sublime Text で開発できる環境を整えてみた。

仮想環境にあるプロジェクトファイルをローカルPCのSublime Textから編集できるようにするには色々やり方がある。

方法1 : Sublime Text のプラグイン SFTP を使う

Sublime TextのSFTPプラグインは、ファイルの変更を検知して自動でゲストサーバーに都度送信してくれるというもの。

参考記事

これはこれでいいのだが、Vagrantの共有フォルダ機能を使ってできないのかな?と思って調べてました。

方法2 : Vagrantの共有フォルダ機能を使う

Vagrantfileにフォルダを指定してあげればOK。

Vagrantfile
config.vm.synced_folder "./workspace", "/home/vagrant/workspace"
# config.vm.synced_folder <ホスト(Mac) 側のパス> <ゲスト(Vagrant) 側のパス>

デフォルトではVagrantfileのあるホスト側のディレクトリがゲスト側の/vagrant/に同期されている。

参考

Vagrant共有フォルダの罠 — A Day in Serenity (Reloaded) — PHP, FuelPHP, Linux or something

ただし遅い。
そこで、

方法2-2 : nsfを使う

Vagrantfileで nfs オプションを追加してやると、高速になる。これはMacのみ可能な設定。
nsf : Network File System

Vagrantfile
config.vm.synced_folder "../workspace", "/home/vagrant/workspace", nfs: true
参考

http://dev.akinaka.net/2014/01/14/vagrant-synced-folder-nfs-setting

これでOKと思って色々やってたら、ファイルを移動する度にpermission 関連で怒られる。
ゲスト側のディレクトリをマウントしている関係で、permission関連がややこしいらしい。

config.vm.synced_folder の設定オプションで権限を変更することもできる。
vagrantの共有フォルダのアクセス権とグループを設定する | bulblub

しかし調べているとrsyncというもっと簡単に利用できるファイル共有オプションが存在することがわかってこっちを試してみることに。

方法2-3 : rsync を使う

rsync を使うとパーミッションなどの事はあちらでよろしくやってくれるようだ。
動作も高速。

Vagrantfile
config.vm.synced_folder "./workspace", "/home/vagrant/workspace", type: "rsync", rsync__exclude: [".git/", "upload/", "bundle/", "tmp/"]

自動共有させないファイルを rsync__exclude で指定可能。
git、bundle、temp、seedで入れるためのファイルが入っているフォルダなどを指定した。
じゃないと、せっかく仮想環境でseedを回しても、ゲスト側のディレクトリが瞬時にシンクされてファイルが消えてしまう。
また、tmpディレクトリ内のcacheファイルなどもシンクされてしまうとサーバーがエラーをはくので外しておく。

あとは以下コマンドで監視 => 自動シンク

vagrant rsync-auto

あとは注意点として、Gemfileが更新されたらローカルと仮想環境両方でgem install する。
以下が参考記事。

参考

Vagrant Rsync Synced Folder を使って仮想環境内のコードをホスト上のエディタから編集するというお話 | NET BIZ DIV. TECH BLOG

これでvimから開放されるー!嬉しい!