アドベントカレンダー5日目は、エンジニアの髙木です!

今回の記事は、Laravelで構築した静的ページをVercelでデプロイし、表示する方法についてまとめました。

Vercelには、Gitのブランチごとにデプロイを行える「ブランチプレビュー」機能があり、レンタルサーバーへデプロイする場合と比べてテストサイトを手軽に準備できるのが魅力です。

LaravelをVercelでデプロイして表示したい方のヒントになると嬉しいです。

▽neccoのアドベントカレンダーはこちらから

VercelでLaravelをデプロイしようと思ったきっかけ

納品後、Laravelへの組み込みを希望されるプロジェクトに携わることがあり、Laravel / Bladeで構築した静的ページを、プレビューで確認できるようにVercelでデプロイしました。

LaravelをVercelでデプロイするという記事が数記事ありましたが、今回のデプロイで設定が必要となるvercel.jsonファイルの内容を参考記事と同じように設定し検証しても、私の環境では再現できず、少々苦戦しました。

▽当時、参考にした記事はこちら

Laravelとは

Laravel(ララベル)の公式サイトのスクリーンショット

Laravel(ララベル)は、オープンソースのPHPフレームワークです。

https://laravel.com

Bladeとは

Bladeは、Laravelに標準搭載されているテンプレートエンジンです。レイアウトの共通化やコンポーネントの再利用を可能にします。

https://laravel.com/docs/12.x/blade

ローカル環境のセットアップ

はじめに、ローカル環境のセットアップを行います。

前提

  • Composerがインストールされていること
  • Gitアカウントがあること
  • Vercelアカウントがあること

Composerは、ターミナルで composer -V を実行すると、インストールされているか確認できます。インストールしていない場合は、公式ドキュメントの手順に従ってインストールしてください。

Gitアカウントは、Vercelにインポートしてデプロイするために必要です。

検証した環境

今回は、以下で検証を行いました。

  • Laravel Framework 12.26.2

Laravelをセットアップする

1. アプリケーションを作成する

以下のコマンドを実行し、新規のアプリケーションを作成します。

composer create-project laravel/laravel my-laravel-app

2. サーバーを起動する

アプリケーションを作成したら、作成したディレクトリに移動し、以下のコマンドを実行してサーバーを起動します。

php artisan serve

3. Laravelのウェルカムページを開く

サーバーを起動すると、ターミナルにローカルのURLが表示されます。
表示されたURLをクリックすると、Laravelのウェルカムページを開くことができます。

