派遣で働くエンジニアのスキルアップを応援するサイト

PRODUCED BY RECRUIT

Laravelってどんなの?フレームワークを実例で紹介

PHPはWordPressなどのCMSで使われるだけでなく、Laravel(ララベル)やCakePHPなどのフレームワークを導入して使うことが多いものです。今回は、PHP製のフレームワークの中でも「Laravel」というフレームワークがなぜ多くの注目を集めているのか、その理由と特徴について解説します。

Laravelが人気を集める理由

前回の記事では、PHPの特徴としてフレームワークが活発に開発されていることを解説しました。

多くのフレームワークはMVC(Model-View-Controller)と呼ばれるアーキテクチャを採用しています。これは、プログラムの構成を「ビジネスロジック」と「ユーザーインターフェイス」、「制御」の3つに分離する手法を指します。

MVCのように分割することで、ソースコードの保守性が高まることや、プログラマとデザイナーなどの役割分担ができることを期待できます。

ただし、このようなMVCの考え方を採用しているのはLaravelだけでなく、CakePHPやCodeIgniterなどのフレームワークでも同じです。

それでもLaravelが人気を集める理由として、次のようなものが挙げられます。

■ORM(Object-Relational Mapping)

PHPなどのプログラミング言語ではメモリ上にデータを保持して処理しますが、プログラムの実行が終わったあとにデータを保管しておかなければなりません。

このとき、データベースを使いますが、メモリ上のオブジェクトをリレーショナルデータベースに保存しなければなりません。このとき、ORMという手法が使われます。

Laravelでは「Eloquent ORM」という直感的な記述が用意されており、使い勝手が良いことが特徴です。データベースを扱うときにも複雑なSQL文を書く必要がなく、初心者に優しいと言えます。

■artisanコマンド

Laravelにはartisanというコマンドラインツールが付属しています。

上記で紹介したMVCに沿ったソースコードを自動生成できるだけでなく、テストやタスクスケジューリングなど、さまざまなタスクをコマンドだけで実行できるため、効率よく開発できます。

■豊富なドキュメントとコミュニティ

Laravelは公式のドキュメントが細かく理解しやすい構成で記述されています。新たな機能が追加されたり、中身が更新されたりするたびに更新されているため、最新の情報を迅速にキャッチアップできます。

さらに、オンラインやオフラインの開発者のコミュニティが豊富に存在し、疑問があっても気軽に質問できる環境が整っています。

■セキュリティ

上記のORMによってSQLインジェクションと呼ばれる攻撃に対するリスクを低減できますし、テンプレートエンジンによってクロスサイトリクエストフォージェリ(CSRF)やクロスサイトスクリプティング(XSS)などを考慮した実装を容易に実現できます。

LaravelでのORMを見てみる

上記で紹介した特徴のうち、ORMについてもう少し詳しく解説します。たとえば、データベースに「users」というテーブルがあり、利用者の情報が格納されているとします。

▼usersテーブル

このテーブルから、idが1のデータを抽出するとき、PHPの標準で用意されている機能を使うと、次のようなプログラムが考えられます(現時点では理解できる必要はありません)。

<?php

$host = 'localhost'; // データベースのホスト名
$db   = 'database_name'; //データベース名
$user = 'username'; // データベースのユーザー名
$pass = 'password'; // データベースのパスワード
$charset = 'utf8mb4'; // 文字コード

$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$opt = [
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
];

// データベースへの接続
$pdo = new PDO($dsn, $user, $pass, $opt);

// SQLの実行
$sql = "SELECT * FROM users WHERE id = ?";
$stmt = $pdo->prepare($sql);
$stmt->execute([1]);

// 結果の取得と表示
while ($row = $stmt->fetch()){
   echo $row;
}

Laravelを使うと、これを次のように書けます。

<?php

namespace App\Http\Controllers;

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

class UserController extends Controller
{
    public function getUser()
    {
        $user = User::find(1);
        
        if($user) {
            return response()->json($user, 200);
        }
        
        return response()->json('User not found', 404);
    }
}

同じプログラミング言語とは思えないほど、見た目が違うことがわかります。ここでは、このプログラムの目的である「usersテーブルからidが1のデータを抽出する」という部分に注目します。

1つ目のプログラムでは、次のようにSQLを記述しています。

// SQLの実行
$sql = "SELECT * FROM users WHERE id = ?";
$stmt = $pdo->prepare($sql);
$stmt->execute([1]);

一方で、2つ目のLaravelのプログラムでは次のように記述しています。

$user = User::find(1);

どちらがわかりやすいかは一目瞭然でしょう。そして、セキュリティ面で考えても脆弱性を作り込みにくいため、Laravelの方法は有効だと言えます。

artisanコマンドを見てみる

LaravelでMVCモデルに沿ってソースコードを記述すると言われても、初心者の頃はどうやって書けばいいかわからないものです。そんなときに役立つのが、「人気を集める理由」の2つ目で紹介したartisanコマンドです。

Laravelをインストールした状態でartisanコマンドを使用すると、テンプレートとなるソースコードを自動生成できます。

たとえば、モデルを生成するには、次のようなコマンドを実行します。

$ php artisan make:model Post

これを実行すると、次のようなソースコードが生成されます。

app/Models/Post.php
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    use HasFactory;
}

また、コントローラーを作成するには、次のようなコマンドを実行します。

$ php artisan make:controller PostController --resource

これにより、次のようなソースコードが生成されます。

app/Http/Controllers/PostController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class PostController extends Controller
{
    /**
     * Display a listing of the resource.
     */
    public function index()
    {
        //
    }

    /**
     * Show the form for creating a new resource.
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     */
    public function show(string $id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     */
    public function edit(string $id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     */
    public function update(Request $request, string $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     */
    public function destroy(string $id)
    {
        //
    }
}

さらに、ビューを作成するには、次のようなコマンドを実行します。

$ php artisan make:view post

これにより、次のようなHTMLを書いたソースコードが生成されます。

resources/views/post.blade.php
<div>
    <!-- Well begun is half done. - Aristotle -->
</div>

このように、コマンドを実行するだけでMVCモデルに沿ったソースコードを適切な場所に自動生成でき、設定ファイルを少し変更するだけでとりあえず動く画面を生成できます。ただし、ここから先はHTMLやCSSの他、Webで使われるHTTPなどについて知らないと何もできません。

そこで、次回はこれらの関連技術について解説します。

【筆者】増井 敏克さん
増井技術士事務所代表。技術士(情報工学部門)。情報処理技術者試験にも多数合格。ビジネス数学検定1級。「ビジネス」×「数学」×「IT」を組み合わせ、コンピュータを「正しく」「効率よく」使うためのスキルアップ支援や、各種ソフトウェアの開発、データ分析などを行う。著書に『Pythonではじめるアルゴリズム入門』『図解まるわかり プログラミングのしくみ』『「技術書」の読書術 達人が教える選び方・読み方・情報発信&共有のコツとテクニック』、最新刊の『実務で使える メール技術の教科書』(以上、翔泳社)がある。

※本記事に記載されている会社名、製品名はそれぞれ各社の商標および登録商標です。

リクルートスタッフィング