Laravel 13をWSL2にインストールする方法|Windowsで環境構築から起動まで

はじめに

WindowsでLaravelを始める方法の一つが、WSL2のUbuntu上に開発環境を用意する方法です。

この記事では、PHP・ComposerのインストールからLaravelプロジェクトの新規作成、Windowsのブラウザでの起動確認までを紹介します。最後に、仮のデータを使った小さなタスク一覧画面も作成します。

本記事は、Laravel 13とMicrosoftの公式ドキュメントをもとに、WSL2・Ubuntu向けに整理した手順です。掲載している一連の操作はWSL実機では未検証です。インストーラーの質問や出力は、実行時のバージョンによって異なる場合があります。

今回構築するLaravelの開発環境

本記事で想定する構成は次のとおりです。

項目構成
WindowsWindows 11
Linux環境WSL2・Ubuntu
シェルBash
PHP8.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との役割の違いを理解してから進めると、構成を選びやすくなります。