第3回まで無料

PHP & Laravel 入門コース

PHP 8.5 の環境構築から、変数と配列・関数とクラス・素の PHP で書くフォームとデータベース・Laravel 13 のルーティングと Blade・Eloquent・認証と認可・キューとメール・API、そして Docker でのデプロイまで。全50レッスンで「会員制のアプリを作って公開できる」ところまで進みます。コードと実行結果は、すべて PHP 8.5.8・Laravel 13.31.0 で実際に動かしたものです。

カリキュラム

全50レッスンを7つの章に分けています。第1章から順に進めるのがおすすめですが、 気になるところだけ拾い読みしてもかまいません。 ※ PHP と Laravel はブラウザ内で実行できないため、第2回で入れる PHP 8.5 と、第22回で作る Laravel 13 のアプリで試してください。

Chapter 1 — PHP を始める(第1〜7回)

PHP を入れて、コマンドとビルトインサーバーの 2 通りで動かすところから始めます。変数と型・文字列・配列・条件分岐・ループまで、PHP 8.5 の書き方と比較のくせを押さえます。

1

PHP とは(コマンドとビルトインサーバー)

PHP がどこで動くのかの整理と、php コマンド・ビルトインサーバーで動かす最初のプログラム。このコースの約束ごとである、PHPUnit のテストの形まで。

Free
2

環境構築とビルトインサーバー

PHP 8.5 の入れ方と、必要な拡張機能がそろっているかの確かめ方。php -S で開くビルトインサーバーと、cli・cli-server の違い、public だけを公開する理由。

Free
3

変数と型(== と ===)

$ で始まる変数と、入れた値で決まる 6 つの型。== と === の違い、PHP 8 で変わった文字列と数の比較、0.1 + 0.2 の誤差とお金を int で持つ理由。

Free
4

文字列と数値(mb_ と round)

「"」と「'」の違いとヒアドキュメント、日本語の文字数を数える mb_ の関数、sprintf の幅がバイトで数えられる落とし穴、PHP 8.4 から選べる round の丸め方。

🔒 ベーシック
5

配列(array_first / array_last)

リストと連想配列を 1 つの形で扱う PHP の配列。array_filter・array_map での選び方と変え方、usort と宇宙船演算子、PHP 8.5 の array_first / array_last、isset と array_key_exists の違い。

🔒 ベーシック
6

条件分岐と match

上から順に調べる if・elseif・else と、=== で比べて値を返す PHP 8 の match 式。switch との違い、match (true) での範囲の分岐、?? と ?: の使い分け。

🔒 ベーシック
7

ループ(& 参照の落とし穴)

回数で回す for、配列を回す foreach、条件で回す while。continue と break、ループを重ねた九九の表、foreach の & のあとに unset しないと最後の要素が書き換わる落とし穴。

🔒 ベーシック

Chapter 2 — 関数とオブジェクト指向(第8〜14回)

関数とクロージャ、型宣言と strict_types から、クラス・継承・インターフェース・トレイトへ進みます。名前空間と Composer のオートロード、例外と enum まで、Laravel のコードを読むための土台をそろえます。

8

関数(クロージャとパイプ演算子)

既定値・名前付き引数・可変長引数で呼びやすくする関数の形。use と fn で外の変数を取り込むクロージャ、PHP 8.5 のパイプ演算子 |>、関数を値として渡す書き方。

🔒 ベーシック
9

型宣言と strict_types

引数と戻り値に書く型、ユニオン型と ?string、void と never。declare(strict_types=1) の効き目が「呼ぶ側」のファイルで決まる理由と、int から float へだけは通るルール。

🔒 ベーシック
10

クラスとオブジェクト(プロパティ フック)

データと処理をまとめるクラスと、new で作るオブジェクト。public・private と PHP 8.4 の private(set)、コンストラクタのプロモーションと readonly、__toString、プロパティ フック。

🔒 ベーシック
11

継承とインターフェース(トレイト)

「何ができるか」を約束するインターフェース、共通の親になる抽象クラス、extends での継承とポリモーフィズム、関係の無いクラスに部品を差し込むトレイトの使い分け。

🔒 ベーシック
12

名前空間(namespace と use)

同じ名前のクラスを区別する名前空間と、フォルダの形との対応。use と as での短い名前と別名、::class で取り出す正式な名前、先頭の \ が要る場面。

