
はじめに
WindowsでLaravelを始める方法の一つが、WSL2のUbuntu上に開発環境を用意する方法です。
この記事では、PHP・ComposerのインストールからLaravelプロジェクトの新規作成、Windowsのブラウザでの起動確認までを紹介します。最後に、仮のデータを使った小さなタスク一覧画面も作成します。
本記事は、Laravel 13とMicrosoftの公式ドキュメントをもとに、WSL2・Ubuntu向けに整理した手順です。掲載している一連の操作はWSL実機では未検証です。インストーラーの質問や出力は、実行時のバージョンによって異なる場合があります。
今回構築するLaravelの開発環境
本記事で想定する構成は次のとおりです。
| 項目 | 構成 |
|---|---|
| Windows | Windows 11 |
| Linux環境 | WSL2・Ubuntu |
| シェル | Bash |
| PHP | 8.5 |
| フレームワーク | Laravel 13 |
| PHPパッケージ管理 | Composer |
| フロントエンドの準備 | Node.js・npm |
| データベース | SQLite |
| サンプル画面 | Bladeによるタスク一覧 |
Laravel 13の最低PHPバージョンは8.3です。本記事では、公式インストールページに掲載されているPHP 8.5の導入コマンドを使用します。Laravel 13の対応PHPバージョン
PHPやComposerはWSL内にインストールします。この構成では、Docker DesktopやLaravel Sailの準備は不要です。
既存のLaravelプロジェクトをDockerで起動したい場合は、Windows 11で既存Laravel環境を構築する方法を参照してください。
WSL2とUbuntuを準備する
WindowsのPowerShellでWSLを確認する
Windows側のPowerShellで、次を実行します。
wsl -l -v
Ubuntuの行にあるVERSIONが2なら、WSL2を使用しています。
まだWSLをインストールしていない場合は、管理者としてPowerShellを開き、次を実行します。
wsl --install
必要に応じてWindowsを再起動し、Ubuntuの初回起動時にLinux用のユーザー名とパスワードを設定します。MicrosoftのWSLインストール手順
Ubuntuのターミナルを開く
Windows TerminalからUbuntuを開きます。
以降のコマンドは、特に断りがない限りUbuntu側のターミナルで実行してください。
まず、使用しているLinuxを確認します。
cat /etc/os-release
Ubuntuであることを確認できたら、インストールに使う基本ツールを用意します。
sudo apt update
sudo apt install -y curl ca-certificates git unzip
sudoで求められるのは、Ubuntuの初回設定で作成したLinuxユーザーのパスワードです。入力中に文字が表示されなくても、そのまま入力してEnterを押します。
WSLにPHP・Composer・Laravel Installerをインストールする
すでにインストールされているか確認する
最初に、Ubuntu側で次を実行します。
php -v
composer --version
laravel --version
コマンドが見つからない場合は、次の導入手順へ進みます。
すでにPHPとComposerを使用している場合は、バージョンと実行場所を確認してください。
command -v php
command -v composer
Windows側にインストール済みでも、WSL内で利用する環境が整っているとは限りません。
PHPとComposerがない場合の公式コマンド
Laravelの公式ドキュメントでは、Linux向けに次のコマンドが案内されています。
Ubuntu側で実行します。
/bin/bash -c "$(curl -fsSL https://php.new/install/linux/8.5)"
公式の説明では、このコマンドでPHP・Composer・Laravel Installerをインストールできます。インターネット上のインストールスクリプトを取得し、Bashで実行する形式です。Laravel公式インストール手順
WSL内のUbuntuにはLinux向け手順を適用する考え方になりますが、本記事では、このコマンドが個々のWSL環境で正常完了することまでは検証していません。エラーが出た場合は後続の作業へ進まず、表示された内容を確認してください。
インストール完了後は、Ubuntuのターミナルを一度閉じて開き直します。
その後、もう一度確認します。
php -v
composer --version
laravel --version
確認するポイントは次の3つです。
- PHPが8.5系として認識されている
- Composerのバージョンが表示される
- Laravel Installerのバージョンが表示される
laravel --versionで表示されるのはインストーラーのバージョンです。作成したアプリがLaravel 13かどうかは、後ほど別のコマンドで確認します。
PHPとComposerがすでにある場合
PHPがLaravel 13の要件を満たしていて、Laravel Installerだけがない場合は、次を実行します。
composer global require laravel/installer
完了後、次で確認します。
laravel --version
コマンドが見つからない場合の確認方法は、後半の「よくあるエラー」で紹介します。
WSLにNode.jsとnpmを用意する
LaravelのCSSやJavaScriptをビルドするために、Node.jsとnpmを準備します。
Ubuntu側で確認します。
node -v
npm -v
command -v node
command -v npm
WSL内に対応するNode.js環境がある場合は、その環境を利用できます。
まだない場合は、Node.jsのバージョンを管理できるnvmを使用する方法があります。
nvmをインストールする
以下は、執筆時点のnvm公式READMEに掲載されているインストール方法です。
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.7/install.sh | bash
完了後、Ubuntuのターミナルを閉じて開き直し、確認します。
command -v nvm
nvmと表示されたら、LTS版のNode.jsをインストールします。
nvm install --lts
nvm use --lts
続いて確認します。
node -v
npm -v
nvmの導入方法やバージョンは更新されるため、必要に応じてnvm公式READMEも確認してください。
Laravelプロジェクトを新規作成する
プロジェクトはWSL側のフォルダーに作成する
Ubuntu側で作業用フォルダーを作ります。
mkdir -p ~/projects
cd ~/projects
ここでは、WindowsのCドライブを示す/mnt/c/配下ではなく、WSLのLinuxファイルシステム内に保存します。
Microsoftも、Linuxのコマンドラインツールを使う場合は、Linux側のファイルシステムにプロジェクトを置く方法を推奨しています。WSLでのファイルの保存場所
Laravel Installerでアプリを作成する
今回はlaravel-wsl-demoという名前で作成します。
laravel new laravel-wsl-demo
途中で選択肢が表示された場合は、基本の起動確認用として次の方針で選びます。
| 質問の種類 | 今回の選択方針 |
|---|---|
| スターターキット | なし/None |
| データベース | SQLite |
| テストフレームワーク | 初期選択のままで可 |
| npmのインストール・ビルド | 実行する選択肢があれば実行 |
質問の種類・順序・表記はインストーラーによって変わる場合があります。
今回はBladeで簡単な画面を作るため、Reactなどのスターターキットは選択しません。
Laravelのバージョンを確認する
作成したフォルダーへ移動します。
cd ~/projects/laravel-wsl-demo
php artisan --version
Laravel Framework 13.x.xのように、13系であることを確認してください。
laravel newは実行時点のリリース状況に影響されるため、記事の対象バージョンと一致しているか確認してから進めます。
PHPと拡張機能が依存パッケージの要件を満たしているかは、次でも確認できます。
composer check-platform-reqs
Laravelを起動してWindowsのブラウザで確認する
プロジェクト作成時にnpmの準備を実行していない場合は、次を順番に実行します。
npm install
npm run build
ビルドが成功したら、開発用プロセスを起動します。
composer run dev