Laravelのウェルカムページ(http://127.0.0.1:8000/)のスクリーンショット。Laravel 12と表示され、Deploy nowのボタンが表示されている。
Laravelのウェルカムページ(http://127.0.0.1:8000/)

ウェルカムページが表示されれば、アプリケーションのセットアップは完了です。

Bladeを用いて表示用のファイルを作成する

Bladeでレイアウトコンポーネントを作成し、表示用のファイルを作成します。

以下のコマンドを実行し、レイアウトコンポーネントを作成します。

php artisan make:component Layout

コマンドを実行すると、resources/viewsディレクトリ内に、componentsディレクトリとlayout.blade.phpが生成されます。

componentsディレクトリが、resources/viewsディレクトリ内に生成されている様子
resources/viewsディレクトリ内に生成される

layout.blade.phpを編集する

以下のようにレイアウトコンポーネントとして使用できるように内容を書き換えておきます。

<!DOCTYPE html>
<html lang="ja">

<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>LaravelをVercelでデプロイする</title>
	<link rel="stylesheet" href="{{ asset('/css/app.css') }}">
</head>

<body>
	<header>
		<h1>necco Laravel Sample</h1>
	</header>
	<hr>
	<main>
		{{ $slot }}
	</main>
	<hr>
	<footer>
		© 2025 necco.inc
	</footer>
</body>

</html>

上記のサンプルコードでは {{ $slot }} を利用しています。

{{ $slot }} を使うとコンポーネントを呼び出したときに「中に書いたコンテンツ」が、{{ $slot }} の部分に差し込まれます。

welcome.blade.php の内容を書き換える

resources/views/welcome.blade.phpの内容をlayoutコンポーネントを使用した形に書き換えます。

コンポーネントは、<x-component-name> タグを利用して、インポートします。

<x-layout>
  <div>
    <h2>Hello World!</h2>
    <p>LaravelをVercelでデプロイしてみよう✨</p>
  </div>
</x-layout>

表示することができました。

ローカルで表示された様子。necco Laravel Sampleという見出しの下に、「Hello World!」と「LaravelをVercelでデプロイしてみよう✨」とテキストが表示されている
http://127.0.0.1:8000/

ローカルで表示した、こちらの静的ページをVercelでデプロイします。

Vercelのセットアップをする

まずは、LaravelをVercelのServerless Functions上で動かせるように、必要なパッケージを導入します。

以下のコマンドを実行します。

composer require revolution/laravel-vercel-installer --dev

コマンドを実行すると、composer.jsonに以下の内容が追加されます。

"require-dev": {
   "revolution/laravel-vercel-installer": "^1.3"
},

次に以下のコマンドを実行します。

php artisan vercel:install

このコマンドは Vercel で Laravel アプリを動かすために必要な以下のファイルが自動生成されます。

  • api/index.php
  • vercel.json
  • .vercelignore
  • そのほか Vercel 専用の補助ファイル

vercel.jsonをセットアップ

vercel.jsonの内容を以下に書き換えます。

{
    "regions": ["hnd1"],
    "functions": {
        "api/index.php": {
            "runtime": "vercel-php@0.7.3"
        }
    },
    "routes": [
        {
            "src": "/build/(.*)",
            "dest": "/public/build/"
        },
        { "src": "/images/(.*)", "dest": "/public/images/$1" },
        {
            "src": "/(.*)",
            "dest": "/api/index.php"
        }
    ],
    "env": {
        "APP_NAME": "Laravel Vercel",
        "APP_DEBUG": "false",
        "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 の現行仕様に寄せた設定に変更しています。

  • 生成されるデフォルトの設定にbuildsプロパティが含まれていますが、公式で非推奨となっているためfunctionsプロパティへ変更します
  • 静的ファイルをbuildsで/public/**を丸ごと指定するのではなく、routesで/build, /imagesを個別指定
  • favicon, robots.txtを直書きを省略し、代わりに/imagesを追加

GitHubにリポジトリを作成する

GitHubにリポジトリを作成し、今までの設定をマージします。

Vercel でデプロイする

設定にはデプロイ後のURLが必要となるため、一度デプロイします。まだ設定が全て完了していないため、デプロイは「失敗」します。ここで失敗しても問題ありません。

Vercelのダッシュボードを写したスクリーンショット。デプロイが失敗している様子。

Vercel のダッシュボードから Output Directory を設定

General > Build & Development Settingsから Output Directory を設定します。Output Directory に public を入力して、Overrideします。

Vercelの設定画面のスクリーンショット。Output Directoryに「public」と入力し、Overrideをtrueにしている。

Vercel のダッシュボードから環境変数を設定

ダッシュボードから以下の環境変数を設定します。

Vercelのダッシュボードにある環境変数の設定画面。APP_KEYと、ASSET_URLを設定している。キーは目隠しされている。
  • APP_KEY:(例)base64:XXXXXXXXXXXXXXXX
  • ASSET_URL:(例)laravel-vercel-app.vercel.app

APP_KEY

Laravelを構築した時に生成される.envから取得します。

ASSET_URL

デプロイ後のURLを使用します。アセット(CSS、JavaScript、画像など)のURLを生成する際に使用されます。

Vercelで再度デプロイを実施

Vercelの設定が完了したら、再度 Redeploy をクリックしてデプロイを行います。

Vercelの設定後にデプロイを再実施している様子

デプロイが成功したら設定完了です🎉

デプロイが成功している様子。

デプロイのURLで表示を確認する

表示の確認ができたら全ての作業が完了です✨

デプロイしたページでローカルと同じ内容が表示された様子。necco Laravel Sampleという見出しの下に、「Hello World!」と「LaravelをVercelでデプロイしてみよう✨」とテキストが表示されている
Vercelでデプロイしたページ

さいごに

これまでは、Next.jsやAstroを採用したプロジェクトでのみVercelを利用していました。

今回は、お客さまのご要望もあり Laravel / Blade で作成した静的なページをVercelでデプロイする方法について検証しました。

LaravelをVercelでデプロイする記事はいくつか見つかったものの、記事によってvercel.jsonの記載内容が異なり、同じ手順ではデプロイが成功せず、試行錯誤しながらの検証となりました。

本記事が、私と同じようにVercelでのデプロイを再現できずに困っている方にとって、少しでもヒントになれば嬉しいです。

neccoのアドベントカレンダーは以下のリンクからご覧いただけます。ぜひ、他のメンバーの記事もご覧いただけると嬉しいです。


📮 お仕事のご依頼やご相談、お待ちしております。

お仕事のご依頼やご相談は、お問い合わせ からお願いいたします。

🤝 一緒に働きませんか?

下記の職種を募集中です。より良いデザイン、言葉、エンジニアリングをチームで追求していける方をお待ちしております。詳細は 採用情報 をご覧ください。

  • アシスタントデザイナー
  • フロントエンドエンジニア
  • アシスタントフロントエンドエンジニア

🗒 会社案内資料もご活用ください。

会社のサービスや制作・活動実績、会社概要、ご契約など各種情報をまとめた資料をご用意しています。会社案内資料 からダウンロード可能ですので、ぜひご活用ください。

2025年12月3日更新

株式会社necco ダウンロード資料へのバナー画像