22
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

VirtualBoxのフォルダ共有を使うときの注意点

Posted at

#開発環境の変化
開発環境の変化と多様化は目覚ましいです。新しいところだとDockerが流行ったり、伝統的なところでは、開発サーバ上でviで編集したり、FTPアップロードしたりしているチームもまだあるかもしれません。

gitなどのバージョン管理を導入しているチームでは、個別の環境を構築した方が便利だったりするケースもあるので、VMWareやVirtualBoxを使って開発する、という方も多いのでは無いでしょうか?

#開発に便利なVirtualBoxのSharedFolder(共有ファイル)

VirtualBoxには共有フォルダという機能があり、
ホストOS(Windows/Mac)のファイルシステムをVM上にマウントする事ができます。

開発をしていると、
① RemoteのファイルをLocalにマウント(sshfs)、
② LocalのファイルをRemoteにマウント(smbfs, vboxfs)、
③ Remoteのファイルを直接編集するか(vim)、

の選択肢があるのですが、
eclipseなどのIDEを使って開発している場合は③はできませんし、
①②のそれぞれの方法にもデメリットのトレードオフが発生してしまいます。

① IDEの処理が全体的に遅くなる
② アプリケーションの応答速度が遅くなる

#VirtualBoxのSharedFolderでは②のデメリットが少しだけマシになる
体感的なところですが、Samba(TCP)などを経由してマウントするよりは、VirtualBox(vboxsf)でマウントする方が、
アクセスが早いように感じます。

と、いうわけでvboxsfを使用して開発しているのですが...

#起きたトラブル

##更新が反映されない!!
phpファイルには問題がなかったのですが、cssや静的なhtmlを編集しても、
反映されないという問題が発生しました。

##CSSの末尾の方におかしなバイナリ値が付与されている気配に注意
ChromeのWeb Developer Tool などでCSSを確認すると

Chromeで見たCSSファイル
body{
  background-color : red;
}

.....

のように「.......」が表示されていました。
ファイルの末尾に意味不明なバイナリが追記されているようでした。

##ファイルディスクリプタのキャッシュが原因??
Linux系 OSには、処理高速化のためのページキャッシュが実装されていますが、
これがvboxfsを経由した場合にうまく働かず、古いキャッシュをそのまま返す事があるそうです。

##回避策:Nginx, Apacheの設定を見直そう
この問題を回避するためのは簡単で、
Apacheでは

httpd.com
EnableSendfile Off
nginx.conf
sendfile : off;

としてやればOK。

感想

原因の箇所(vboxfs)と対処方法さえ分かってしまえばあっさりと解消できるのですが、
初めて遭遇した場合はどこにもログが出てくれないので、
なにが起こっているのかさっぱり分からないです。

ちなみに

MacはLinux系OSなので、MAMPやBitNami、HomeBrewなどを使ってPHP開発をする事ができるのですが、
特殊なライブラリを使いたい場合に、そのライブラリがインストールできないと一気に手詰まりになります。
また、そのインストールのノウハウが本番環境へのデプロイに活かされないため、
最悪2度苦しむことになるので、私はMacでの直接開発はなるべく避けるようにしています。

※嵌まったのはlibssh2のインストール...

22
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?