Knowledge Garden
技術記事 公開日

Laravel入門

PHPでWebアプリを効率よく作るためのフレームワーク

要約

  • Laravelは、PHPでWebアプリケーションを作るためのフレームワークだ。
  • ルーティング、DB操作、認証、バリデーション、キュー、テストなど、Web開発で必要になりやすい機能を一通り備えている。
  • 2026年4月時点の現行メジャー版はLaravel 13で、PHP 8.3以上が必要だ。(Laravel)
  • 小〜中規模の業務システムからAPI、SaaS、管理画面、非同期処理を含むアプリまで幅広く使える。
  • Laravelを理解するには、まず「ルート → コントローラ → モデル → マイグレーション → ビュー/APIレスポンス」の流れを押さえるとよい。

Laravelとは

Laravelは、PHPでWebアプリケーションを構築するためのフレームワークである。公式ドキュメントでは、表現力のある構文を持つWebアプリケーションフレームワークとして説明されており、開発者がアプリケーション本体の実装に集中できるよう、土台となる構造を提供するものと位置づけられている。(Laravel)

Laravelの特徴は、単に便利なライブラリを集めたものではなく、Webアプリ開発の標準的な流れをフレームワーク側が整理している点にある。ルーティング、コントローラ、ORM、マイグレーション、認証、バリデーション、テスト、キューなどが統一された作法で扱える。


Laravelの主な特徴

1. ルーティングが書きやすい

Laravelでは、URLと処理をルートファイルに定義する。もっとも基本的なルートはURIとクロージャを受け取り、複雑な設定ファイルを書かずに振る舞いを定義できる。(Laravel)

use Illuminate\Support\Facades\Route;

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

小さな処理ならクロージャで書けるが、実務ではコントローラへ処理を分離することが多い。

use App\Http\Controllers\PostController;

Route::get('/posts', [PostController::class, 'index']);
Route::post('/posts', [PostController::class, 'store']);

2. Eloquent ORMでDB操作を書ける

LaravelにはEloquentというORMが含まれている。Eloquentでは、各DBテーブルに対応する「モデル」を定義し、そのモデルを通じてレコードの取得、作成、更新、削除を行う。(Laravel)

php artisan make:model Post -m

-mを付けると、モデルと一緒にマイグレーションも生成できる。Laravel公式ドキュメントでも、make:modelでモデルを生成でき、--migrationまたは-mでマイグレーションも同時生成できると説明されている。(Laravel)

use App\Models\Post;

$posts = Post::where('published', true)
    ->orderByDesc('created_at')
    ->get();

SQLを直接書かなくても、PHPのメソッドチェーンで読みやすくDBクエリを表現できるのが強みだ。


3. マイグレーションでDB構造を管理できる

Laravelのマイグレーションは、DBのテーブル作成・変更をコードとして管理する仕組みである。公式ドキュメントでは、Schemaファサードにより、LaravelがサポートするDBシステム間でテーブル作成や変更を扱えると説明されている。(Laravel)

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration {
    public function up(): void
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->id();
            $table->string('title');
            $table->text('body');
            $table->boolean('published')->default(false);
            $table->timestamps();
        });
    }

    public function down(): void
    {
        Schema::dropIfExists('posts');
    }
};
php artisan migrate

DB定義をGitで管理できるため、チーム開発や本番反映で差分を追いやすい。


4. 認証・認可の仕組みが用意されている

Laravelには認証まわりの仕組みが用意されている。スターターキットを使えば、登録、ログイン、認証済みユーザーの扱いなどを含むアプリケーションの出発点を作れる。公式ドキュメントでは、スターターキットがユーザー登録・認証に必要なルート、コントローラ、ビューを含むと説明されている。(Laravel)

認可については、GateとPolicyが用意されている。Gateはシンプルなクロージャベースの認可、Policyはモデルやリソース単位で認可ロジックをまとめる仕組みだ。(Laravel)

public function update(User $user, Post $post): bool
{
    return $user->id === $post->user_id;
}

