PHPのWebアプリケーションフレームワーク「Laravel」でWeb APIを作成する

(2024年6月24日更新)

普段のお仕事に役立つ普遍的なプログラミングTIPSや、業界で注目度が高い最新情報をお届けする「編集部ピックアップ」。
今回はPHPのWebアプリケーションフレームワーク「Laravel(ララベル)」の開発環境を構築し、Web APIを作成する方法についてお届けします。

Laravelとは

LaravelはPHPで書かれたWebアプリケーションフレームワークです。.NETの開発に関わっていたTaylor Otwell氏を中心としたコミュニティが開発を続けています。

オープンソースのフレームワークであり、MITライセンスに基づいて商用利用もできます。

Laravelクイックスタート

Laravelの利用は非常に簡単です。以下の手順でセットアップしてみましょう。

開発環境

  • PHP 8.1.12
  • Laravel 11.11.1

XAMPPのインストール

LaravelはPHPのフレームワークなので、まずは開発環境にPHPをインストールする必要がありますが、「Apache Friends」が提供する「XAMPP」を使用することでPHPの開発環境を簡単に構築できます。

XAMPPの名前は、Apache、MariaDB、PHP、Perlの頭文字から構成されており、クロスプラットフォーム対応を意味する「X」が頭に付いています。
XAMPPは上記4つのソフトウェア+関連するツールなどがパッケージとしてまとめられているので、開発に必要なソフトウェアを一括でインストールできます。

上記の公式サイトよりお使いの環境のXAMPPのインストーラーを入手してインストールします。

インストールが完了すると以下のようなXAMPPのコントロールパネルで各種ソフトウェアを管理できるようになります。

XAMPPのコントロールパネル
XAMPPのコントロールパネル

Composerのインストール

次にPHPのパッケージ管理ツール「Composer」をインストールします。

上記のサイトよりインストーラーを入手してインストールします。

Laravelアプリケーションの作成

以上でLaravelのアプリケーションを作成する準備が整いました。以下のコマンドをターミナルなどから実行してLaravelのアプリケーションを作成します。

composer create-project laravel/laravel laravel-web-api --prefer-dist

アプリケーションが作成されたら、以下のコマンドを実行し、開発サーバーでアプリケーションを実行します。

cd laravel-web-api
php artisan serve

http://127.0.0.1:8000」にアクセスすると、以下のような画面が表示されます。

Laravelの実行

データベースの作成

データベースの設定

データベースの設定の作業に入る前に、「config/app.php」を以下のように修正し、あらかじめ関連するタイムゾーンやロケールなどを日本のものに修正しておきます。

・・・
(中略)
・・・
'timezone' => 'Asia/Tokyo',
・・・
(中略)
・・・
'locale' => 'ja',
・・・
(中略)
・・・
'faker_locale' => 'ja_JP',

Laravel 11ではデフォルトのデータベースとして「SQLite」となっており、「database」フォルダ配下にデフォルトで「database.sqlite」ファイルが作成されているのでそちらをそのまま使います。

Laravelでは「Migration」という機能を使用して、データベースの作成や管理が可能です。以下のコマンドを実行してモデルを作成します。allオプション(-a)を追加することで、コントローラーやマイグレーションにモデルが紐づくようにします。ファイル名は「Item」とします。

php artisan make:model -a Item

上記のコマンドを実行すると、「database/migrations」フォルダ配下にマイグレーションファイルが作成されるので、upメソッド内に商品名(product)、受注日(order_date)、受注数(order_count)のカラムを追加します。

public function up()
{
    Schema::create('items', function (Blueprint $table) {
        $table->id();
        // 追加
        $table->string('product');
        $table->date('order_date');
        $table->integer('order_count');
        $table->timestamps();
    });
}

以下のコマンドを実行してマイグレーションを実行します。

php artisan migrate

Laravelではテストデータの作成に使える「Factory」という機能があります。今回modelを作成した時に追加された、「ItemFactory.php」ファイルの「definition」メソッドに登録するデータを設定します。「faker」という機能を利用してランダムな値を登録しています。

public function definition()
{
    return [
        'product' =>$this->faker->randomElement(['果汁100%オレンジ', '果汁100%グレープ', '果汁100%レモン', '果汁100%ピーチ', 'コーヒーマイルド', 'コーヒービター', 'コーヒーミルク', 'ピリピリビール', 'オタル白ラベル', 'バードワイン']),
        'order_date' =>$this->faker->dateTimeBetween($startDate = 'now', $endDate = '+2 week')->format('Y-m-d'),
        'order_count' => $this->faker->numberBetween(1,30),
        'created_at' =>now(),
        'updated_at'=>now()
    ];
}

テストデータの作成

次に「Seeder」という機能を利用して、データベースにデータを挿入します。seedersフォルダの「ItemSeeder.php」ファイルを編集します。今回追加したいItemモデルをインポートしてrunメソッドを修正します。