これがLaravel公式で案内されている基本の起動方法です。アプリケーションの作成と起動
ターミナルは起動したままにして、Windows側のEdgeやChromeでhttp://localhost:8000を開きます。
Laravelの初期画面が表示されれば、ブラウザからアクセスできています。

Microsoftのドキュメントでも、WSL内で動作するネットワークアプリへ、Windows側からlocalhostでアクセスする方法が案内されています。WSLのネットワーク接続
停止するときは、開発用プロセスを起動したターミナルでCtrl+Cを押します。
仮のデータを使ったタスク一覧画面を作る
初期画面の表示まで確認できたら、自分で用意したデータを表示してみます。
今回は次の3件を画面に表示します。
- Laravelをインストールする
- ブラウザで起動を確認する
- タスク一覧を表示する
データはPHPの配列で用意します。このタスク一覧のためのテーブル作成や保存処理は不要です。
routes/web.phpにルートを追加する
プロジェクト内のroutes/web.phpをエディターで開きます。
通常、このファイルには次の読み込みがすでにあります。
use Illuminate\Support\Facades\Route;
同じ読み込みを重複させず、既存のルートの下に次を追加します。
Route::get('/tasks', function () {
$tasks = [
['title' => 'Laravelをインストールする', 'done' => true],
['title' => 'ブラウザで起動を確認する', 'done' => true],
['title' => 'タスク一覧を表示する', 'done' => false],
];
return view('tasks', ['tasks' => $tasks]);
});
これは、/tasksにアクセスしたとき、タスクデータをtasksというビューへ渡す処理です。Laravelのルーティング
Bladeテンプレートを作成する
resources/viewsフォルダー内に、tasks.blade.phpを新規作成します。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>タスク一覧</title>
<style>
body {
max-width: 720px;
margin: 48px auto;
padding: 0 20px;
font-family: sans-serif;
line-height: 1.8;
}
li {
margin-bottom: 12px;
}
</style>
</head>
<body>
<h1>タスク一覧</h1>
<p>Laravelから渡したデータを表示しています。</p>
<ul>
@foreach ($tasks as $task)
<li>
{{ $task['title'] }}
— {{ $task['done'] ? '完了' : '未完了' }}
</li>
@endforeach
</ul>
</body>
</html>
Bladeの@foreachで配列を繰り返し処理し、{{ }}で内容を表示しています。Bladeテンプレートの公式ドキュメント
タスク一覧をブラウザで確認する
開発用プロセスが停止している場合は、プロジェクトのフォルダーで再起動します。
composer run dev
Windowsのブラウザでhttp://localhost:8000/tasksを開きます。
3件のタスク名と完了状態が表示されれば、ルートからビューへデータを渡す基本の流れを確認できています。
このサンプルは画面表示のみです。タスクを保存・追加・編集する機能は、次の段階で実装します。
WSLでLaravelを起動できない場合の確認ポイント
php・composerが見つからない
インストール後にUbuntuのターミナルを開き直したか確認します。
command -v php
command -v composer
何も表示されない場合は、インストールの失敗やPATH設定の未反映が考えられます。インストーラーの終了メッセージを確認してください。
複数のPHPがある場合は、次で候補を確認できます。
type -a php
php --ini
PHPの実行ファイルと設定ファイルを確認し、想定する環境が使われているか調べます。
laravel: command not foundと表示される
Composer経由でLaravel Installerを導入した場合は、実行ファイルの保存先を確認します。
composer global config bin-dir --absolute
表示されたディレクトリがPATHに含まれていなければ、Bashでは次のように現在のターミナルへ追加できます。
export PATH="$(composer global config bin-dir --absolute):$PATH"
laravel --version
この設定は現在のターミナルに対するものです。継続して使う場合は、確認した設定を~/.bashrcなどへ追加します。
Could not open input file: artisanと表示される
Laravelプロジェクト以外のフォルダーで実行している可能性があります。
cd ~/projects/laravel-wsl-demo
ls artisan
php artisan --version
artisanが存在する場所で実行してください。
npm installやnpm run buildで失敗する
まず、WSL側で使用しているNode.jsとnpmを確認します。
node -v
npm -v
command -v node
command -v npm
エラーにNode.jsの必要バージョンが書かれている場合は、その条件と現在のバージョンを照合します。
Windows側の実行ファイルが選ばれている場合は、WSL内に用意したNode.js環境を使うように見直します。
SQLite関連のエラーが表示される
まず、必要な拡張機能とデータベース設定を確認します。
php -m
composer check-platform-reqs
.envのDB_CONNECTIONがsqliteになっているか、database/database.sqliteが作成されているかも確認します。
必要なPHP拡張機能が不足している場合は、使用中のPHPの導入方法に合わせて対応してください。別のPHP向けパッケージを追加しても、現在実行しているPHPには反映されない場合があります。
Windowsのブラウザでlocalhost:8000が開かない
開発用プロセスが終了していないか、ターミナルにエラーが出ていないかを確認します。
別のUbuntuターミナルから次を実行すると、WSL内から接続できるかを確認できます。
curl -I http://localhost:8000
WSL内でも接続できなければ、まずアプリの起動状態を調べます。WSL内では接続できるのにWindows側から開けない場合は、WSLのネットワーク設定やVPNなどを確認します。
今回のタスク画面はViteを使わないため、PHP側だけを切り分けたい場合は、composer run devを停止したうえで次を試せます。
php artisan serve --port=8001
その場合は、http://localhost:8001/tasksへアクセスします。
次に学ぶこと
ここまでで、Laravelを新規作成し、ブラウザへデータを表示するまでの流れを確認できます。
次は、タスクをSQLiteに保存し、追加・編集・削除できるようにすると、Laravelのデータベース操作を学びやすくなります。
Reactで画面を作りたい場合は、LaravelでInertia.jsとReactを使うメリットも参考にしてください。今回使ったBladeとの役割の違いを理解してから進めると、構成を選びやすくなります。

