技術資料

Windows 11でLaravel 13を始める:環境構築からルーティング・Controller・Bladeまで

作成日:2026.08.13

Windows 11にPHP、Composer、Laravel Installerを用意し、Laravel 13のプロジェクトを作成します。routes/web.php、Controller、Bladeの役割を説明し、最小構成のWebページを表示するまでの流れと、Windows環境でつまずきやすい点を紹介します。

今回は、Windows 11にLaravel 13の開発環境を用意し、ルーティング、Controller、Bladeを使って最小限の画面を表示してみます。データベースや認証などは扱わず、ブラウザからのリクエストが画面として返るまでの流れに絞ります。

前提

今回の対象環境は以下の通りです。

  • OS: Windows 11
  • PHP: 8.3以上
  • Composer
  • Laravel Framework: 13.x
  • ターミナル: PowerShell

Laravel 13.xは、PHP 8.3以上を必要とします。Laravel 13.xの対応PHPバージョンやサポート期間は、執筆時点のLaravel 13.xのリリースノートで確認してください。

Laravelのフロントエンドアセットをコンパイルする場合は、Node.jsとnpm、またはBunも用意します。今回はBladeでHTMLを表示することが中心なので、まずはPHPとComposerを使った画面表示を確認します。

PHPとComposerの状態を確認する

PowerShellを起動し、PHPとComposerが利用できるか確認します。

php --version
composer --version

それぞれのバージョンが表示されれば、コマンドを実行できる状態です。phpまたはcomposerが見つからない場合は、インストール先がPATHに登録されているか確認します。

PHPやComposerをまだ用意していない場合は、インストール方法が更新される可能性があるため、Windows向けの手順が掲載されているLaravel 13.xのインストールガイドを確認してください。Laravel Herdを使う方法や、既存のPHP・Composerを使う方法もあります。

Laravel Installerを導入する

Laravelのプロジェクトを作成するために、Laravel InstallerをComposerのグローバルパッケージとして導入します。

composer global require laravel/installer

導入後、Laravel Installerのバージョンを確認します。

laravel --version

laravelコマンドが見つからない場合は、ComposerのグローバルバイナリディレクトリがPATHに登録されているか確認します。場所は次のコマンドで確認できます。

composer global config bin-dir --absolute

PATHを変更した場合は、PowerShellを一度終了してから起動し直します。新しいPATHが現在のターミナルへ反映されていないことがあるためです。

Laravelプロジェクトを作成する

Laravelプロジェクトを配置するディレクトリへ移動し、laravel newコマンドを実行します。ここでは、プロジェクト名をlaravel-exampleとします。

cd D:\projects
laravel new laravel-example
cd laravel-example

プロジェクト作成中に設定項目を尋ねられた場合は、記事の範囲に合わせて、スターターキットを使用しない構成を選びます。選択肢や表示内容はLaravel Installerのバージョンによって変わる可能性があります。

プロジェクトが作成されたら、ルートディレクトリにLaravelのファイルがあることを確認します。

Get-ChildItem

Laravelのプロジェクトには、アプリケーションのコードを置くapp、ルートを定義するroutes、Bladeなどのビューを置くresources、公開ディレクトリとなるpublicなどが用意されます。

初期設定を確認する

Laravelのプロジェクトには、環境ごとの設定を記述する.envファイルがあります。接続先や秘密情報など、環境によって変わる値を記述するファイルです。

.envにはパスワードやAPIキーなどの秘密情報を記述する場合があるため、Gitの管理対象へ追加しないようにします。プロジェクト作成時にアプリケーションキーが設定されていない場合は、次のコマンドで生成できます。

php artisan key:generate

この時点ではデータベースを使わないため、データベースの接続設定は変更しません。Laravel 13.xの新規プロジェクトでは、初期設定としてSQLiteが用意される場合がありますが、今回の画面表示にはデータベース接続は必要ありません。

Laravelの開発サーバーを起動する

プロジェクトのルートディレクトリで、Laravelの開発サーバーを起動します。

php artisan serve

通常は、次のようなURLでアクセスできます。

http://127.0.0.1:8000

ブラウザで初期画面が表示されれば、PHPからLaravelアプリケーションを起動できています。サーバーを停止するときは、PowerShellでCtrl + Cを押します。

Laravel 13.xには、PHP開発サーバー、キューワーカー、ログ表示、Viteをまとめて起動するphp artisan devコマンドもあります。このコマンドを使う場合は、Node.jsとnpmなどのフロントエンド環境も必要になります。今回はルーティングとBladeの確認が目的なので、PHP開発サーバーだけを起動するphp artisan serveを使います。

ルーティングを追加する

Laravelでは、ブラウザからアクセスされたURLと、実行する処理をルートとして定義します。Web画面用のルートは、基本的にroutes/web.phpへ記述します。

