サーバー側

Laravel とは何か:フレームワークの全体像と最初の一歩

「素の PHP」と「Laravel」は何が違うのか。ルーティング・コントローラ・ビュー・データベースというしくみを、実際のコードで追いながら理解し、最初のページを表示するところまで進みます。

更新日:2026-09-25

この記事で分かること

  • フレームワークとは何か、なぜ使うのか
  • Laravel の「部品」の名前と役割(ルート・コントローラ・ビュー・モデル)
  • インストールして最初のページを出す手順
  • 次に学ぶべきこと

所要時間は 90 分(インストールの待ち時間を除く)です。前の記事の PHP の基本を前提にしています。

フレームワークとは

前の記事では、1つの PHP ファイルにすべてを書きました。ページが2つ、3つと増え、ログインやデータベースが必要になると、次の問題が出てきます。

  • 同じ処理(ログイン確認、エスケープ、DB 接続)をあちこちに書く
  • ファイルの置き場所が人によってバラバラで、他人のコードが読めない
  • セキュリティの対策を自分で全部やらないといけない

フレームワーク は、これらの「毎回必要なもの」をあらかじめ用意し、「ファイルはここに置く」「処理はこう書く」というルールを決めたものです。Laravel は PHP のフレームワークの中で世界的にもっとも使われていて、日本の求人でも PHP 案件の多くが Laravel です。

ルールがあるおかげで、初めて見るプロジェクトでも「ルートは routes/web.php、画面は resources/views」とすぐわかります。これが実務でフレームワークが使われる最大の理由です。

Laravel の部品:リクエストが処理される流れ

ブラウザで https://example.com/posts/3 を開いたとき、Laravel の中では次のように処理が流れます。

ブラウザ → ルート(routes/web.php)
        → コントローラ(app/Http/Controllers/PostController.php)
        → モデル(app/Models/Post.php)でデータベースから取得
        → ビュー(resources/views/posts/show.blade.php)で HTML にする
        → ブラウザへ

ルート:URL と処理の対応表

// routes/web.php
use App\Http\Controllers\PostController;

Route::get('/posts', [PostController::class, 'index']);
Route::get('/posts/{id}', [PostController::class, 'show']);

「/posts に GET でアクセスされたら、PostController の index メソッドを実行する」という対応表です。

コントローラ:処理の司令塔

// app/Http/Controllers/PostController.php
namespace App\Http\Controllers;

use App\Models\Post;

class PostController extends Controller
{
    public function index()
    {
        $posts = Post::latest()->get();
        return view('posts.index', ['posts' => $posts]);
    }

    public function show(int $id)
    {
        $post = Post::findOrFail($id);
        return view('posts.show', ['post' => $post]);
    }
}

データを取ってきて、ビューに渡す。コントローラの仕事は基本的にこれだけです。

モデル:データベースの窓口

// app/Models/Post.php
namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    protected $fillable = ['title', 'body'];
}

たったこれだけで、Post::all()、Post::find(3)、Post::create([...]) のようにデータベースを操作できます。SQL を直接書かなくてよく、プレースホルダも自動で使われるので、前の記事で触れた SQL インジェクションの対策も組み込まれています。この仕組みを Eloquent と呼びます。

ビュー:画面(Blade テンプレート)

{{-- resources/views/posts/index.blade.php --}}
<h1>記事一覧</h1>
<ul>
  @foreach ($posts as $post)
    <li><a href="/posts/{{ $post->id }}">{{ $post->title }}</a></li>
  @endforeach
</ul>

{{ }} で出力すると 自動でエスケープ されます。前の記事で毎回書いた htmlspecialchars を、Laravel が代わりにやってくれます。@foreach のような書き方を Blade 構文と呼びます。

この構造の名前:MVC

モデル(Model)・ビュー(View)・コントローラ(Controller)の頭文字をとって MVC と呼びます。「データ」「画面」「処理」を分けて置く、というだけの考え方です。Laravel に限らず、多くのフレームワークがこの形をしています。

インストールして最初のページを出す

準備

  • PHP 8.2 以上(前の記事で入れたもの)
  • Composer(PHP のライブラリ管理ツール):getcomposer.org からインストール

Composer のインストールも AI に任せて構いません。「開発環境の作り方」の参考プロンプトのように、「Composer をインストールして composer --version の結果を見せて」と頼めば、環境に合った手順で進めてくれます。

確認:

php --version
composer --version

プロジェクトを作る

composer create-project laravel/laravel myapp
cd myapp
php artisan serve

数分かかります。終わったら http://localhost:8000 を開き、Laravel のトップページが出れば成功です。php artisan serve が Laravel 付属の簡易サーバーで、artisan は Laravel の便利コマンド集です。

最初のページを作る

routes/web.php に次を追加します。

Route::get('/hello', function () {
    return view('hello', ['name' => '太郎']);
});

resources/views/hello.blade.php を作ります。

<!DOCTYPE html>
<html lang="ja">
<head><meta charset="UTF-8"><title>Hello</title></head>
<body>
  <h1>こんにちは、{{ $name }}さん</h1>
</body>
</html>

http://localhost:8000/hello を開いて表示されれば、Laravel でページを作れたことになります。

データベースを使ってみる(さわりだけ)

Laravel は初期設定で SQLite(ファイル1つのデータベース)が使えるようになっています。

php artisan make:model Post -m

-m をつけると、テーブルの設計図(マイグレーション)も一緒にできます。database/migrations/xxxx_create_posts_table.php を開き、列を足します。

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

これでテーブルができました。php artisan tinker を起動すると、対話的に試せます。

Post::create(['title' => '最初の記事', 'body' => '本文です']);
Post::all();

($fillable の設定が必要です。先ほどのモデルの例を参照してください。)

Laravel を学ぶ順番

  1. ルート → ビュー(この記事)
  2. コントローラに処理を移す
  3. モデルとマイグレーションで DB を扱う
  4. フォームからの登録・編集・削除(CRUD)
  5. バリデーション(入力チェック)
  6. 認証(ログイン):laravel/breeze を使うと数分で入ります
  7. リレーション(記事とコメント、のような関係)

4 までできれば、簡単な業務アプリが作れます。6 までできれば、会員制サービスの土台が作れます。

AI と一緒に進めるコツ

Laravel は「決まった場所に決まった書き方で」というルールが多いので、AI との相性が非常によいです。

Laravel 11 で、記事(posts)の一覧・詳細・作成ができる最小のコードを、
ルート・コントローラ・モデル・マイグレーション・Blade に分けて書いて。
バリデーション(title 必須・100文字以内)も入れて。

このように頼み、出てきたファイルを 前の記事の読み方で 1つずつ読んでください。「なぜ findOrFail なのか」「$fillable がないとどうなるか」を聞くと、理解が深まります。

つまずきやすいところ

  • composer が見つからない → インストール後にターミナルを開き直す。
  • php artisan serve で真っ白 → .env ファイルの有無と php artisan key:generate を確認。
  • Class "Post" not found → ファイル先頭の use App\Models\Post; が抜けている。
  • マイグレーションのエラー → php artisan migrate:fresh でやり直せます(データは消えます。練習中だけ)。

まとめ

  • フレームワークは「毎回必要なもの」と「置き場所のルール」を用意したもの。
  • Laravel はルート → コントローラ → モデル → ビューの流れ(MVC)。
  • {{ }} で自動エスケープ、Eloquent で SQL インジェクション対策が組み込み。
  • まずはルートとビューで1ページ。次に DB、CRUD、認証の順で。

次は「AWS で Web サイトを公開するまでの全体像」です。作ったものを、インターネットに出します。

公開教材の一覧へ