Laravel sail初心者が書いています。
おかしな点などありましたらご指摘いただけると助かります。
環境 :
Windows10 home
Docker Desktop 4.12.0
Laravel 9
Laravel Sailとは
Laravel Sailは、「Dockerを使ったLaravelプロジェクトの開発環境構築や操作等」を、より簡単に行うための仕組み。
事前に必要なもの
WindowsでLaravel sailを使用するためには事前に以下の3つをインストールする必要が有る。
- Docker Desktop
- WSL2
- Ubuntu
以下、大雑把な用語説明です。
Dockerとは
コンテナという仕組みを使って開発環境等の構築・共有が出来るソフト。
Docker Desktopとは
元々Linux用のソフトである「Docker」をWindowsやMacでもGUI付きで使えるようにしたもの。Windowsで使用するためにはDocker Desktopの他にWSL2等も必要。
WSL2とは
Windows上でLinuxを動作させるための実行環境。あくまで実行環境なので、実際にLinuxとして使うためにはUbuntu等のLinuxのディストリビューションも必要。
Ubuntuとは
Linuxのディストリビューション。WSL2をインストールした上でMicroSoft StoreからUbuntu等のLinuxのディストリビューションをインストールすると、アプリケーションを使うような感覚でWindows上でLinuxが使える。
※2023/08.23追記
コマンド1つでWSL2とUbuntuが同時にインストールできるようになってました。
詳しくは以下の公式ページや解説サイト様を参照願います。
Docker Desktopのイントール
Laravel + Laravel Sail インストール
LaravelとLaravel Sailのインストール & 起動は、基本的に2回のコマンド入力だけで出来てしまう。まずは 公式 に書いてあるように下記コマンドを実行するが、この際に注意点が2つある。
curl -s https://laravel.build/任意のプロジェクト名 | bash
注意点1:コマンド入力はWSL2 Linuxで行う
公式 にも書かれているが、コマンドの実行はWSL2上のLinuxディストリビューションで行う必要がある。なので、インストールしておいたUbuntuを立ち上げてそこで実行する。
なお、WindowsのコマンドプロンプトやGit bashを使用した場合は下記のエラーが出る。
bash: line 35: sudo: command not found
35行目にsudoコマンドが有るとのエラー。
sudoコマンドはWindowsのコマンドプロンプトやGit bashでは使用不可。ちなみに、コマンド内のURL https://laravel.build/example-app を直接ブラウザで開くと実行内容が見れるので、エラーメッセージ通り35行目にsudoがあることが確認できる。
注意点2:ディレクトリは /mnt を避ける
Ubuntuに入ってみると /mnt/c
というディレクトリが有るのがわかる。
この /mnt/c
はホストPCのCドライブをマウントしている(Windowsのショートカットフォルダのようなイメージ)。そのため、ファイルの編集がしやすい /mnt/c
以下にLaravelプロジェクトを作成したほうが良いのではないかと思っていた。しかし、この領域にプロジェクトを作成してしまうと、異なるOS同士をデータが行き来することになり、特にLaravel等のファイル数の多いプログラムの場合は動作が重くなってしまう。
なので、 /mnt/c
以下ではなく /home
以下のディレクトリ等で上記のcurl -s https://laravel.build/任意のプロジェクト名 | bash
コマンドを実行したほうが良い。
なお、/home
以下のディレクトリにあるファイルであってもホストPCのExplorerで操作したりエディタで編集したり出来る。そのあたり含めて下記の記事様がわかりやすく説明してくださってます。
コマンド実行
上記の注意点2点を踏まえ、上述したコマンド curl -s https://laravel.build/任意のプロジェクト名 | bash
を実行する。初回だと処理に数分~数十分ほど時間がかかる。実行終了間際にはパスワードの入力を求められる。
Please provide your password so we can make some final adjustments to your application's permissions.
[sudo] password for username:
パスワードを入力しエンター。
問題なく完了したら以下コマンドを実行。
cd 任意のプロジェクト名 && ./vendor/bin/sail up -d
こちらも初回は少し時間がかかる。なお、このコマンド内の./vendor/bin/sail up -d
でdockerのimageやコンテナを作成・起動している。-d
はバックグラウンドで実行するためのオプション。imageやコンテナの設定については、1つ前のコマンドで作成されたプロジェクトフォルダ直下のdocker-compose.ymlに書かれている。
動作確認
コンテナが起動している状態でブラウザで http://localhost/ にアクセスすると下記のようなLaravelデフォルト画面が表示されるはず。
エイリアスを登録する
これも 公式 に書いてある内容。
Laravel Sailのコマンドに関するスクリプトは プロジェクト名/vendor/bin/
内のsailというファイルに書かれているが、dockerやLaravelプロジェクトを操作するのに毎回 ./vendor/bin/sail
を入力するのは面倒なので、「sail」と入力すれば ./vendor/bin/sail
と同じ意味になるようにエイリアス(ショートカットやユーザー辞書のようなもの)を登録する。
.bashrcファイル編集・反映
エイリアスは.bashrcというファイルを編集することで登録できる。Ubuntuでホームディレクトリ /home/ユーザー名
に移動すると.bashrcがあるので nano .bashrc
コマンド等でファイルを開き、最下部等に下記コードを追加し上書き保存する。
alias sail='[ -f sail ] && sh sail || sh vendor/bin/sail'
編集が終わったら下記コマンドを実行して.bashrcの変更をシステムに反映させる。
source ~/.bashrc
反映後はsailコマンドが使えるので、例えばコンテナ起動であれば sail up -d
で実行できる。
docker-compose.ymlを編集する
コンテナの追加や削除を行いたい場合はdocker-compose.ymlを編集する。編集前にsail down
コマンドで一旦コンテナを削除し、編集後にsail up -d
でコンテナを作成し直すと編集内容が反映される。
phpMyAdmin追加
今回はphpMyAdminを追加すため以下の記述を追加した。
phpmyadmin:
image: phpmyadmin/phpmyadmin
ports:
- 8080:80
environment:
MYSQL_USERNAME: '${DB_USERNAME}'
MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
PMA_HOST: mysql
networks:
- sail
コンテナを作成し直した後に http://localhost:8080/ にアクセスするとphpmyadminのログイン画面が表示される。idとパスワードにはenvファイルに記載されている値が設定される。
DB_USERNAME=sail
DB_PASSWORD=password
不要コンテナ削除
また、デフォルトで入っているredisやselenium等のコンテナも今のところ不要なのでコメントアウトにした。なお、この際にservicesの一番上にあるlaravel.test(デフォルト名)内の「depends_on」という項目も適宜修正する必要がある。
depends_on:
- mysql
# - redis
# - meilisearch
- mailhog
# - selenium
depends_onは依存関係を表している。例えば、laravel.testコンテナのdepends_onにmsqlと書いた場合、コンテナの起動順序が mysql → laravel.test となる。
一般的なdocker-compose.ymlの内容については下記の記事にも書かせて頂いてます。