7
8

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 1 year has passed since last update.

WindowsでLaravel Sail 環境構築【Laravel9】

Last updated at Posted at 2022-09-25

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デフォルト画面が表示されるはず。
cap.png

エイリアスを登録する

これも 公式 に書いてある内容。
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の内容については下記の記事にも書かせて頂いてます。

7
8
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
7
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?