5
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Vercel】PHP8.3でLaravelアプリを動かしたい

Posted at

PHP8.3でLaravelを動かそうと思い、Vercelを選定しました。

今回はその手順をお届けします。

もちろんAPIルートも対応してます。

経緯

もともと、Drupalアプリを ec2 に乗せていました。
無料利用枠が終了して想像よりコストがかかって大慌て...。

aws無料利用枠のありがたさをしみじみと感じました。
1年間もあったのにコストかからない方法を覚えることはできませんでした...。

コストを抑えて、Symfonyベースで動かせるアプリケーションをデプロイしたい、というのが今回作業に至った経緯です。

なぜ Vercel?

個人的に気に入ってる機能はこちら。

  • 自動デプロイ: GitHub連携し、コードをプッシュするだけで自動的にビルドとデプロイが実行可能。
  • ホスティング: ドメイン管理、環境変数のGUI設定、アナリティクスが使いやすい。
  • サーバーレス機能: サーバーレス関数をサポート。バックエンドの機能を簡単に追加可能。

Vercelの記事以前書いてます。よければ。

VercelでPHP動くの?

動かせる、ってAIが教えてくれたので今回いろいろ調査してみました。
海外のエンジニアでちょこちょこやってる人がいるみたい。

いろんな方のGithubリポジトリを見て、設定を精査しましたので今回ご紹介させていただきます。

とりあえずコード見せろよ。という方はこちら

設定方法

今回、Vercelのリポジトリセットアップについての紹介は省かせていただきます。
正直なところ、あまり説明しなくても誰でも簡単使えるよう洗練されたサービスです。
(僕もはじめて使ったときそんな手順調べてない。)

それでも調べないと不安だよ。って方はこちら。

#001. Laravelインストール

composer create-project laravel/laravel

#002. Vercel接続設定

composer require revolution/laravel-vercel-installer --dev
php artisan vercel:install

#003. PHPランタイム設定

vercel.jsonを修正。

vercel.json
{
    "version": 2,
    "framework": null,
    "functions": {
        "api/index.php": {
            "runtime": "vercel-php@0.7.3"
        }
    },
    "routes": [
        {
            "src": "/(.*)",
            "dest": "/api/index.php"
        }
    ],
    "env": {
        "APP_NAME": "Laravel Vercel",
        "APP_DEBUG": "false",
        "APP_URL": "https://xxxx.vercel.app",
        "APP_CONFIG_CACHE": "/tmp/config.php",
        "APP_EVENTS_CACHE": "/tmp/events.php",
        "APP_PACKAGES_CACHE": "/tmp/packages.php",
        "APP_ROUTES_CACHE": "/tmp/routes.php",
        "APP_SERVICES_CACHE": "/tmp/services.php",
        "CACHE_DRIVER": "array",
        "CACHE_STORE": "array",
        "LOG_CHANNEL": "stderr",
        "SESSION_DRIVER": "cookie",
        "VIEW_COMPILED_PATH": "/tmp"
    }
}

vercel-phpのバージョンは、利用したいPHPバージョンに依存します。
今回はバージョンだとPHP8.3に対応させています。

#005. /dist ディレクトリを作成

デプロイ時の出力ファイル置き場ですかね。ビルドファイル置き場ですかね。
ここの理解浅くて申し訳ありません。分かる方コメントください。

ルート直下にdist/.gitkeepを作成します。

#006. artisanコマンドでAPI設定

php artisan install:api

以下、2点変更差分が入ればOK.

  • routes/api.phpが作成される
  • bootstrap/app.phpapiルートが設定される

#007. APIの Prefix 設定

bootstrap/app.phpに一行追加します。

bootstrap/app.php
return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        web: __DIR__.'/../routes/web.php',
        api: __DIR__.'/../routes/api.php',
        commands: __DIR__.'/../routes/console.php',
        health: '/up',
+         apiPrefix: 'data',
    )
    ->withMiddleware(function (Middleware $middleware) {
        //
    })
    ->withExceptions(function (Exceptions $exceptions) {
        //
    })->create();

今回は、Prefix に dataを利用します。
URLイメージ: /data/user, /data/product/{id}, /data/log

Vercelで設定

こちらの設定は要点のみ。

  1. Githubでソースコードを管理している方はリポジトリインポートをしてください。
  2. 環境変数の設定を行います。
    APP_KEY の設定は必須です。

ビルドが完了したらアクセスして確認するのみ。

参考

文中でもしれっと紹介しましたがリポジトリ用意してます。
よければ参考にしてください。

他にもPoCする際に私が参考にしたリポジトリ / 記事を記載しておきます。

まとめ

今回は、VercelでLaravelアプリを動かす方法について紹介しました。
想像以上に簡単ですのでぜひ。

5
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?