はじめに
本記事は、WSL2 + Docker + Laravel Sailで構築済みのLaravel 10環境を、開発に使える状態へセットアップする手順をまとめた記事です。
Laravel Sail では、先にプロジェクトを生成して動作確認を済ませてから Git 管理を開始するのが自然な流れです。先に GitHub で空リポジトリを作ってしまうと、composer create-project 実行時にディレクトリが空でないためエラーになったり、README.md が Laravel 標準ファイルで上書きされたりすることがあります。
実務でも、自分で新規プロジェクトを作る場合は「動く最小構成を作ってから Git 管理開始」の流れが一般的です。ただし、会社側ですでに空リポジトリが用意されている場合は、その指示に従ってください。
Laravel + Sail の初期動作確認までは Git 管理前に行い、その後は各フェーズが終わるたびにコミットしながら進めます。
対象読者
- Laravel 初学者・入門者
- WSL2 + Docker Desktop 環境がすでに整っている方
- Breeze・静的解析ツールも一緒に入れたい方
前提環境
| 項目 | 内容 |
|---|---|
| OS | Windows 11 |
| シェル | WSL2(Ubuntu) |
| コンテナ | Docker Desktop(Windows にインストール済み) |
| PHP | PHP 8.2(Sail コンテナ内) |
| Laravel | 10.x |
注意:WSL2 側に Composer・PHP は不要です。すべて Docker コンテナ内で実行します。
全体フロー
[1] Laravel 10 + Sail環境の確認・Git管理準備
↓ .env ポート設定 → Sail 起動 → 動作確認
↓ PHP バージョン固定
↓ .gitignore 確認 → README.md 整備
[2] Git 管理開始・GitHub へ初回 push
↓ git init → 初回コミット → GitHub 空リポジトリ作成 → push
[3] phpMyAdmin 追加
↓ コミット
[4] Laravel Breeze インストール
↓ コミット
[5] ロケール・タイムゾーン設定
↓ コミット
[6] Breeze 日本語化(breezejp)
↓ コミット
[7] Laravel IDE Helper 導入
↓ コミット
[8] Larastan(PHPStan)導入
↓ コミット
[9] 最終確認
1. Laravel 10 インストール
Laravel 10とSailのインストール手順は、関連記事を参照してください。
参考:WSL + Docker + Laravel SailでLaravel10環境を構築する方法(Composerコンテナ使用)
本記事では、次の状態から作業を開始します。
- Laravel 10プロジェクト作成済み
- Sail導入済み
- MySQLコンテナ起動済み
- 初期マイグレーション実行済み
- TOP画面確認済み
- Laravel・PHPバージョン確認済み
1-1. .gitignore の確認
Laravel が生成する .gitignore に、以下が含まれていることを確認します:
grep -E "^/vendor|^node_modules|^\.env$" .gitignore
/vendor
node_modules
.env
これらは Git 管理対象外になっています。.env はパスワードやAPIキーを含むため、コミットしてはいけません。
1-2. README.md の整備
Laravel が生成する README.md は Laravel のデフォルト説明文です。
ポートフォリオや学習記録として使う場合は、自分のプロジェクト用に書き換えておきます:
# laravel10-project
Laravel 10 + Sail を使った学習・開発用プロジェクトです。
## 環境
- PHP 8.2
- Laravel 10.x
- MySQL 8.x
- Laravel Sail(Docker)
## 起動方法
./vendor/bin/sail up -d
## アクセス先
| サービス | URL |
|---|---|
| Laravel | http://localhost:8080 |
| phpMyAdmin | http://localhost:8083 |
1-3. Sail エイリアス設定(任意)
echo "alias sail='./vendor/bin/sail'" >> ~/.bashrc
source ~/.bashrc
以降のコマンドは sail として記載します。エイリアスを設定しない場合は ./vendor/bin/sail に読み替えてください。
2. Git 管理開始・GitHub へ初回 push
参考:Laravel 10 + Laravel Sail 初期環境をGitHub privateリポジトリに初回pushする手順
Laravel + Sail の動作確認が済んでから Git 管理を開始します。
この順序にすることで、動作する最小構成が初回コミットとして残り、何か問題が起きたときの安全な戻り先になります。
参考記事では private リポジトリを例にしていますが、本記事では用途に応じて Public / Private を選択する前提で進めます。
2-1. Git 初期化と初回コミット
Laravel インストール時点で .gitignore はすでに存在します。
cd ~/projects/laravel10-project
git init
git add .
git commit -m "chore: Laravel10 + Sail環境を構築"
2-2. GitHub で空リポジトリを作成
GitHub にアクセスし、New repository からリポジトリを作成します。
-
Repository name:任意(例:
laravel10-project) -
Visibility:用途に応じて選択
- 学習用・業務用・非公開コード:Private
- ポートフォリオとして公開したい場合:Public
- README / .gitignore / license:追加しない(既存コードを push するため)
注意:GitHub 側で README や .gitignore を追加すると、ローカルの初回 push 時にコンフリクトが発生します。必ず空の状態でリポジトリを作成してください。
2-3. リモート接続と初回 push
git branch -M main
git remote add origin git@github.com:<ユーザー名>/<リポジトリ名>.git
git push -u origin main
SSH 接続がまだの場合は先に SSH キーを GitHub に登録してください。
HTTPS 接続の場合はhttps://github.com/<ユーザー名>/<リポジトリ名>.gitを使用します。
2-4. push 確認
GitHub のリポジトリページをブラウザで開き、ファイルが反映されていれば完了です。
3. phpMyAdmin 追加
関連記事:【Laravel 10】Laravel SailにphpMyAdminを追加する方法とポート競合・権限エラーの解決
Laravel Sail の MySQL をブラウザから確認できるように、phpMyAdmin を追加します。
本記事では初期セットアップ全体の流れを優先するため、phpMyAdmin 追加の詳細手順は関連記事にまとめています。
3-1. .env への追記
grep -q '^PHPMYADMIN_PORT=' .env \
&& sed -i 's/^PHPMYADMIN_PORT=.*/PHPMYADMIN_PORT=8083/' .env \
|| echo 'PHPMYADMIN_PORT=8083' >> .env
grep -q '^PHPMYADMIN_PORT=' .env.example \
&& sed -i 's/^PHPMYADMIN_PORT=.*/PHPMYADMIN_PORT=8083/' .env.example \
|| echo 'PHPMYADMIN_PORT=8083' >> .env.example
ポート番号は自分の環境に合わせて変更してください。既存の LAMP 環境や別プロジェクトと同時に使う場合は、ポート競合に注意します。
3-2. compose.yaml への追加
compose.yaml の services: 配下に phpmyadmin を追加します:
phpmyadmin:
image: phpmyadmin:latest
ports:
- '${PHPMYADMIN_PORT:-8083}:80'
environment:
PMA_HOST: mysql
PMA_PORT: 3306
depends_on:
- mysql
networks:
- sail
${PHPMYADMIN_PORT:-8083} は「変数が未設定の場合はデフォルト値 8083 を使う」という意味です。
3-3. コンテナ再起動と確認
sail down
sail up -d
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
正常であれば以下のように表示されます:
NAMES STATUS PORTS
laravel10-project-laravel.test-1 Up 0.0.0.0:8080->80/tcp
laravel10-project-phpmyadmin-1 Up 0.0.0.0:8083->80/tcp
laravel10-project-mysql-1 Up 0.0.0.0:3307->3306/tcp
3-4. 動作確認
ブラウザで http://localhost:8083 にアクセスし、.env の DB_USERNAME / DB_PASSWORD でログインできれば成功です。
Sail 初期値の場合は、ユーザー名
sail、パスワードpasswordでログインできます。
ポート構成(最終)
| サービス | URL / 接続先 |
|---|---|
| Laravel 本体 | http://localhost:8080 |
| phpMyAdmin | http://localhost:8083 |
| MySQL 外部接続 | localhost:3307 |
コミット
git add .
git commit -m "chore: phpMyAdminを追加"
git push
4. Laravel Breeze インストール
4-1. Breeze パッケージの追加
sail composer require laravel/breeze --dev
4-2. Breeze のセットアップ
本記事では Blade スタックを明示して実行します:
sail artisan breeze:install blade
blade を指定すると、スタック選択の対話なしで Blade スタックが直接インストールされます。
対話形式で選択しながら進めたい場合は、blade を付けずに以下を実行します:
sail artisan breeze:install
その場合は以下を選択します:
Which stack would you like to install?
[0] blade
[1] react
[2] vue
[3] api
> 0
Would you like to install dark mode support? (yes/no)
> no
Would you prefer Pest tests instead of PHPUnit? (yes/no)
> no
学習用途では Blade を推奨します。
4-3. フロントエンドのビルド
breeze:install blade の実行時に npm install まで自動で行われる場合があります。念のため、以下でフロントエンド依存関係の確認とビルドを行います:
sail npm install
sail npm run build
開発中の CSS・JS 変更を即時反映したい場合 は、別ターミナルで以下を起動します:
sail npm run dev本記事では初期セットアップ確認用として
npm run buildを実行しています。
4-4. マイグレーションの確認
sail artisan migrate:status
Ran? 列がすべて Yes であれば OK です。未実行のマイグレーションがあれば実行します:
sail artisan migrate
4-5. 動作確認
http://localhost:8080 にアクセスし、画面右上に Login / Register リンクが表示されれば成功です。
コミット
git add .
git commit -m "feat: Breeze認証機能を追加"
git push
5. ロケール・タイムゾーン設定
config/app.php を編集します:
// config/app.php
'timezone' => 'Asia/Tokyo', // 変更
'locale' => 'ja', // 変更(デフォルト: en)
'fallback_locale' => 'en', // 確認(変更なし)
'faker_locale' => 'ja_JP', // 変更(デフォルト: en_US)
注意:キー名のスペルに気をつけてください。
'local'ではなく'locale''fallback_local'ではなく'fallback_locale''faker_local'ではなく'faker_locale'- 値の代入は
=ではなく=>(PHP 連想配列)
補足:次のステップで実行する
sail artisan breezejpは、Laravel の日本語化に必要な設定や翻訳ファイルを自動で反映します。
ただし、この記事では設定内容を理解しやすくするため、先にtimezone・locale・fallback_locale・faker_localeを手動で確認・設定しています。
設定が反映されているか確認します:
sail artisan tinker
>>> config('app.timezone') // "Asia/Tokyo"
>>> config('app.locale') // "ja"
>>> exit
コミット
git add .
git commit -m "chore: アプリ設定を日本向けに変更"
git push
6. Breeze 日本語化(breezejp)
6-1. 言語ファイルの publish(未実施の場合)
sail artisan lang:publish
6-2. breezejp パッケージのインストール
sail composer require askdkc/breezejp --dev
6-3. 日本語化の実行
sail artisan breezejp
実行すると以下のように表示されます:
Laravel Breeze用に日本語翻訳ファイルを準備します
config/app.phpのlocaleをjaにします
GitHubリポジトリにスターの御協力をお願いします (yes/no) [yes]:
> yes
日本語ファイルのインストールが完了しました!
補足:
sail artisan breezejpにより、日本語翻訳ファイルの生成に加えて、Laravel の日本語化に必要な設定も自動反映されます。
すでにステップ 5 で同じ内容を設定済みの場合でも、同じ値に整うため問題ありません。
lang/ja/ ディレクトリと翻訳ファイルが生成されます。
6-4. 動作確認
http://localhost:8080/login にアクセスし、フォームのラベルや入力例が日本語になっていれば成功です。
コミット
git add .
git commit -m "feat: Breeze日本語化を追加"
git push
7. Laravel IDE Helper 導入
VSCode で Laravel のファサード・モデルの補完を効かせるためのツールです。
7-1. インストール
sail composer require --dev barryvdh/laravel-ide-helper
7-2. ヘルパーファイルの生成
まずはファサード補完用の _ide_helper.php を生成します。モデル補完や PhpStorm メタファイルは必要に応じて生成します。
# ファサード補完用(_ide_helper.php を生成)
sail artisan ide-helper:generate
# モデル補完用(各モデルに @property アノテーションを追加)
sail artisan ide-helper:models --nowrite
# PhpStorm メタファイル生成(VSCode でも有効)
sail artisan ide-helper:meta
--nowriteオプションを付けると、モデルファイルに直接書き込まず別ファイル(_ide_helper_models.php)に出力されます。ファイルを汚したくない場合に使います。
7-3. .gitignore への追加
生成ファイルはコミット不要なため .gitignore に追加します:
# .gitignore に追加
.phpstorm.meta.php
_ide_helper.php
_ide_helper_models.php
7-4. composer.json へのスクリプト登録(任意)
composer.json の scripts セクションに追加すると composer ide-helper で一括実行できます:
"scripts": {
"ide-helper": [
"@php artisan ide-helper:generate",
"@php artisan ide-helper:meta",
"@php artisan ide-helper:models --nowrite"
]
}
コミット
git add .
git commit -m "chore: Laravel IDE Helperを導入"
git push
8. Larastan(PHPStan)導入
Laravel 向けに最適化された静的解析ツールです。バグを実行前に検出できます。
8-1. インストール
sail composer require --dev "larastan/larastan:^2.0"
注意:以前は
nunomaduro/larastanというパッケージ名でしたが、現在は abandoned(非推奨) です。
Laravel 10 にはlarastan/larastanの 2 系(^2.0)を使用してください。
3 系は Laravel 11 系以降向けのため、Laravel 10 では使用しません。
8-2. 設定ファイルの作成
プロジェクトルートに phpstan.neon を作成します:
# phpstan.neon
includes:
- vendor/larastan/larastan/extension.neon
parameters:
paths:
- app
- routes
- tests
# レベル: 0(最も緩い)〜 9(最も厳しい)
# 初期導入時は level 1 から始め、実装が進むにつれて段階的に上げる
# 例: level 1 → 2 → 3 → 5 と上げていく
# 最初から高レベルにすると学習初期やBreeze導入直後に負担が大きくなる
level: 1
注意:古い記事では
vendor/nunomaduro/larastan/extension.neonと書かれている場合がありますが、
現在のパッケージ名に合わせてvendor/larastan/larastan/extension.neonを使用してください。
8-3. 静的解析の実行
./vendor/bin/phpstan analyse
エラーがない場合:
[OK] No errors
エラーがある場合はファイルパス・行番号・内容が表示されるので順に修正します。
メモリ不足エラーが出る場合:
./vendor/bin/phpstan analyse --memory-limit=2G
8-4. .gitignore への追加
# .gitignore に追加
/phpstan-result-cache.php
コミット
git add .
git commit -m "chore: Larastanを導入"
git push
9. 最終確認
すべてのセットアップが完了したら、以下のコマンドでまとめて確認します。
git status
sail ps
sail test
sail npm run build
./vendor/bin/phpstan analyse
各コマンドの確認内容は以下です。
| コマンド | 確認内容 |
|---|---|
git status |
未コミットの変更が残っていないか確認 |
sail ps |
Laravel / MySQL / phpMyAdmin コンテナの起動状態を確認 |
sail test |
PHPUnit テストが通るか確認 |
sail npm run build |
Vite のフロントエンドビルドが成功するか確認 |
./vendor/bin/phpstan analyse |
Larastan / PHPStan の静的解析でエラーがないか確認 |
git status は、コミット漏れや不要な差分が残っていないかを見るために実行します。nothing to commit, working tree clean と表示されれば、Git 管理上はきれいな状態です。
sail ps は、Docker コンテナの起動状態を確認するコマンドです。Laravel 本体・MySQL・phpMyAdmin が Up になっていて、MySQL が healthy であれば問題ありません。
sail test は、Laravel 標準の PHPUnit テストを実行します。Breeze 導入後は認証関連のテストも追加されるため、ログイン・登録・プロフィール周りが最低限壊れていないか確認できます。
sail npm run build は、Tailwind CSS や JavaScript を Vite でビルドできるか確認します。画面表示に関わる CSS・JS の構成が壊れていないかを見るために実行します。
./vendor/bin/phpstan analyse は、Larastan(PHPStan)による静的解析です。実行前に型の不整合や Laravel コード上の問題を検出するために使います。
期待結果
| 確認項目 | 期待値 |
|---|---|
git status |
nothing to commit, working tree clean |
| Laravel |
http://localhost:8080 で表示 OK |
| phpMyAdmin |
http://localhost:8083 で表示 OK |
| MySQL | STATUS が healthy
|
sail test(PHPUnit) |
テストがすべて passed |
sail npm run build(Vite) |
ビルド成功 |
./vendor/bin/phpstan analyse |
No errors |
完成後のディレクトリ構成(主要ファイル)
laravel10-project/
├── app/
├── config/
│ └── app.php ← timezone・locale・faker_locale 設定済み
├── lang/
│ ├── en/
│ └── ja/ ← breezejp が生成した日本語ファイル
├── phpstan.neon ← Larastan 設定
├── README.md ← プロジェクト用に整備済み
├── _ide_helper.php ← IDE Helper(.gitignore 対象)
├── _ide_helper_models.php← IDE Helper(.gitignore 対象)
├── .phpstorm.meta.php ← IDE Helper(.gitignore 対象)
└── vendor/
Git コミット履歴まとめ
chore: Laravel10 + Sail環境を構築
chore: phpMyAdminを追加
feat: Breeze認証機能を追加
chore: アプリ設定を日本向けに変更
feat: Breeze日本語化を追加
chore: Laravel IDE Helperを導入
chore: Larastanを導入
トラブルシューティング
Connection refused エラーが出る
SQLSTATE[HY000] [2002] Connection refused
MySQL コンテナがまだ起動中です。しばらく待ってから再実行してください。
sail ps # STATUS が healthy になるまで待つ
sail artisan migrate
PHP バージョンが意図しないものになっている
sail php -v # コンテナ内の PHP バージョン確認
エイリアス未設定の場合は ./vendor/bin/sail php -v で実行してください。
PHP 8.2 以外が表示される場合は compose.yaml の build セクションを確認します:
build:
context: './vendor/laravel/sail/runtimes/8.2'
dockerfile: Dockerfile
image: 'sail-8.2/app'
修正後はコンテナを再ビルドします:
sail down
sail build --no-cache
sail up -d
sail php -v
sail コマンドが見つからない
エイリアスが設定されているか確認します:
grep 'sail' ~/.bashrc
設定がなければ追加して再読み込みします:
echo "alias sail='./vendor/bin/sail'" >> ~/.bashrc
source ~/.bashrc
Larastan でメモリ不足になる
./vendor/bin/phpstan analyse --memory-limit=2G
WWWUSER / WWWGROUP の警告が出る
The "WWWGROUP" variable is not set. Defaulting to a blank string.
.env に追記します:
echo 'WWWUSER=1000' >> .env
echo 'WWWGROUP=1000' >> .env
すでに同じキーが存在する場合は、重複して追記せず既存行を書き換えてください。
値は id -u / id -g で確認した自分の UID/GID を設定してください。
まとめ
| ステップ | 内容 | 完了確認 |
|---|---|---|
| 1 | Laravel 10 + Sail インストール・初期設定 |
http://localhost:8080 でトップ画面表示 |
| 2 | Git 管理開始・GitHub へ初回 push | リポジトリにファイルが反映 |
| 3 | phpMyAdmin 追加 |
http://localhost:8083 で MySQL に接続できる |
| 4 | Breeze インストール | Login / Register リンクが出る |
| 5 | ロケール・タイムゾーン設定 |
config('app.locale') が ja
|
| 6 | Breeze 日本語化 | ログイン画面が日本語 |
| 7 | IDE Helper 導入 | 補完ファイル生成済み |
| 8 | Larastan 導入 |
No errors が出る |
| 9 | 最終確認 | 全項目が期待値どおり |
各ステップが完了するごとにコミット & push することで、どの段階でも安全に戻れる状態を保てます。