管理画面や会員制アプリでは、認証だけでなく「誰が何をできるか」をPolicyで整理すると保守しやすい。


5. バリデーションをきれいに分離できる

Laravelでは、リクエストの入力値検証をコントローラに直接書くこともできるが、実務ではForm Requestに分離することが多い。公式ドキュメントでは、Form Requestはバリデーションと認可ロジックを内包するカスタムリクエストクラスとして説明されている。(Laravel)

php artisan make:request StorePostRequest
public function rules(): array
{
    return [
        'title' => ['required', 'string', 'max:255'],
        'body' => ['required', 'string'],
        'published' => ['boolean'],
    ];
}

コントローラは処理の流れに集中し、入力検証は専用クラスに閉じ込める構成にできる。


6. キューで重い処理を非同期化できる

Laravelのキューは、時間のかかる処理をWebリクエストの外で実行するための仕組みだ。公式ドキュメントでは、CSVの解析や保存のように通常のリクエスト内で時間がかかる処理をキューに移すことで、Webリクエストへの応答を高速化できると説明されている。(Laravel)

php artisan make:job SendPostPublishedNotification
SendPostPublishedNotification::dispatch($post);

メール送信、画像変換、外部API連携、レポート生成などはキュー化しやすい処理だ。


7. テストを書きやすい

LaravelはPestまたはPHPUnitでのテスト実行に対応している。新規アプリケーション作成後は、vendor/bin/pestvendor/bin/phpunit、またはphp artisan testでテストを実行できる。(Laravel)

php artisan test
test('posts page can be displayed', function () {
    $response = $this->get('/posts');

    $response->assertStatus(200);
});

HTTPテスト、DBテスト、認証状態を含むテストが書きやすいため、業務アプリでも回帰テストを整備しやすい。


Laravel 13の位置づけ

2026年4月時点ではLaravel 13が現行メジャー版である。Laravelはメジャーリリースをおおむね毎年第1四半期に出し、マイナー・パッチリリースは週単位で出ることがあるが、マイナー・パッチでは破壊的変更を含めない方針だ。(Laravel)

Laravel 13はPHP 8.3以上を要求する。公式のサポートポリシーでは、Laravel 13は2026年3月17日にリリースされ、セキュリティ修正は2028年3月17日まで提供されるとされている。(Laravel)

Laravel 13では、AI SDK、JSON:API Resources、キュー、キャッシュ、セキュリティなどに関する改善が含まれる。公式リリースノートでは、AIネイティブなワークフロー、より強いデフォルト、表現力のある開発者APIに焦点を当てたリリースと説明されている。(Laravel)


Laravelアプリの基本構造

Laravelアプリでは、おおむね次の流れで処理が進む。

HTTPリクエスト

routes/web.php または routes/api.php

Controller

Form Request / Service / Action

Eloquent Model

Database

View または JSON Response

代表的なディレクトリは次のとおりだ。

ディレクトリ役割
app/ModelsEloquentモデルを置く
app/Http/Controllersコントローラを置く
app/Http/RequestsForm Requestを置く
database/migrationsDBマイグレーションを置く
routes/web.phpWeb画面向けルートを定義する
routes/api.phpAPI向けルートを定義する
resources/viewsBladeテンプレートを置く
configアプリ設定を置く

公式ドキュメントでも、Laravelの設定ファイルはconfigディレクトリに置かれ、DB接続、メールサーバ、アプリURL、暗号化キーなどを設定できると説明されている。(Laravel)


最小構成でLaravelアプリを作る手順

Laravel公式ドキュメントでは、PHP、Composer、Laravel Installerを準備したあと、laravel new example-appで新規アプリケーションを作成できると説明されている。作成後はcomposer run devでローカル開発サーバ、キューワーカー、Vite開発サーバを起動できる。(Laravel)

composer global require laravel/installer
laravel new example-app
cd example-app
npm install && npm run build
composer run dev

既存のPHP・Composer環境がある場合、Laravel InstallerはComposer経由でインストールできる。(Laravel)


