はじめに

編集

Laravelは、PHPのモダンなウェブアプリケーションフレームワークです。エレガントな構文と強力な機能を提供し、開発者の生産性を最大限に高めることができます。

インストール

編集

Composerを使用したインストール

編集

新しいLaravelプロジェクトを作成するには、以下の`Composer`コマンドを実行します:

composer create-project laravel/laravel example-app
cd example-app
php artisan serve

ルーティング

編集

基本的なルーティング

編集

routes/web.phpでルートを定義します:

use Illuminate\Support\Facades\Route;

Route::get('/', function () {
    return view('welcome');
});

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

パラメータ付きルート

編集
Route::get('/users/{id}', function ($id) {
    return 'User '.$id;
});

// オプションパラメータ
Route::get('/posts/{post?}', function ($post = null) {
    return $post ?? 'All posts';
});

コントローラー

編集

基本的なコントローラー

編集
コントローラーを生成:
php artisan make:controller UserController
コントローラーの実装例:
namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;

class UserController extends Controller
{
    public function index()
    {
        $users = User::all();
        return view('users.index', compact('users'));
    }

    public function show(User $user)
    {
        return view('users.show', compact('user'));
    }

    public function store(Request $request)
    {
        $validated = $request->validate([
            'name' => 'required|max:255',
            'email' => 'required|email|unique:users',
        ]);

        User::create($validated);
        return redirect()->route('users.index');
    }
}

Eloquent ORM

編集

モデルの作成

編集
php artisan make:model Post -m

モデルの基本的な使用

編集
namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    protected $fillable = [
        'title',
        'content',
        'user_id'
    ];

    public function user()
    {
        return $this->belongsTo(User::class);
    }

    public function comments()
    {
        return $this->hasMany(Comment::class);
    }
}

ビュー

編集

Bladeテンプレート

編集
resources/views/posts/show.blade.php
@extends('layouts.app')

@section('content')
    <div class="container">
        <h1>{{ $post->title }}</h1>
        
        <div class="content">
            {{ $post->content }}
        </div>

        @if($post->comments->count() > 0)
            <div class="comments">
                @foreach($post->comments as $comment)
                    <div class="comment">
                        <p>{{ $comment->content }}</p>
                        <small>By: {{ $comment->user->name }}</small>
                    </div>
                @endforeach
            </div>
        @endif
    </div>
@endsection

ミドルウェア

編集

カスタムミドルウェアの作成

編集
php artisan make:middleware CheckAge
namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;

class CheckAge
{
    public function handle(Request $request, Closure $next)
    {
        if ($request->age <= 18) {
            return redirect('home');
        }

        return $next($request);
    }
}

アーティザンコマンド

編集

よく使用するコマンド

編集
# マイグレーション
php artisan migrate
php artisan migrate:rollback
php artisan migrate:fresh

# キャッシュクリア
php artisan cache:clear
php artisan config:clear
php artisan view:clear

# 開発サーバー起動
php artisan serve

# リソースの作成
php artisan make:controller PostController --resource
php artisan make:model Post -mcr

テスト

編集

基本的なテストの作成

編集
namespace Tests\Feature;

use Tests\TestCase;
use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;

class UserTest extends TestCase
{
    use RefreshDatabase;

    public function test_user_can_be_created()
    {
        $userData = [
            'name' => 'Test User',
            'email' => 'test@example.com',
            'password' => 'my secret password'
        ];

        $response = $this->post('/api/users', $userData);

        $response->assertStatus(201);
        $this->assertDatabaseHas('users', [
            'email' => 'test@example.com'
        ]);
    }
}

セキュリティ

編集

CSRF保護

編集

フォーム内でCSRFトークンを含める:

<form method="POST" action="/profile">
    @csrf
    ...
</form>

認証

編集

auth.phpでガードを設定:

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],
    'api' => [
        'driver' => 'sanctum',
        'provider' => 'users',
    ],
],

キャッシュ

編集

キャッシュの基本的な使用

編集
use Illuminate\Support\Facades\Cache;

// キャッシュに値を保存
Cache::put('key', 'value', now()->addMinutes(10));

// キャッシュから値を取得
$value = Cache::get('key', 'default');

// キャッシュが存在しない場合にコールバックを実行
$value = Cache::remember('users', 3600, function () {
    return User::all();
});

キュー

編集

ジョブの作成と実行

編集
ジョブクラスの作成:
php artisan make:job ProcessPodcast
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;

class ProcessPodcast implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public function __construct(private $podcast)
    {
        $this->podcast = $podcast;
    }

    public function handle()
    {
        // ジョブの処理ロジック
    }
}
ジョブのディスパッチ:
ProcessPodcast::dispatch($podcast);