🔒 ベーシック
13

Composer とオートロード

PHP のパッケージを入れる Composer と、composer.json・composer.lock の役割。PSR-4 のオートロードで require を書かずにクラスを使う形と、Carbon で扱う日付。

🔒 ベーシック
14

例外と enum

決まった選択肢をバックト enum で表し、from と tryFrom で文字列から変える形。自分の例外クラスでしてはいけない操作を止め、try・catch・finally で受け止める書き方。

🔒 ベーシック

Chapter 3 — PHP で Web を作る(第15〜21回)

フレームワークを使わずに、リクエストとレスポンス・エスケープ・セッション・PDO・SQL インジェクション対策・CSRF 対策を自分で書きます。最後は素の PHP で掲示板を 1 本作ります。

15

リクエストとレスポンス

リクエスト(メソッド・パス・クエリ)から、レスポンス(状態コード・ヘッダー・本文)を作る Web のプログラムの基本の形。フロントコントローラとルーティング、curl -i での確かめ方。

🔒 ベーシック
16

フォームとエスケープ(XSS)

フォームの 3 つの仕事(受け取る・確かめる・安全に出す)。htmlspecialchars でのエスケープと XSS、サーバーで必ず行うバリデーション、value に残す値のエスケープ。

🔒 ベーシック
17

セッションと Cookie

前のリクエストを覚えていない HTTP で、状態を覚える Cookie とセッション。HttpOnly・SameSite・Secure の設定、ログインでセッション ID を作り直す理由、headers already sent の直し方。

🔒 ベーシック
18

PDO で DB 接続(トランザクション)

PHP からデータベースを使う PDO と、PHP 8.4 の PDO::connect。exec・prepare・execute・fetch の使い分け、データの出し入れをリポジトリにまとめる形、全部か何もしないかのトランザクション。

🔒 ベーシック
19

SQL インジェクション対策

文字列をつなげて作った SQL に攻撃の文字列を送り、条件の書き換えと別の列の漏れを練習用のデータベースで確かめる回。プリペアドステートメントでの防ぎ方、LIKE の % と _、列の名前は決まった値だけを許す形。

🔒 ベーシック
20

CSRF 対策とパスワード

罠のサイトから勝手に送信させる CSRF を、セッションのトークンと hash_equals で防ぐ形。パスワードを password_hash で元に戻せない形にして保存し、PHP 8.4 で 12 に上がった bcrypt の強さと作り直しの判断。

🔒 ベーシック
21

【実践】素の PHP で掲示板

第15〜20回の技を 1 つのアプリにまとめる、フレームワークなしのひとこと掲示板。CSRF の確認 → 入力の確認 → 保存 → 303 で移動の順番と PRG パターン、データベースと時刻を外から渡してテストしやすくする形。

🔒 ベーシック

Chapter 4 — Laravel の基礎(第22〜29回)

Laravel 13 を入れ、ルーティング・コントローラ・Blade・バリデーション・フォームリクエスト・フラッシュメッセージを扱います。最後はリソースコントローラでメモアプリを作ります。

22

Laravel 13 のインストール

composer create-project で Laravel 13 を入れ、自動で作られる .env・APP_KEY・SQLite のファイルとテーブルを確かめる回。フォルダの役目、artisan の about と serve、routes/web.php に足す最初のページとテスト。

🔒 ベーシック
23

ルーティング(引数・名前付きルート・グループ)

routes/web.php に書くルートと、route:list での一覧。{id} と whereNumber、無くてもよい {slug?}、名前付きルートと route() が作る URL の先頭になる APP_URL、prefix と name のグループ。

🔒 ベーシック
24

コントローラ(サービスコンテナ)

make:controller で作るコントローラと、[クラス, 'メソッド'] でのルートとのつなぎ方。1 つの処理だけの __invoke、コンストラクタに型を書くだけで部品が届くサービスコンテナと、テストでの偽物への差し替え。

🔒 ベーシック
25

Blade テンプレート({{ }} とコンポーネント)

view() で値を渡して HTML を作る Blade。自動でエスケープする {{ }} と、そのまま出す {!! !!} の使い分け、@if・@forelse・@include、共通の枠を作るコンポーネントと @props・$slot・$attributes。

🔒 ベーシック
26

