フレームワーク

PHP Laravel フレームワークの基本と応用について解説

PHP Laravel のダウンロードと使い方について、効率的なWebアプリケーション開発をサポートする内容を解説します。

既に開発環境が整っている方向けに、Laravelのインストール手順や基本操作、MVCアーキテクチャ、Eloquent ORM、artisanコマンドなど主要な機能を分かりやすく紹介いたします。

これにより、実践的な開発手法を確認しながら、スムーズなWebアプリケーション作成が進められます。

Laravelのインストールと初期設定

システム要件の確認

Laravelを快適に利用するためには、利用するPHPバージョンや拡張モジュールに注意が必要です。

例えば、Laravel 8.xの場合、PHP 7.3以上が必要です。

また、OpenSSL、PDO、Mbstring、Tokenizer、XMLなどの拡張モジュールも有効になっているか確認してください。

システムの要件を確認することで、後のトラブルを未然に防ぐことができます。

Composerの導入

LaravelはComposerというパッケージ管理ツールを用いてインストールします。

まずは、Composerがすでにインストールされているか、以下のコマンドでバージョンを確認してください。

composer --version
Composer version 2.x.x 2023-xx-xx xx:xx:xx

もしインストールされていない場合は、Composer公式サイトの指示に従いインストールしてください。

Laravelのインストール手順

LaravelのインストールはComposerを利用して行います。

下記のコマンドを実行して、新しいLaravelプロジェクトを作成してください。

composer create-project --prefer-dist laravel/laravel example-app
Installing laravel/laravel (v8.x.x)

  - Installing laravel/laravel (v8.x.x): Downloading (100%)

Created project in example-app

この手順により、Laravelの必要な依存パッケージも同時に導入され、プロジェクトが作成されます。

プロジェクト構成と基本設定

ディレクトリ構造の把握

Laravelプロジェクトのディレクトリ構造は以下のように整理されています。

  • app/

ビジネスロジックや各種モデル、コントローラーが配置されています。

  • routes/

WebルーティングやAPIルーティングの定義ファイルがここにあります。

  • resources/

ビューや言語ファイル、未コンパイルのアセットが含まれます。

  • config/

各種設定ファイルが格納されています。

プロジェクト内の各ディレクトリの役割を理解することで、必要なコードや設定ファイルを迅速に特定できます。

環境設定ファイル(.env)の調整

Laravelでは、.envファイルを用いて環境設定を一元管理しています。

環境変数の設定

.envファイル内では、データベースの接続情報やアプリケーションのキー、デバッグモードなどを設定します。

例えば、以下のようにデータベースの接続情報を記述することができます。

APP_NAME=LaravelApp
APP_ENV=local
APP_KEY=base64:ランダムな文字列
APP_DEBUG=true
APP_URL=http://localhost
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_db
DB_USERNAME=root
DB_PASSWORD=secret

ローカル環境の確認

.envで設定した内容が正しく適用されているかを確認するため、以下のコマンドで開発用サーバーを起動してください。

php artisan serve
Laravel development server started: <http://127.0.0.1:8000>

ブラウザで指定のURLにアクセスし、Laravelのウェルカムページが表示されれば問題なく動作しています。

MVCアーキテクチャの利用

ルーティングの設定

Laravelでは、ルーティングファイルroutes/web.phpにより、HTTPリクエストと処理内容の関連付けを行います。

web.phpの基本設定

routes/web.phpには、ホームページなどの基本的なルートが記述されています。

下記は、シンプルなルートのセットアップ例です。

Route::get('/', function () {
    return view('welcome'); // welcome.blade.phpを表示
});
// ブラウザでアクセスすると、Laravelのデフォルトウェルカムページが表示されます。

コントローラーの作成

ルーティングから分離してビジネスロジックを管理するために、コントローラーが利用されます。

artisanコマンドによる生成

コントローラーは、artisanコマンドを用いて自動生成が可能です。

下記のコマンドは、SampleControllerを作成する例です。

php artisan make:controller SampleController

生成されたファイルはapp/Http/Controllers/SampleController.phpに配置されます。

メソッド構造の確認

コントローラー内では、各アクションごとにメソッドが定義されています。

例えば、以下のようなメソッドが用意されることが一般的です。

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class SampleController extends Controller
{
    // データを取得してビューに渡すメソッド
    public function index()
    {
        $data = ['message' => 'サンプルのデータ']; // サンプルデータ
        return view('sample', $data);
    }
}
// ブラウザ上で"/sample"ルートが設定されていれば、'sample.blade.php'にデータが渡されます。

ビューの作成

Laravelでは、ビューとしてBladeテンプレートが標準的に利用されます。

Bladeテンプレートの利用

Bladeテンプレートは、簡潔な記述と条件分岐、ループ等のテンプレートディレクティブをサポートしています。

下記は、resources/views/sample.blade.phpのサンプルコードです。

<!-- resources/views/sample.blade.php -->
<html>
<head>
    <title>サンプルページ</title>
</head>
<body>
    <h1>サンプルページです</h1>
    <!-- 条件分岐の例 -->
    @if(true)
        <p>Bladeテンプレートが正しく動作しています。</p>
    @endif
</body>
</html>
<!-- ブラウザでは、タイトルと"サンプルページです"、および条件分岐による内容が表示されます。 -->

Eloquent ORMによるデータ操作

モデルの生成

LaravelのEloquent ORMでは、データベースとの連携がシンプルに行えます。

