Chapter 1: Laravelの紹介
Laravelは、PHPで書かれたオープンソースのWebアプリケーションフレームワークです。MVC(Model-View-Controller)アーキテクチャに基づいており、開発者が効率的にWebアプリケーションを構築できるように設計されています。豊富な機能と優れたドキュメントが特徴です。
Chapter 2: 開発環境のセットアップ
Laravelを使用するには、PHP、Composer、およびLaravel自体をインストールする必要があります。以下のコマンドで新しいLaravelプロジェクトを作成できます:
composer create-project --prefer-dist laravel/laravel myApp
Chapter 3: Laravelのディレクトリ構造
Laravelのディレクトリ構造は、アプリケーションの異なる部分を整理するために設計されています。主なディレクトリには、app
、config
、database
、resources
、routes
などがあります。
Chapter 4: ルーティングの基本
Laravelのルーティングは、routes/web.php
で定義されます。シンプルなルートは次のように記述します:
Route::get('/', function () {
return view('welcome');
});
Chapter 5: コントローラとビュー
コントローラは、アプリケーションのロジックを管理します。以下のコマンドでコントローラを作成できます:
php artisan make:controller MyController
ビューはresources/views
に保存され、Blade
テンプレートエンジンを使用します。
Chapter 6: Bladeテンプレートエンジン
Bladeは、Laravelのテンプレートエンジンで、HTMLとPHPを組み合わせて動的なビューを作成します。@extends
や@section
を使用してテンプレートを構築します。
Chapter 7: データベース設定とマイグレーション
config/database.php
でデータベース接続を設定します。マイグレーションは、データベーススキーマを管理するために使用されます。以下のコマンドでマイグレーションを作成します:
php artisan make:migration create_users_table
Chapter 8: Eloquent ORMの基本
Eloquentは、LaravelのORM(オブジェクトリレーショナルマッピング)で、データベースとのやり取りを簡単にします。モデルはapp/Models
に保存され、以下のコマンドで作成します:
php artisan make:model User
Chapter 9: CRUD操作の実装
Eloquentを使用して、基本的なCRUD(Create, Read, Update, Delete)操作を実装します。例えば、新しいレコードを作成するには:
$user = new User;
$user->name = 'Taro';
$user->save();
Chapter 10: フォーム処理とバリデーション
フォームからのデータを受け取り、バリデーションを行います。$request->validate()を使用して、入力データを検証します。
フォームの作成
まず、ユーザー情報を入力するためのフォームを作成します。
ビューの作成
resources/views/user_form.blade.php
を作成します。
@extends('layouts.app')
@section('content')
<div class="container">
<h1>User Form</h1>
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<form action="{{ route('user.store') }}" method="POST">
@csrf
<div class="form-group">
<label for="name">Name</label>
<input type="text" class="form-control" id="name" name="name" value="{{ old('name') }}">
@error('name')
<small class="text-danger">{{ $message }}</small>
@enderror
</div>
<div class="form-group">
<label for="email">Email</label>
<input type="email" class="form-control" id="email" name="email" value="{{ old('email') }}">
@error('email')
<small class="text-danger">{{ $message }}</small>
@enderror
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
</div>
@endsection
ルートの設定
routes/web.php
にルートを追加します。
use App\Http\Controllers\UserController;
Route::get('/user/create', [UserController::class, 'create'])->name('user.create');
Route::post('/user', [UserController::class, 'store'])->name('user.store');
コントローラの作成
以下のコマンドでコントローラを作成します。
php artisan make:controller UserController
UserController
にフォームの表示とデータの保存ロジックを追加します。
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function create()
{
return view('user_form');
}
public function store(Request $request)
{
$validatedData = $request->validate([
'name' => 'required|max:255',
'email' => 'required|email|unique:users,email',
]);
// Assuming you have a User model
\App\Models\User::create($validatedData);
return redirect()->route('user.create')->with('success', 'User created successfully.');
}
}
バリデーションの説明
-
$request->validate()
: このメソッドは、リクエストデータを検証し、失敗した場合は自動的にリダイレクトしてエラーメッセージを表示します。 -
required
: フィールドが必須であることを示します。 -
max:255
: フィールドの最大文字数を255文字に制限します。 -
email
: フィールドが有効なメールアドレス形式であることを確認します。 -
unique:users,email
:users
テーブルのemail
カラムに一意であることを確認します。
フォームの送信とエラーメッセージ
フォームを送信すると、バリデーションが実行され、エラーがあればビューに表示されます。成功した場合は、ユーザーが作成され、成功メッセージが表示されます。
これで、Laravelを使用したフォーム処理とバリデーションの基本的な実装が完了しました。これらのコードを使用して、フォームデータを安全に処理し、ユーザーにフィードバックを提供することができます。
Chapter 11: 認証の基本
Laravelは、認証機能を簡単に実装するための仕組みを提供しています。以下のコマンドで認証を設定します:
composer require laravel/ui
php artisan ui vue --auth
npm install && npm run dev
Chapter 12: 認可とポリシー
ポリシーを使用して、ユーザーのアクションを制御します。以下のコマンドでポリシーを作成します:
php artisan make:policy PostPolicy
Chapter 13: ミドルウェアの理解
ミドルウェアは、リクエストを処理する前にフィルタリングするために使用されます。以下のコマンドでミドルウェアを作成します:
php artisan make:middleware CheckAge
Chapter 14: ファイルアップロードとストレージ
ファイルアップロード機能を実装し、Storage
ファサードを使用してファイルを保存します。
ファイルアップロードの設定
ルート設定
routes/web.php
にルートを追加します。
Route::get('/upload', [FileController::class, 'create']);
Route::post('/upload', [FileController::class, 'store']);
コントローラの作成
以下のコマンドでコントローラを作成します。
php artisan make:controller FileController
FileController
に以下のコードを追加します。
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
class FileController extends Controller
{
public function create()
{
return view('upload');
}
public function store(Request $request)
{
$request->validate([
'file' => 'required|file|mimes:jpg,png,pdf|max:2048',
]);
$path = $request->file('file')->store('uploads');
return back()->with('success', 'File uploaded successfully.')->with('path', $path);
}
}
ビューの作成
resources/views/upload.blade.php
を作成します。
@extends('layouts.app')
@section('content')
<div class="container">
<h1>File Upload</h1>
@if (session('success'))
<div class="alert alert-success">
{{ session('success') }}
<p>Path: {{ session('path') }}</p>
</div>
@endif
<form action="/upload" method="POST" enctype="multipart/form-data">
@csrf
<div class="form-group">
<input type="file" name="file" class="form-control">
@error('file')
<small class="text-danger">{{ $message }}</small>
@enderror
</div>
<button type="submit" class="btn btn-primary">Upload</button>
</form>
</div>
@endsection
Chapter 15: LaravelでのAJAXリクエスト
AJAXを使用して非同期リクエストを送信し、データを取得します。ここでは、axios
を使用します。
AJAXリクエストの設定
ルート設定
routes/web.php
にルートを追加します。
Route::get('/ajax', [AjaxController::class, 'index']);
Route::get('/ajax/data', [AjaxController::class, 'getData']);
コントローラの作成
以下のコマンドでコントローラを作成します。
php artisan make:controller AjaxController
AjaxController
に以下のコードを追加します。
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class AjaxController extends Controller
{
public function index()
{
return view('ajax');
}
public function getData()
{
$data = ['message' => 'Hello, this is a message from the server!'];
return response()->json($data);
}
}
ビューの作成
resources/views/ajax.blade.php
を作成します。
@extends('layouts.app')
@section('content')
<div class="container">
<h1>AJAX Example</h1>
<button id="fetchData" class="btn btn-primary">Fetch Data</button>
<div id="data" class="mt-3"></div>
</div>
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script>
document.getElementById('fetchData').addEventListener('click', function () {
axios.get('/ajax/data')
.then(function (response) {
document.getElementById('data').innerHTML = response.data.message;
})
.catch(function (error) {
console.error('Error fetching data:', error);
});
});
</script>
@endsection
Chapter 16: LaravelでのAPI開発
Laravelを使用してRESTful APIを構築します。
API開発の設定
APIルート設定
routes/api.php
にルートを追加します。
use App\Http\Controllers\Api\PostController;
Route::apiResource('posts', PostController::class);
APIコントローラの作成
以下のコマンドでAPIコントローラを作成します。
php artisan make:controller Api/PostController --api
PostController
に以下のコードを追加します。
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Models\Post;
use Illuminate\Http\Request;
class PostController extends Controller
{
public function index()
{
return Post::all();
}
public function store(Request $request)
{
$request->validate([
'title' => 'required|max:255',
'content' => 'required',
]);
$post = Post::create($request->all());
return response()->json($post, 201);
}
public function show(Post $post)
{
return $post;
}
public function update(Request $request, Post $post)
{
$request->validate([
'title' => 'required|max:255',
'content' => 'required',
]);
$post->update($request->all());
return response()->json($post, 200);
}
public function destroy(Post $post)
{
$post->delete();
return response()->json(null, 204);
}
}
Chapter 17: Laravelでのテスト
ユニットテストと機能テストを作成して、アプリケーションの信頼性を確保します。以下のコマンドでテストを作成します:
php artisan make:test UserTest
Chapter 18: Laravelアプリケーションのデプロイ
本番環境へのデプロイ方法を学びます。Envoyer
やForge
などのツールを使用して、デプロイプロセスを自動化します。
Chapter 19: LaravelとVue.jsの統合
Vue.jsを使用して、モダンなフロントエンドを構築します。laravel/ui
パッケージを使用して、Vue.jsをプロジェクトに統合します。
ステップ1: Laravel/uiパッケージのインストール
まず、laravel/ui
パッケージをインストールして、Vue.jsをプロジェクトに統合します。
composer require laravel/ui
次に、Vue.jsのセットアップを行います。
php artisan ui vue
これにより、Vue.jsがセットアップされ、必要なフロントエンドのファイルが生成されます。
ステップ2: フロントエンドのビルド
Node.jsとnpmがインストールされていることを確認し、以下のコマンドを実行してフロントエンドの依存関係をインストールします。
npm install
npm run dev
これにより、resources/js
ディレクトリにあるVueコンポーネントがコンパイルされ、public/js
ディレクトリに出力されます。
ステップ3: Vueコンポーネントの作成
デフォルトでresources/js/components/ExampleComponent.vue
が作成されています。このコンポーネントをカスタマイズするか、新しいコンポーネントを作成できます。
新しいコンポーネントの作成
例えば、resources/js/components/HelloWorld.vue
という名前の新しいコンポーネントを作成します。
<template>
<div>
<h1>Hello, World!</h1>
<p>This is a Vue component integrated with Laravel.</p>
</div>
</template>
<script>
export default {
name: 'HelloWorld'
}
</script>
<style scoped>
h1 {
color: #42b983;
}
</style>
ステップ4: Vueコンポーネントの登録
resources/js/app.js
で新しいコンポーネントを登録します。
require('./bootstrap');
import { createApp } from 'vue';
import HelloWorld from './components/HelloWorld.vue';
const app = createApp({});
app.component('hello-world', HelloWorld);
app.mount('#app');
ステップ5: LaravelビューでVueコンポーネントを使用
LaravelのビューでVueコンポーネントを使用するには、resources/views/welcome.blade.php
などのBladeテンプレートに以下のように記述します。
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Laravel Vue Integration</title>
<link href="{{ mix('css/app.css') }}" rel="stylesheet">
</head>
<body>
<div id="app">
<hello-world></hello-world>
</div>
<script src="{{ mix('js/app.js') }}"></script>
</body>
</html>
ステップ6: サーバーの起動
Laravelサーバーを起動して、Vueコンポーネントが正しく表示されることを確認します。
php artisan serve
ブラウザでhttp://localhost:8000
にアクセスし、Hello, World!
メッセージが表示されることを確認してください。
これで、LaravelとVue.jsの基本的な統合が完了しました。このセットアップにより、Vue.jsを使用してモダンでインタラクティブなフロントエンドを構築できるようになります。Vueコンポーネントをさらにカスタマイズし、アプリケーションのニーズに合わせて拡張することができます。
Chapter 20: 高度な機能とヒント
キューの使用
Laravelのキューを使用して、時間のかかるタスクをバックグラウンドで処理します。以下は、メール送信をキューに入れる例です。
ジョブの作成
まず、ジョブを作成します。
php artisan make:job SendEmailJob
SendEmailJob
クラスを編集して、メール送信ロジックを追加します。
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use App\Mail\SampleMail;
use Mail;
class SendEmailJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $email;
public function __construct($email)
{
$this->email = $email;
}
public function handle()
{
Mail::to($this->email)->send(new SampleMail());
}
}
メールの作成
メールクラスを作成します。
php artisan make:mail SampleMail
SampleMail
クラスを編集して、メールの内容を設定します。
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class SampleMail extends Mailable
{
use Queueable, SerializesModels;
public function build()
{
return $this->view('emails.sample')
->subject('Sample Email');
}
}
キューのディスパッチ
コントローラや他の場所でジョブをディスパッチします。
use App\Jobs\SendEmailJob;
public function sendEmail()
{
$email = 'example@example.com';
SendEmailJob::dispatch($email);
}
キューの設定
.env
ファイルでキューの設定を行います。例えば、database
を使用する場合は以下のように設定します。
QUEUE_CONNECTION=database
キューテーブルを作成します。
php artisan queue:table
php artisan migrate
キューワーカーを起動します。
php artisan queue:work
イベントとリスナーの使用
Laravelのイベントとリスナーを使用して、アプリケーション内のさまざまなアクションに対応します。
イベントとリスナーの作成
イベントを作成します。
php artisan make:event UserRegistered
リスナーを作成します。
php artisan make:listener SendWelcomeEmail
UserRegistered
イベントを編集します。
namespace App\Events;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class UserRegistered
{
use Dispatchable, SerializesModels;
public $user;
public function __construct($user)
{
$this->user = $user;
}
}
SendWelcomeEmail
リスナーを編集します。
namespace App\Listeners;
use App\Events\UserRegistered;
use App\Mail\WelcomeMail;
use Mail;
class SendWelcomeEmail
{
public function handle(UserRegistered $event)
{
Mail::to($event->user->email)->send(new WelcomeMail());
}
}
イベントのディスパッチ
ユーザー登録時にイベントをディスパッチします。
use App\Events\UserRegistered;
public function register(Request $request)
{
$user = User::create($request->all());
event(new UserRegistered($user));
}
イベントとリスナーの登録
EventServiceProvider
でイベントとリスナーを登録します。
protected $listen = [
UserRegistered::class => [
SendWelcomeEmail::class,
],
];
ブロードキャストの使用
Laravelのブロードキャストを使用して、リアルタイムでクライアントにイベントを送信します。
ブロードキャストイベントの作成
ブロードキャストイベントを作成します。
php artisan make:event MessageSent
MessageSent
イベントを編集して、ブロードキャスト設定を行います。
namespace App\Events;
use Illuminate\Broadcasting\Channel;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class MessageSent implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $message;
public function __construct($message)
{
$this->message = $message;
}
public function broadcastOn()
{
return new PrivateChannel('chat');
}
}
ブロードキャストの設定
.env
ファイルでブロードキャストの設定を行います。
BROADCAST_DRIVER=pusher
config/broadcasting.php
でPusherの設定を行います。
クライアントでのリスニング
JavaScriptでイベントをリッスンします。resources/js/app.js
に以下を追加します。
import Echo from "laravel-echo";
window.Pusher = require('pusher-js');
window.Echo = new Echo({
broadcaster: 'pusher',
key: process.env.MIX_PUSHER_APP_KEY,
cluster: process.env.MIX_PUSHER_APP_CLUSTER,
encrypted: true
});
window.Echo.private('chat')
.listen('MessageSent', (e) => {
console.log('Message received:', e.message);
});
Chapter 21: CRUDアプリケーションと認証の作成
この章では、LaravelでCRUDアプリケーションを作成し、認証を実装します。
ステップ1: 認証の設定
まず、認証を設定します。以下のコマンドを実行して、認証用のビューとコントローラを生成します。
composer require laravel/ui
php artisan ui vue --auth
npm install && npm run dev
ステップ2: モデルとマイグレーションの作成
CRUD対象のモデルとマイグレーションを作成します。例えば、Post
モデルを作成します。
php artisan make:model Post -m
database/migrations
ディレクトリにあるマイグレーションファイルを編集して、必要なカラムを追加します。
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('content');
$table->timestamps();
});
マイグレーションを実行します。
php artisan migrate
ステップ3: コントローラの作成
CRUD機能を管理するコントローラを作成します。
php artisan make:controller PostController --resource
PostController
にCRUD操作を実装します。
public function index() {
$posts = Post::all();
return view('posts.index', compact('posts'));
}
public function create() {
return view('posts.create');
}
public function store(Request $request) {
$request->validate([
'title' => 'required|max:255',
'content' => 'required',
]);
Post::create($request->all());
return redirect()->route('posts.index');
}
public function show(Post $post) {
return view('posts.show', compact('post'));
}
public function edit(Post $post) {
return view('posts.edit', compact('post'));
}
public function update(Request $request, Post $post) {
$request->validate([
'title' => 'required|max:255',
'content' => 'required',
]);
$post->update($request->all());
return redirect()->route('posts.index');
}
public function destroy(Post $post) {
$post->delete();
return redirect()->route('posts.index');
}
ステップ4: ルートの設定
routes/web.php
にリソースルートを追加します。
Route::resource('posts', PostController::class)->middleware('auth');
ステップ5: ビューの作成
resources/views/posts
ディレクトリにビューを作成します。
index.blade.php
@extends('layouts.app')
@section('content')
<div class="container">
<h1>Posts</h1>
<a href="{{ route('posts.create') }}" class="btn btn-primary">Create New Post</a>
<table class="table mt-3">
<thead>
<tr>
<th>Title</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
@foreach ($posts as $post)
<tr>
<td>{{ $post->title }}</td>
<td>
<a href="{{ route('posts.show', $post->id) }}" class="btn btn-info">View</a>
<a href="{{ route('posts.edit', $post->id) }}" class="btn btn-warning">Edit</a>
<form action="{{ route('posts.destroy', $post->id) }}" method="POST" style="display:inline;">
@csrf
@method('DELETE')
<button type="submit" class="btn btn-danger">Delete</button>
</form>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
@endsection
create.blade.php
@extends('layouts.app')
@section('content')
<div class="container">
<h1>Create Post</h1>
<form action="{{ route('posts.store') }}" method="POST">
@csrf
<div class="form-group">
<label for="title">Title</label>
<input type="text" class="form-control" id="title" name="title" value="{{ old('title') }}">
@error('title')
<small class="text-danger">{{ $message }}</small>
@enderror
</div>
<div class="form-group">
<label for="content">Content</label>
<textarea class="form-control" id="content" name="content">{{ old('content') }}</textarea>
@error('content')
<small class="text-danger">{{ $message }}</small>
@enderror
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
</div>
@endsection
edit.blade.php
@extends('layouts.app')
@section('content')
<div class="container">
<h1>Edit Post</h1>
<form action="{{ route('posts.update', $post->id) }}" method="POST">
@csrf
@method('PUT')
<div class="form-group">
<label for="title">Title</label>
<input type="text" class="form-control" id="title" name="title" value="{{ old('title', $post->title) }}">
@error('title')
<small class="text-danger">{{ $message }}</small>
@enderror
</div>
<div class="form-group">
<label for="content">Content</label>
<textarea class="form-control" id="content" name="content">{{ old('content', $post->content) }}</textarea>
@error('content')
<small class="text-danger">{{ $message }}</small>
@enderror
</div>
<button type="submit" class="btn btn-primary">Update</button>
</form>
</div>
@endsection
show.blade.php
@extends('layouts.app')
@section('content')
<div class="container">
<h1>{{ $post->title }}</h1>
<p>{{ $post->content }}</p>
<a href="{{ route('posts.index') }}" class="btn btn-secondary">Back</a>
</div>
@endsection
ステップ6: 認証の確認
アプリケーションを実行し、ユーザーがログインしている場合にのみCRUD操作が可能であることを確認します。
これで、Laravelを使用した基本的なCRUDアプリケーションと認証の実装が完了です。各ステップを詳細に説明し、コード例を提供することで、初心者でも簡単に理解できるようにしています。
このチュートリアルをもとに、各章をさらに詳細に説明し、実際のコード例や実践的なヒントを追加することで、初心者向けの包括的なLaravelチュートリアルを作成することができます。