簡単なCRUDの例

投稿一覧を表示する簡単な例を考える。

1. モデルとマイグレーションを作る

php artisan make:model Post -m

2. マイグレーションを定義する

Schema::create('posts', function (Blueprint $table) {
    $table->id();
    $table->string('title');
    $table->text('body');
    $table->boolean('published')->default(false);
    $table->timestamps();
});
php artisan migrate

3. コントローラを作る

php artisan make:controller PostController
namespace App\Http\Controllers;

use App\Models\Post;
use Illuminate\View\View;

class PostController extends Controller
{
    public function index(): View
    {
        $posts = Post::where('published', true)
            ->latest()
            ->get();

        return view('posts.index', compact('posts'));
    }
}

4. ルートを定義する

use App\Http\Controllers\PostController;

Route::get('/posts', [PostController::class, 'index'])
    ->name('posts.index');

5. Bladeで表示する

<h1>投稿一覧</h1>

@foreach ($posts as $post)
    <article>
        <h2>{{ $post->title }}</h2>
        <p>{{ $post->body }}</p>
    </article>
@endforeach

この流れを押さえれば、Laravelの基本的な開発サイクルは理解しやすくなる。


実務での設計ポイント

コントローラを太らせない

コントローラにすべての処理を書くと、すぐに保守しづらくなる。入力検証はForm Request、複雑な業務処理はServiceやAction、DB操作はModelやRepository相当の層に分離するとよい。

悪い例は次のようなものだ。

public function store(Request $request)
{
    // バリデーション
    // 権限チェック
    // DB保存
    // メール送信
    // 通知
    // 外部API連携
}

改善後は次のように役割を分ける。

public function store(StorePostRequest $request, CreatePostAction $action)
{
    $post = $action->execute($request->validated());

    return redirect()->route('posts.show', $post);
}

N+1問題を避ける

Eloquentは便利だが、関連データの取得を意識しないとN+1問題が起きる。関連モデルを一覧で使う場合はwith()で事前ロードする。

$posts = Post::with('user')->latest()->get();

ビュー側で毎回$post->userへアクセスすると、投稿件数分だけ追加クエリが発生する可能性がある。


.envに環境差分を寄せる

DB接続情報、メール設定、外部APIキーなどは.envに置く。コードに直接書かない。

APP_ENV=local
APP_DEBUG=true
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_DATABASE=example_app

設定値はconfig()経由で読む。

$from = config('mail.from.address');

重い処理はキューに逃がす

メール送信、通知、CSVインポート、PDF生成、画像処理などはリクエスト中に同期実行しない方がよい。ユーザーへのレスポンスを返したあと、キューで実行する。

ProcessCsvImport::dispatch($uploadedFilePath);

Laravelが向いているケース

Laravelは次のような開発に向いている。

  • 管理画面つきの業務アプリ
  • 会員登録・ログインが必要なWebサービス
  • REST API
  • SaaS
  • CMS
  • 予約、注文、在庫、請求などのDB中心アプリ
  • メール送信や通知、バッチ処理を含むアプリ
  • PHP資産やPHP人材を活かした開発

一方で、極端に小さな静的サイトや、PHPを使わない前提のフロントエンド専用アプリでは、Laravelが過剰になることもある。


まとめ

Laravelは、PHPで実務的なWebアプリケーションを作るための総合フレームワークだ。ルーティング、Eloquent ORM、マイグレーション、認証、認可、バリデーション、キュー、テストといった機能が統一された設計で提供されているため、個別ライブラリを組み合わせるよりも開発の流れを作りやすい。

最初に学ぶべき順番は、ルーティング、コントローラ、Eloquent、マイグレーション、バリデーション、認証、テストである。この流れを押さえると、Laravelの全体像を理解しやすくなる。Laravel 13ではPHP 8.3以上が必要で、サポート期限も明確に定義されているため、新規開発ではバージョン要件と運用期間を確認したうえで採用するのがよい。(Laravel)