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 を学ぶ順番
- ルート → ビュー(この記事)
- コントローラに処理を移す
- モデルとマイグレーションで DB を扱う
- フォームからの登録・編集・削除(CRUD)
- バリデーション(入力チェック)
- 認証(ログイン):
laravel/breezeを使うと数分で入ります - リレーション(記事とコメント、のような関係)
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 サイトを公開するまでの全体像」です。作ったものを、インターネットに出します。