・参考サイト:
- https://laracasts.com/discuss/channels/laravel/laravel-sail-error-on-up-error-decoding-ports-invalid-hostport-8080
- https://vim.blue/vim-set-fileformat/
- https://emacsdocs.org/docs/emacs/File-Name-Coding
【これを書くに至った経緯】
Laravel Sailを立ち上げようとした際、以下のエラーメッセージが表示されました。
./.env: line 7: $'\r': command not found
./.env: line 11: $'\r': command not found
./.env: line 18: $'\r': command not found
./.env: line 25: $'\r': command not found
invalid hostPort: 8080
invalid hostPort: 8080
sail up
が実行できず少々ハマったのでまとめてみました。
【結論から言うと】
エラー内容から、.env ファイル内の改行コードに問題があることが示唆されていました。具体的には $'\r' というエラーは、Windowsで使用される CRLF 改行コードの影響で発生していました。
WSL上のAlmaLinuxは、Linuxと同様に改行コードとして LF(ラインフィード)を期待します。しかし、Windowsではデフォルトで CRLF(キャリッジリターン + ラインフィード)が使用されているため、.env ファイルがWindows環境で作成された場合、Linux環境では余分な \r(キャリッジリターン)が含まれてしまいます。
その結果、Linux環境でシェルスクリプトや設定ファイルを読み込む際にエラーが発生します。WSLやDockerもこれに該当し、.env ファイルの改行コードが原因でエラーが発生していました。
【解決策】
この問題を解決するには、.env
ファイルの改行コードを CRLF
から LF
に変更する必要があります。以下の手順で解決しました。
1. .env
ファイルの改行コードを変更
Visual Studio Code (VSCode) での手順
-
.env
ファイルを VSCode で開きます。 - 画面右下に「CRLF」と表示されている箇所をクリックします。
- 表示されたオプションの中から「LF」を選択します。
-
.env
ファイルを保存します。
Vim での手順
-
.env
ファイルを Vim で開きます。 - 次のコマンドを実行して、改行コードを
LF
に変更します。:set fileformat=unix
- 以下のコマンドでファイルを保存し、Vimを終了します。
:wq
Emacs での手順
-
.env
ファイルを Emacs で開きます。 - 次のコマンドを実行して、改行コードを
LF
に変更します。C-x RET f unix
- 以下のコマンドでファイルを保存します。
C-x C-s
2. Sailの再起動
改行コードを変更した後、再度 sail up を実行します。これで、改行コードの変更が適用され、Linux環境でも .env ファイルが正しく認識されます。