フォームとバリデーション(419)

ルールを並べるだけの $request->validate と、合わなければ前のページへ戻る流れ。$errors・@error・old() でのエラーと入力値の表示、@csrf を忘れたときの 419 Page Expired。

🔒 ベーシック
27

フォームリクエスト

バリデーションを 1 つのクラスに分けるフォームリクエスト。雛形の authorize() が false で 403 になる落とし穴、prepareForValidation と after、フォームなら前のページへ・JSON なら 422、保存するのは validated() の値。

🔒 ベーシック
28

セッションとフラッシュ(暗号化された Cookie)

session() の get・put・increment・push・pull で作る買い物のカートと、back()->with() で渡すフラッシュメッセージ。@method で送る DELETE、Laravel が暗号化して送る Cookie と、書き換えたときの扱い。

🔒 ベーシック
29

【実践】メモアプリ(リソースコントローラ)

第4章のまとめとして、一覧・作成・表示・編集・削除ができるメモアプリを作る回。Route::resource の 7 つのルート、JSON のファイルに保存する MemoStore、@method と nl2br(e()) の順番、Storage::fake でのテスト。

🔒 ベーシック

Chapter 5 — Eloquent とデータベース(第30〜37回)

マイグレーションでテーブルを作り、Eloquent モデルで読み書きします。リレーション・シーダーとファクトリ・クエリビルダ・N+1 を押さえ、最後はブログのデータ層を組み立てます。

30

マイグレーション

テーブルの形を PHP で書くマイグレーションの up と down。動いているテーブルは新しいマイグレーションで変える理由、migrate・migrate:status・migrate:rollback の流れ、SQLite では after() が効かない点。

🔒 ベーシック
31

Eloquent モデル

テーブル 1 つを 1 つのクラスで表す Eloquent のモデル。create・find・where・update・delete、Laravel 13 の #[Fillable] と #[Scope]、fillable に無い列が黙って捨てられる仕組み、幅で数える Str::limit。

🔒 ベーシック
32

CRUD(ルートモデル結合・ページ分け)

第29回のメモアプリを JSON のファイルから Eloquent に置き換える回。引数の型をモデルにするだけで {memo} からモデルが届くルートモデル結合、paginate と links() のページ分け、チェックボックスを boolean() でそろえる形。

🔒 ベーシック
33

リレーション(hasMany・belongsTo・belongsToMany)

外部キーの foreignId()->constrained() と cascadeOnDelete、多対多をつなぐ中間テーブル。hasMany・belongsTo・belongsToMany の書き方、プロパティとメソッドの違い、withCount・has・attach・sync・whereHas。

🔒 ベーシック
34

シーダーとファクトリ

それらしいデータを作るファクトリと、最初のデータを入れるシーダー。fake('ja_JP') の日本語のダミーデータ、make と create、for・recycle・has・Sequence、firstOrCreate で何度流しても同じにするシーダーと migrate:fresh --seed。

🔒 ベーシック
35

クエリビルダ(集計・結合・toRawSql)

DB::table() からメソッドをつないで SQL を組み立てるクエリビルダ。groupBy・join・leftJoin・when での集計と絞り込み、toRawSql で見る and と or の括弧、whereRaw に値を埋め込むと起きる SQL インジェクション。

🔒 ベーシック
36

N+1 と Eager Loading

一覧でリレーションをたどると 1 件ごとに SQL が走る N+1 問題を、クエリの記録で確かめる回。with・withCount・load での先読み、preventLazyLoading で開発中に気づく設定、Blade の中の例外が ViewException に包まれる点。

🔒 ベーシック
37

【実践】ブログのデータ層

第5章のまとめとして、ブログの記事・コメント・タグのテーブルとモデルとクエリを作る回。published_at 1 つで表す 3 つの状態と published() スコープ、日本語を消す Str::slug、PostFeed で SQL の回数を決まった数にする形。

🔒 ベーシック

Chapter 6 — 認証と実務機能(第38〜45回)

ログインを手で書いてから、認可のポリシー・ミドルウェア・ファイルアップロード・メール・キュー・API・スケジュールへ進みます。実務のアプリに要る部品を、1 つずつテストで確かめながら足していきます。

38

認証(手で書くログイン)