まずは、Controllerを使わず、ルートへ直接処理を書く例を追加します。routes/web.phpを開き、既存の記述を残したまま、次のルートを追加します。

use Illuminate\Support\Facades\Route;

Route::get('/hello', function (): string {
    return 'Hello Laravel';
});

すでにuse Illuminate\Support\Facades\Route;が記述されている場合は、同じuse文を重複して追加しません。

ブラウザで次のURLへアクセスします。

http://127.0.0.1:8000/hello

画面にHello Laravelと表示されれば、URLとクロージャーの処理が結び付いています。

登録されているルートは、Artisanのroute:listコマンドで確認できます。

php artisan route:list

routes/web.phpに定義したルートは、Web用のミドルウェアグループを通ります。セッションやCSRF保護など、ブラウザ向けの処理を利用する場合に関係します。

Controllerを作成する

ルートへ処理を直接書く方法は簡単ですが、処理が増えるとweb.phpが読みにくくなります。そこで、画面の処理をControllerへ移します。

次のコマンドで、GreetingControllerを作成します。

php artisan make:controller GreetingController

Controllerは、通常app/Http/Controllersディレクトリへ作成されます。作成されたapp/Http/Controllers/GreetingController.phpを開き、次の内容にします。

<?php

namespace App\Http\Controllers;

use Illuminate\View\View;

class GreetingController extends Controller
{
    public function show(): View
    {
        return view('greeting', [
            'message' => 'Controllerから渡したメッセージです。',
        ]);
    }
}

viewヘルパーの第1引数にはビューの名前を渡し、第2引数の配列でBladeへ渡す値を指定します。この例では、greetingという名前のビューへmessageを渡しています。

ルートからControllerを呼び出す

次に、routes/web.phpへControllerを呼び出すルートを追加します。

use App\Http\Controllers\GreetingController;
use Illuminate\Support\Facades\Route;

Route::get('/greeting', [GreetingController::class, 'show']);

このルートへアクセスすると、GreetingControllershowメソッドが呼び出されます。

http://127.0.0.1:8000/greeting

この時点では、Controllerから呼び出すBladeファイルをまだ作成していないため、エラーになります。次にビューを作成します。

Bladeで画面を表示する

Bladeは、Laravelに標準搭載されているテンプレートエンジンです。HTMLを基本にしながら、変数の表示、条件分岐、繰り返しなどの処理を専用の記法で記述できます。

Bladeファイルはブラウザが直接読み込むのではなく、Laravelがリクエストに応じて処理し、最終的なHTMLとしてブラウザへ返します。Controllerで処理を行い、Bladeで表示を組み立てることで、アプリケーションの処理と画面の記述を分けて管理できます。

Laravelのビューは、通常resources/viewsディレクトリへ配置します。Bladeを使うファイルには、.blade.phpという拡張子を付けます。

resources/views/greeting.blade.phpを作成し、次の内容を記述します。

<!doctype html>
<html lang="ja">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Greeting</title>
</head>
<body>
    <h1>Laravelの画面表示</h1>
    <p>{{ $message }}</p>
</body>
</html>

{{ $message }}の部分が、Controllerから渡した値に置き換わります。Bladeの{{ }}による表示は、HTMLとして解釈されないようにエスケープされます。

ブラウザでhttp://127.0.0.1:8000/greetingを開き、見出しとメッセージが表示されることを確認します。

処理の流れを確認する

今回の処理は、次のように流れます。

ブラウザ
  ↓ GET /greeting
routes/web.php
  ↓ GreetingController::show()
app/Http/Controllers/GreetingController.php
  ↓ view('greeting', [...])
resources/views/greeting.blade.php
  ↓ HTMLを生成
ブラウザへレスポンス

routes/web.phpはURLと処理の入口を定義し、Controllerはリクエストに対する処理を担当します。Bladeは、Controllerから受け取った値を使って画面のHTMLを生成します。

この役割を分けておくと、URLの定義、アプリケーションの処理、画面の見た目を別々に確認できます。画面が表示されない場合も、どの段階で処理が止まっているか切り分けやすくなります。

うまく動かない場合

phpやcomposerが見つからない

php --versioncomposer --versionでコマンドが見つからない場合は、PHPやComposerのインストール先がPATHへ登録されているか確認します。PATHを変更した後は、新しいPowerShellを起動してから再度確認します。

laravelコマンドが見つからない

Laravel Installerを導入した後にlaravel --versionが失敗する場合は、ComposerのグローバルバイナリディレクトリがPATHへ登録されているか確認します。

composer global config bin-dir --absolute

表示されたディレクトリをPATHへ追加した後、PowerShellを起動し直します。

ポートが使用中になっている

php artisan serveで使用するポートが別のアプリケーションで使われている場合は、ポート番号を変更して起動できます。