<?php

namespace Database\Seeders;

use App\Models\Item;
use Illuminate\Database\Seeder;

class ItemSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run(): void
    {
        //factoryメソッドを実行し10件のデータを登録する
        Item::factory()->count(10)->create();
    }
}

次に、「DatabaseSeeder.php」ファイルのrunメソッドを修正し、先ほど設定したItemSeederが実行されるようにします。

・・・(中略)・・・
public function run(): void
{
    $this->call(ItemSeeder::class);
}
・・・(中略)・・・

以下のコマンドでSeederを実行してダミーデータを登録します。

php artisan db:seed

完了すると「Database seeding completed successfully.」のメッセージが表示されます。

あとは「tinker」を使用して、登録データの確認を行います。以下のコマンドを実行してtinkerを起動します。

php artisan tinker

tinkerのコンソールが起動したら、以下を入力します。データベースに登録したデータが一覧で表示されます。

App\Models\Item::all()
Seederで登録したデータの確認

Web APIの作成

データベースの設定が完了したら、次はWeb APIを作成していきます。Itemモデルに紐づいたControllerファイル「app/Http/Controllers/ItemController.php」を以下のように記述し、一覧取得(index)、新規作成(store)、更新(update)、削除(destroy)の処理を設定します。

・・・
(中略)
・・・
// 一覧取得(index)
public function index()
{
    return Item::all();
}
・・・
(中略)
・・・
// 新規作成(store)
public function store(Request $request)
{
    $item = Item::create($request->all());

    return $item
        ? response()->json($item, 201)
        : response()->json([], 500);
}
・・・
(中略)
・・・
// 更新(update)
public function update(Request $request, Item $item)
{
    $item->product = $request->product;
    $item->order_date = $request->order_date;
    $item->order_count = $request->order_count;

     return $item->update()
         ? response()->json($item)
         : response()->json([], 500);
}
・・・
(中略)
・・・
// 削除(Destroy)
public function destroy(Item $item)
{
    return $item->delete();
}

なお、Itemモデルのcreateメソッドを使用するには対象のカラムに対して割り当て許可が必要なので、以下のように$fillableに設定を追加します。

class Item extends Model
{
    use HasFactory;

    protected $fillable = [
        'product',
        'order_date',
        'order_count',
    ];
}

次に、「app/Http/Requests/StoreItemRequest.php」、「app/Http/Requests/UpdateItemRequest.php」のauthorizeメソッドに認可の処理を追加します。

・・・(中略)・・・
    public function authorize(): bool
    {
        return true;
    }
・・・(中略)・・・

次に「/items」にアクセスされた時にこのControllerが設定されるようにルーティングの設定を行います。Laravel 11でAPI関連の機能がデフォルトでインストールされなくなったので、以下のコマンドで別途インストールします。

php artisan install:api

「routes/api.php」ファイルが作成されるので、以下のように設定します。

<?php

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;

Route::apiResource('items', \App\Http\Controllers\ItemController::class);

以上でWeb APIの設定は完了です。以下のコマンドでAPIの一覧を取得できるので、ルーティングが正しく設定されたかを確認します。

php artisan route:list
APIの一覧

Web APIの実行

あとは実際にWeb APIを実行して動作を確認します。以下のコマンドを実行し、APIを起動します。

php artisan serve

APIを起動したら、Postmanなどのツールを使用してリクエストを送信し、テストしてみます。

GET(参照)

「http://127.0.0.1:8000/api/items」に対してGETリクエストを実行します。Seederで登録された10件のデータが取得されます。

POST(登録)

「http://127.0.0.1:8000/api/items」に対してPOSTリクエストを実行します。以下のJSONをBodyに追加して実行します。

{
    "product": "コーヒービター",
    "order_date": "2024-06-26",
    "order_count": "15"
}

PUT(更新)

「http://127.0.0.1:8000/api/items/11」に対してPUTリクエストを実行します。以下のJSONをBodyに追加し、先ほど登録したデータの製品名(product)の部分を更新します。

{
    "product": "コーヒーマイルド",
    "order_date": "2024-06-26",
    "order_count": "15"
}

DELETE(削除)

「http://127.0.0.1:8000/api/items/11」に対してDELETEリクエストを実行し、先ほど登録したデータを削除します。

おわりに

以上がLaravelの開発環境の構築と、簡単なWeb APIを実装する方法でした。次回はこのAPIと弊社のJavaScriptライブラリの連携方法についてご紹介したいと思います。

メシウスでは様々なWebアプリケーションフレームワークと一緒に使えるJavaScriptライブラリを提供しています。

メシウスのJavaScriptライブラリ

無償のトライアル版や、ブラウザ上で手軽に試せるデモアプリケーションも公開しているので、こちらも是非ご覧ください。

\  この記事をシェアする  /