会員登録・ログイン・ログアウトを手で書き、Laravel が第17・20回の仕事をどう肩代わりするかを見る回。auth と guest のルート、Auth::attempt と regenerate、hashed の cast、throttle でのログインの総当たり対策。

🔒 ベーシック
39

認可とポリシー

「この人はこれをしてよいか」を決める認可を、ポリシーで書く回。雛形がどれも false を返す make:policy、before での管理者の扱い、Gate::authorize・ルートの can・画面の @can の 3 か所と、ボタンを隠すだけでは守れない理由。

🔒 ベーシック
40

ミドルウェア

リクエストがコントローラに届く前と、レスポンスが返る後に処理を差し込むミドルウェア。$next の前と後の書き分け、リクエスト ID・安全のヘッダー・プランの確認の 3 つの例、bootstrap/app.php での登録と route:list -v。

🔒 ベーシック
41

ファイルアップロード

公開してよい画像と本人だけのファイルを、public と local の 2 つのディスクに分けて受け取る回。enctype、File::image と File::types で中身から確かめる形、store が付けるランダムな名前、storage:link、日本語のファイル名のダウンロード。

🔒 ベーシック
42

メール送信(メーラブルと Mail::fake)

1 通のメールを表すメーラブルと、Markdown で書く本文のテンプレート。自分で足す設定ファイル、開発中は送らずにログに書く MAIL_MAILER=log、ブラウザでのプレビュー、Mail::fake でのテスト。

🔒 ベーシック
43

キューとジョブ

時間のかかる CSV の書き出しを、ジョブにして「あとで」動かす回。ShouldQueue と dispatch で 202 を返す形、モデルは ID だけが入る仕組み、$tries・$backoff・failed()、queue:work と queue:restart、3 通りのテストの仕方。

🔒 ベーシック
44

API と JSON(API リソース)

routes/api.php を足して作る、JSON を返す API。apiResource の 5 つのルート、外に見せる形を決める API リソース、201・204・404・422 の返し方、作った直後のモデルに入らないマイグレーションの既定値。

🔒 ベーシック
45

イベントとスケジュール

出来事とそのときの処理を分けるイベントとリスナー、自作の Artisan コマンドと終了コード、routes/console.php に書くスケジュールと cron の 1 行。withoutOverlapping に cache_locks テーブルが要る点まで。

🔒 ベーシック

Chapter 7 — 作って公開する(第46〜50回)

Http::fake やモックを使ったテスト、環境変数と config:cache、Docker でのデプロイ、パフォーマンスの勘所を扱います。最後は会員制のメモ帳を作って、全50回を振り返ります。

46

テスト(Http::fake・モック・時間)

Laravel に頼らない計算を確かめる Unit テストと、リクエストからの流れを確かめる Feature テスト。DataProvider で境目の値を並べる形、外部の API を止める Http::fake と preventStrayRequests、mock と travelTo。

🔒 ベーシック
47

環境変数と設定(config:cache)

その環境だけの値を置く .env と、設定の形と既定値を書く config/。env() が返す値の型、設定での機能の出し分け、config:cache のあとに config/ の外の env() が既定値になる落とし穴、本番の .env で気をつけること。

🔒 ベーシック
48

デプロイ(Docker)

Laravel のアプリを Docker のイメージにし、本番の設定で動かす回。2 段のビルドと --no-dev、公開は public/ だけ、秘密の値はイメージに入れない形、起動のたびの migrate --force と optimize、本番の設定を確かめる自作のコマンド。

🔒 ベーシック
49

パフォーマンスの勘所

遅くなる原因の多くを占める SQL の回数と重さを、数えて確かめながら減らす回。Cache::remember とキャッシュを捨てるとき、実行計画で見る索引、要る列だけの select、lazyById、3 種類のページ分け、まとめての update。

🔒 ベーシック
50

総まとめ(会員制のメモ帳)

シリーズのまとめとして、認証・ポリシー・フォームリクエスト・Eloquent・Blade・テストを 1 つにした会員制のメモ帳を作る回。1 つのリクエストが通る 6 つの部品、検索のスコープ、Model::shouldBeStrict、会員登録からログアウトまでのテスト。

🔒 ベーシック

全50レッスンを終えたら、次は索引と実行計画をくわしく学ぶ MySQL や、第44回で作った API とつなぐ画面を作る React へ。メンバーシップで全コースが解放されます。