php artisan serve --port=8080

この場合は、ブラウザでhttp://127.0.0.1:8080へアクセスします。

ルートが登録されていない

今回の例ではURLへ直接アクセスしているため、名前付きルートは必須ではありません。ルートが登録されているか確認する場合は、php artisan route:listを実行し、HTTPメソッド、URI、Actionの表示を確認します。

変更したファイルが現在起動しているプロジェクトのものか、PowerShellのカレントディレクトリが正しいかも確認します。

View [greeting] not foundになる

Controllerでview('greeting')と指定した場合、Laravelはresources/views/greeting.blade.phpを探します。ファイル名、拡張子、保存場所が一致しているか確認します。

注意点

  • .envへ記述したパスワード、APIキー、個人情報などをGitの管理対象へ含めない。
  • ブラウザへ表示する値は、基本的にBladeの{{ }}で出力する。
  • {!! !!}はHTMLをそのまま出力するため、未信頼の入力に使わない。
  • 本番環境では、Laravelプロジェクトのルート全体ではなく、publicディレクトリをWeb公開の入口にする。
  • php artisan serveは開発用の確認に使い、本番用のWebサーバーとして使用しない。

まとめ

今回は、Windows 11でLaravel 13を始めるために、PHP、Composer、Laravel Installerの状態を確認し、laravel newでプロジェクトを作成しました。

最小構成の画面では、routes/web.phpでURLを受け取り、Controllerで処理を行い、Bladeへデータを渡してHTMLを生成しました。

Laravelの機能を追加するときも、まずどのURLからリクエストを受け、どのControllerで処理し、どのBladeやレスポンスを返すのかを整理すると、変更する場所を判断しやすくなります。次は、フォーム、バリデーション、データベース、認証などを追加していくと、より実際のWebアプリケーションに近い構成にできます。

この記事を書いた人

※上が私です。

奈良市を拠点に、27年以上の経験を持つフリーランスWebエンジニア、阿部辰也です。

これまで、ECサイトのバックエンド開発や業務効率化システム、公共施設の予約システムなど、多彩なプロジェクトを手がけ、企業様や制作会社様のパートナーとして信頼を築いてまいりました。

【制作会社・企業様向けサポート】
  • 専任エンジニアのいない企業様に対するシステム面の不安を解消
  • 柔軟な契約形態や短納期での対応により、急なニーズにも迅速にサポート
  • システムの企画段階から運用まで、ワンストップでのサービスを提供

Webシステムの開発やサイト改善でお困りの際は、どうぞお気軽にご相談ください。小さな疑問から大規模プロジェクトまで、最適なご提案を心を込めてさせていただきます。

ぜひ、プロフィールWeb制作会社様向け業務案内一般企業様向け業務案内もご覧くださいね。

Windows 11にMailpitを導入してLaravelのメール送信を確認する

2026.08.06

Windows 11にMailpitを導入し、Laravel 13からSMTPでテストメールを送信して、MailpitのWeb UIで受信内容を確認する手順を紹介します。設定キャッシュ、ポート競合、キュー送信、メールFakeとの使い分けについても説明します。

Laravel Mailpit PHP

MarkdownをHTMLへ変換する方法とXSS対策:PHP・JavaScript・Vue.jsの実装例

2026.08.12

PHP のleague/commonmarkと、Node.js のMarked・DOMPurifyを使い、MarkdownをHTMLへ変換する方法を紹介します。ユーザー入力やAI生成Markdownを未信頼入力として扱い、Vue.js のv-htmlへ安全に表示するための設定と注意点も整理します。

JavaScript PHP Vue.js

PHPでTOTP方式のMFAを実装する|Imagick不要のSVG QRコード生成

2026.08.08

PHP 8.3.15の環境で、認証アプリを使ったTOTP方式のMFAを実装します。spomky-labs/otphpでワンタイムコードを検証し、bacon/bacon-qr-codeでImagickを使わずにSVG形式のQRコードを生成します。MFAやTOTPの基本概念から、登録処理、簡略化したログイン処理、本番環境での注意点まで紹介します。

MFA PHP TOTP

GeminiのInteractions APIをPHPで実装:previous_interaction_idで会話を継続する

2026.08.01

Gemini Developer APIのInteractions APIを、PHPのcURLから呼び出す方法を解説します。PHP用の公式SDKがないためREST APIを利用し、APIキーの設定、リクエストとレスポンスの処理、previous_interaction_idを使った会話継続まで、実際のコード例とともに紹介します。

Gemini API PHP

阿部辰也へのお仕事の依頼・お問い合わせ

軽いご相談もお気軽にどうぞ!

個人情報の取り扱いについて *必須 プライバシーポリシーをご確認いただき、同意いただける場合は「同意する」にチェックをしてください。

keyboard_double_arrow_up
TOP