Laravel Sailで開発環境を構築する方法|DockerでLaravelを始める初心者向け手順
Laravelを勉強していると、コードを書く前に意外と時間を取られるのが「開発環境の構築」です。
PHPをインストールして、Composerを設定して、MySQLを用意して……。 最初の一歩なのに、ここで「あれ、Laravelを勉強したいだけなのに環境構築で止まってしまった」と感じることがあります。
僕自身も開発環境を整えるときは、アプリケーションのコードを書く前から設定項目の多さに少し戸惑います。 旅行でいえば、まだ目的地に到着していないのに、空港からホテルまでの乗り換えだけで疲れてしまうような感覚です。
そこで今回は、Laravel SailとDockerを使ったLaravel開発環境の構築を復習していきます。
Laravel Sailを利用すると、ホストOS側にPHPやComposerを細かく設定しなくても、Dockerコンテナを利用してLaravelの開発環境を構築できます。
この記事では、Laravel Sailの基本的な使い方だけでなく、MySQLの設定、マイグレーション、よく使うコマンド、ポート競合など、実際に開発するときに「あれ?」となりやすいポイントまでまとめます。
Laravel Sailとは?DockerでLaravel開発環境を構築できる仕組み
Laravel Sailは、Laravel公式が提供しているDocker開発環境です。
簡単に言えば、Laravelのアプリケーションを動かすために必要なサービスをDockerコンテナとしてまとめ、開発しやすくしてくれる仕組みです。
たとえばLaravelとMySQLを使う場合、LaravelのアプリケーションコンテナとMySQLのコンテナを連携させて開発できます。
この仕組みのありがたいところは、開発環境を自分のパソコンに直接インストールするものと、Docker上で動かすものを分離しやすいことです。
- Laravelの開発環境をDockerで構築できる
- PHPをホストOSに直接インストールしなくても始められる
- MySQLなどのサービスをコンテナとして利用できる
- ArtisanやComposerなどをSail経由で実行できる
- チーム開発で環境をそろえやすい
特にLaravelをこれから学習する人にとって、「PHPやデータベースの環境構築でつまずく前に、Laravelの学習を始めたい」という場合に便利です。
Laravel Sailを使う前に準備するもの
まずはDockerを使える状態にしておきます。
Docker Desktopをインストールする
MacやWindowsを使っている場合は、まずDocker Desktopをインストールして起動しておきます。 Linux環境の場合もDockerが利用できる状態にしておきましょう。
ここで重要なのは、Laravel Sailを起動する前にDocker自体が正常に動作していることです。
Docker Desktopを起動していない状態でSailを実行すると、Laravelの問題なのかDockerの問題なのか分からなくなります。
まずDockerが起動していることを確認してから、Laravelの環境構築に進むのがおすすめです。
WindowsではWSL2にも注意
Windowsで開発する場合は、WSL2を利用する構成が一般的です。
特にプロジェクトを置く場所には注意したいところです。
WSL側のファイルシステム、たとえばホームディレクトリ配下にプロジェクトを置くほうが、Dockerを利用した開発では扱いやすいケースがあります。
一方で、WSLからWindows側の/mnt/c/配下にあるファイルを頻繁に操作すると、環境によってはファイルアクセスが遅くなり、開発時のストレスにつながることがあります。
Laravelのコードを書いているだけなのに、保存してから反映されるまで妙に時間がかかる。 そんなときは、プロジェクトの保存場所も確認してみるとよいでしょう。
Laravel Sailで開発環境を構築する方法
ここから実際にLaravelプロジェクトを作成します。
方法1:curlを使ってLaravelプロジェクトを作成する
Laravel Sailを利用して新しくLaravelプロジェクトを作る方法のひとつが、Laravelのビルド用URLをcurlで実行する方法です。
curl -s "https://laravel.build/example-app" | bash
このコマンドを実行すると、example-appという名前のLaravelプロジェクトを作成できます。
ここで少し便利なのが、必要なサービスを指定できることです。
たとえばMySQL、Redis、Mailpitなどを利用する場合は次のようにします。
curl -s "https://laravel.build/example-app?with=mysql,redis,mailpit" | bash
最初は「Redisって何だろう?」「Mailpitは何に使うの?」となるかもしれません。
僕もLaravelの学習を始めた頃は、サービス名を見ただけでは役割がすぐに頭に浮かびませんでした。
ただ、最初からすべてを理解する必要はありません。 まずLaravelが起動するところまで進み、必要になったサービスを後から覚えていくほうが学習は進めやすいです。
Laravel Sailを起動する
プロジェクトの作成が完了したら、プロジェクトディレクトリへ移動します。
cd example-app
./vendor/bin/sail up -d
これでLaravel Sailをバックグラウンドで起動します。
ブラウザから以下へアクセスします。
http://localhost
Laravelの画面が表示されれば、ひとまず開発環境の構築は成功です。
この瞬間は地味ですが、個人的には結構うれしいポイントです。
ターミナルにいくつかコマンドを入力して、ブラウザを開く。 そしてLaravelの画面が表示される。
「ちゃんと自分の開発環境が動いている」と確認できると、ここから先の学習にも入りやすくなります。
Composerを使ってLaravel Sailを構築する方法
LaravelプロジェクトをComposerから作成する方法もあります。
すでにホストOS側にPHPとComposerを用意している場合はこちらの方法も利用できます。
composer create-project laravel/laravel example-app
cd example-app
既存のLaravelプロジェクトにSailを追加する場合は、Laravel Sailを開発用依存関係として追加します。
composer require laravel/sail --dev
php artisan sail:install
php artisan sail:installを実行すると、利用するサービスを選択できます。
MySQLやRedisなど、プロジェクトで必要になるサービスを選択していきます。
その後、Sailを起動します。
./vendor/bin/sail up -d
Laravel Sailのコマンドを簡単にするエイリアス設定
Sailを使い始めると、少し気になるのがコマンドの長さです。
毎回、
./vendor/bin/sail
と入力するのは、正直ちょっと面倒です。
そこでsailコマンドのエイリアスを設定すると便利です。
alias sail='sh $([ -f sail ] && echo sail || echo vendor/bin/sail)'
これで、
sail up -d
sail artisan migrate
sail test
のように短く書けるようになります。
さらに、~/.bashrcや~/.zshrcなどのシェル設定ファイルに登録しておけば、ターミナルを開くたびに設定し直す必要もありません。
Laravel Sailの.envでMySQLを設定する
Laravel開発では、データベース設定も重要です。
MySQLを利用する場合、.envファイルにはデータベース接続情報を設定します。
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=example_app
DB_USERNAME=sail
DB_PASSWORD=password
ここでLaravel初心者が特に覚えておきたいのがDB_HOSTです。
Laravel SailのDB_HOSTはlocalhostではなくサービス名
SailでMySQLコンテナを利用する場合、DB_HOSTにはmysqlというサービス名を指定します。
DB_HOST=mysql
「MySQLが自分のパソコンで動いているならlocalhostじゃないの?」と考えたくなります。
しかし、Dockerではコンテナ同士がネットワーク上で通信します。 そのため、LaravelコンテナからMySQLコンテナへ接続するときには、Docker Compose上のサービス名を利用する構成になります。
この違いは、Docker初心者がかなり混乱しやすい部分です。
localhostとサービス名の違いを理解しておくと、Laravel Sailだけでなく、Dockerを使った他の開発環境でも役立ちます。
Laravelマイグレーションを実行する
データベース設定ができたら、次に確認したいのがマイグレーションです。
Laravelでは、データベースのテーブル構造を管理するためにマイグレーションを利用します。
たとえばユーザー情報を保存するusersテーブルなどを作る場合、マイグレーションファイルにテーブル構造を定義していきます。
Sailを利用してマイグレーションを実行する場合は、次のコマンドです。
sail artisan migrate
これでLaravelのマイグレーションが実行されます。
ここまで来ると、
- Dockerが動いている
- Laravel Sailが起動している
- MySQLコンテナが動いている
- .envのデータベース設定ができている
- LaravelからMySQLへ接続できている
- マイグレーションを実行できる
という、Laravelアプリケーション開発の土台が整ってきます。
Laravel Sailでよく使うコマンド一覧
実際にLaravelを学習していると、毎回調べたくなるコマンドが出てきます。
最初はすべて覚えようとせず、よく使うものから少しずつ身につけていくのがおすすめです。
| 目的 | コマンド |
|---|---|
| Sailを起動 | sail up -d |
| Sailを停止 | sail down |
| マイグレーション | sail artisan migrate |
| Composer | sail composer require パッケージ名 |
| npmインストール | sail npm install |
| Vite起動 | sail npm run dev |
| テスト | sail test |
| コンテナ内シェル | sail shell |
| MySQL接続 | sail mysql |
まず覚えたいLaravel Sailコマンド
個人的には、最初は次のコマンドを覚えておけば十分です。
sail up -d
sail down
sail artisan migrate
sail shell
開発環境を起動して、作業して、マイグレーションを実行して、必要ならコンテナの中に入る。
この流れを何度か繰り返すと、コマンドも自然に覚えてきます。
Laravel Sailでつまずきやすいポイント
ポート80番や3306番が使われている
Laravel Sailを起動したときに、ポートがすでに別のアプリケーションで使われているとエラーになる場合があります。
たとえばWebサーバーで80番、MySQLで3306番などが競合するケースです。
その場合は.envでホスト側のポートを変更する方法があります。
APP_PORT=8080
FORWARD_DB_PORT=3307
このように変更すると、ホスト側で利用するポートをずらすことができます。
「Laravelが壊れた!」と思って焦る前に、ポート競合を疑ってみると意外とあっさり解決することがあります。
LinuxやWSLで権限エラーが発生する
LinuxやWSL環境では、ファイルの所有者や権限が原因でエラーになることがあります。
その場合はプロジェクトの所有者を確認してみましょう。
sudo chown -R $USER:$USER .
ただし、権限コマンドは便利な反面、意味を理解せずに実行すると別の問題を起こすこともあります。
「なぜ権限エラーになっているのか」を確認したうえで利用することが大切です。
サービスを変更したのに反映されない
Sailの設定を変更したあと、コンテナの再構築が必要になるケースがあります。
その場合は、
sail build --no-cache
sail up -d
のようにイメージを再ビルドしてから起動します。
設定を変更したのに何も変わらないときは、古いコンテナやイメージが残っていないか確認してみるとよいでしょう。
Laravel Sailの初回起動が遅い
初回起動時はDockerイメージの取得やビルドが行われるため、時間がかかることがあります。
ターミナルを見ながら、
「まだ終わらない……。失敗したのかな?」
と不安になることもあります。
しかし、初回は数分程度かかる場合があります。
一度イメージが用意されれば、次回以降は初回よりスムーズになることが多いので、まずは少し待ってみましょう。
Laravel Sailで開発環境を作るときのチェックリスト
最後に、Laravel Sailを構築するときのポイントをまとめます。
- Docker Desktopが起動しているか確認する
- WindowsではWSL2の利用環境を確認する
- プロジェクトの保存場所にも注意する
- Laravelプロジェクトを作成する
- Sailを起動する
- localhostでLaravelの画面を確認する
- .envのDB設定を確認する
- DB_HOSTがDockerのサービス名になっているか確認する
- マイグレーションを実行する
- ポート競合がある場合は.envで変更する
- 設定変更後は必要に応じて再ビルドする
Laravel Sailを使って開発環境構築を復習してみた
今回あらためてLaravel Sailの環境構築を整理してみると、Laravelの学習では「コードを書くこと」だけではなく、開発環境そのものを理解することも重要だと感じました。
Docker、Laravel Sail、MySQL、.env、マイグレーション。
最初はそれぞれ別々の知識に見えます。
でも実際には、
Dockerで環境を作る → SailでLaravelを動かす → .envでデータベースを設定する → マイグレーションでテーブルを作る
という一本の流れになっています。
旅行でも、飛行機、ホテル、交通機関、地図を別々に考えているようで、最終的には「目的地まで移動する」という一つの流れにつながっています。
Laravelの開発も同じで、個々のコマンドを丸暗記するより、「このコマンドは何のために使うのか」を理解したほうが記憶に残ります。
次のステップでは、Laravelのルーティング、Bladeによる画面表示、Eloquentによるデータ操作、そしてマイグレーションを組み合わせて、実際に小さなアプリケーションを作っていくと理解がさらに深まりそうです。
環境構築で止まらず、ここから一つずつコードを書いていきたいと思います。







0 件のコメント:
コメントを投稿