artisanコマンドでのモデル作成

モデルは、artisanコマンドで簡単に生成できます。

例えば、Productモデルを作成する場合は、下記のコマンドを実行してください。

php artisan make:model Product -m
Model created successfully.
Created Migration: YYYY_MM_DD_HHmmss_create_products_table.php

マイグレーションとの連携

生成されたマイグレーションファイルを編集して、productsテーブルの構造を定義します。

下記は、サンプルのマイグレーションファイルの内容です。

<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateProductsTable extends Migration
{
    public function up()
    {
        Schema::create('products', function (Blueprint $table) {
            $table->id();
            $table->string('name');  // 商品名
            $table->integer('price'); // 価格
            $table->timestamps();
        });
    }
    public function down()
    {
        Schema::dropIfExists('products');
    }
}
// マイグレーションの実行後、データベースにproductsテーブルが作成されます。

CRUD操作の実装

Eloquentを利用すると、データの取得、保存、更新、削除が直感的に行えます。

データ取得と保存

下記は、既存のProductデータを取得し、更新するサンプルコードです。

<?php
use App\Models\Product;
// IDが1のデータを取得
$product = Product::find(1);
if ($product) {
    $product->name = '更新後の商品名';  // 商品名を変更
    $product->save();  // 変更を保存
} else {
    // 新規作成の場合のサンプルコード
    $product = new Product();
    $product->name = '新規商品';
    $product->price = 1000;
    $product->save();
}
// データベース側に、更新もしくは新規作成した商品の情報が反映されます。

リレーションシップの設定

Eloquentでは、モデル間でのリレーションシップを定義でき、関連するデータの取得が容易です。

例えば、OrderモデルとProductモデルを関連付ける場合、以下のように記述します。

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Order extends Model
{
    // 1つの注文が複数の商品を持つ設定
    public function products()
    {
        return $this->hasMany(Product::class);
    }
}
// $order->products()で、該当注文に紐づく複数の商品情報を取得できます。

artisanコマンドを活用した開発効率向上

リソース自動生成の利用

Laravelのartisanコマンドを利用することで、各種リソースを自動生成でき、開発効率が向上します。

コントローラー・モデル作成

リソースコントローラーは、CRUD機能が標準で用意されているため、下記のように生成してください。

php artisan make:controller OrderController --resource
Controller created successfully.

また、モデルと同時にマイグレーションも生成する場合は、下記のコマンドを利用してください。

php artisan make:model Order -m
Model and migration created successfully.

テストやデバッグの補助コマンドの使用

Laravelはテストやデバッグを容易にするための補助コマンドが豊富です。

例えば、対話的にモデルを操作できるtinkerを利用する方法は以下の通りです。

php artisan tinker
Psy Shell v0.10.x (PHP x.x.x — cli) by Justin Hileman
>>>

tinker上で各種Eloquent操作を試すことで、リアルタイムにコードの動作確認が可能となります。

セキュリティ対策の設定

CSRF対策と認証機能

Laravelでは、フォーム送信時に@csrfディレクティブを利用することで、クロスサイトリクエストフォージェリ(CSRF)対策が自動で行われます。

下記は、Bladeテンプレート内でのフォーム記述例です。

<form action="/submit" method="POST">
    @csrf  <!-- CSRFトークンを自動挿入 -->
    <input type="text" name="name" placeholder="名前">
    <button type="submit">送信</button>
</form>
// このフォーム送信時に、サーバー側でCSRFトークンの検証が実行されます。

Laravelには、認証機能のための仕組みも用意されており、php artisan make:auth(バージョンにより利用方法が異なる)が利用可能です。

SQLインジェクション防止機能

Eloquent ORMやクエリビルダーは、パラメータバインディングを利用してSQLインジェクション攻撃を防止しています。

例えば、下記のコードではユーザー入力がエスケープされ、セキュリティが確保されます。

<?php
use Illuminate\Support\Facades\DB;
$userId = 1;
$user = DB::table('users')->where('id', $userId)->first();
// ユーザーIDに基づき、正しくユーザーデータが取得されます。

エラーハンドリングとログ管理

Laravelのログ管理機能を利用することで、エラーの発生状況やデバッグ情報を記録できます。

下記は、例外処理とログ出力のサンプルコードです。

<?php
use Illuminate\Support\Facades\Log;
try {
    // データベース処理などの実行
    $result = performDatabaseOperation();
} catch (\Exception $e) {
    // エラーメッセージをログに出力
    Log::error('データベース処理中にエラーが発生しました: ' . $e->getMessage());
    // 必要に応じて適切なエラーレスポンスを返す
}
// エラー発生時にログファイルに、エラーメッセージが記録されます。

以上が、Laravelの基本的なインストール・初期設定から、プロジェクト構成、MVCアーキテクチャの活用、Eloquent ORMによるデータ操作、artisanコマンドを活用した開発効率向上、そしてセキュリティ対策の設定まで、広範なテーマの解説になります。

まとめ

本記事では、Laravelの導入や初期設定、プロジェクト構成の理解、MVCアーキテクチャの活用方法、Eloquent ORMによるデータ操作、artisanコマンドを使った開発効率向上、さらにはセキュリティ対策について解説しています。

サンプルコードを交えながら、Laravelを実践的に利用するための具体的な手順と各機能の使い方が理解できる内容になっています。

Back to top button
目次へ