環境
- Windows10 pro
- Virtualbox Version 6.1.10
- Vagrant 2.2.9
- Homestead v10.12.0
経緯
vagrant up
にてHomestead環境を作成し、以下のようにフォルダをマップした。
folders:
- map: C:\Users\user_name\Documents\project_folder\
to: /home/vagrant/code
/
のエンドポイントにブラウザアクセスするとページが表示され、Homestead上でLaravelのアプリケーションは正常に動作している状態。
発生したエラー
phpunit ./tests/
を実行すると下記のようなエラーが発生した。
vagrant@homestead:~/code$ phpunit ./tests/Unit/ExampleTest.php
/usr/bin/env: ‘sh\r’: No such file or directory
原因と解決方法
vendor/
以下のファイルが "CRLF" の改行コードになっていたのが原因だった。
以下コマンドを発行し、vendor/
含むコンテンツの改行コードをすべて "CRLF" から "LF" に置き換えた。
find ./project_folder/ | grep -v 'node_modules' | xargs dos2unix
確認していないので断言はできないが、おそらく vendor/
以下のファイルをすべて削除し、再度Homestead上で composer install
を実行してpackageを再インストールすれば、同様に問題は解決すると思う。DOSフォーマットでインストールしてくれるはずなので。
dos2unix
での置換は時間がかかったので、以下をおすすめする。
rm -rf vendor/
composer install
経緯としては、
- powershell等で事前に
composer install
してvendor/
を作成した -
vendor/
以下パッケージファイルがDOSフォーマットで生成された - 生成された
vendor/
を含むフォルダをマップした - Homestead環境上で、
vendor/bin/phpunit
を実行した - 改行コードが "LF" でないことが原因でエラーが発生した
というところだと思う。
学び
- windows側で
composer install
すると、パッケージファイルのファイルフォーマットはDOSフォーマットになる - 仮想環境のLinux上で開発をする予定であれば、
composer install
は仮想環境のLinux上で実行したほうがよさそう