Happy Web Engineer
Laravelをエックスサーバーにデプロイする方法|共用サーバーで公開する手順を初心者向けにやさしく解説
Last updated on

Laravelをエックスサーバーにデプロイする方法|共用サーバーで公開する手順を初心者向けにやさしく解説


はじめに

「個人開発で作ったLaravelアプリを、ついに公開したい」
「でもAWSやVPSは難しそう……使い慣れたエックスサーバーにそのまま載せられないの?」
「やってみたら画面が真っ白/500エラーになって、原因がわからない」

こんな壁にぶつかっている人は多いのではないでしょうか。

エックスサーバーは月額1,000円前後で使える共用レンタルサーバーで、WordPressなら数クリックで公開できます。ところがLaravelのようなPHPフレームワークになると、共用サーバーならではの制約があり、「いつものデプロイ手順」がそのままでは通用しません。デプロイというのは、開発したプロジェクトをサーバーに公開することです。

この記事では、Laravelをエックスサーバーに公開する手順を、初めての人でも迷わないように順番に解説します。「なぜその作業が必要なのか」までセットで説明するので、コマンドをただ写すのではなく、仕組みを理解しながら進められます。読み終えるころには、自分のアプリを安全に本番公開できるようになっているはずです。


なぜ「普通のデプロイ」と違うのか

まず、つまずきの原因になる共用サーバーならではの制約を押さえておきましょう。ここを理解しておくと、後の手順がすっと腹落ちします。

  • サーバー上で git pullcomposer を自由に使いにくく、npm(フロントのビルド)は基本的に使えない
  • queue:work のような常駐プロセス(ずっと動き続けるプログラム)を立てられない
  • Laravel本体を「公開フォルダの外」に置く必要がある.env やソースコードをインターネットに晒さないため)

この制約があるため、本記事では 「手元(ローカル)でビルドして、できあがったものをサーバーへ送り込む」 という方式をとります。具体的には rsync(ファイルを差分だけ効率よく転送するコマンド)を使ってアップロードします。

💡 ざっくり全体像:① 手元でフロントをビルド → ② rsync で本体と公開ファイルをサーバーへ転送 → ③ サーバーにSSHでログインして、DB反映やキャッシュ生成などの仕上げ、という3ステップです。


ステップ0:ディレクトリ構成を決める(最重要)

つまずきの大半は、この「どこに何を置くか」で決まります。最初にここをしっかり理解しておきましょう。

ポイントはひとつだけ。インターネットに見せていいのは public/ の中身だけ。Laravel本体(.env やソースコード)は、Web公開フォルダの外側に置きます。こうしないと、設定ファイルやパスワードが外部から見えてしまう危険があるからです。

~/laravel/<ドメイン>/                       ← Laravel本体(非公開エリア)
   app/  routes/  vendor/  .env  ...
   public/build/                          ← ビルド済みのCSS/JS

~/<ドメイン>/public_html/<ドメイン>/        ← Web公開ルート(docroot)
   index.php                              ← 本体を絶対パスで読むよう書き換える
   build   → 本体の public/build へのシンボリックリンク
   storage → 本体の storage/app/public へのシンボリックリンク

「シンボリックリンク」とは、別の場所にあるフォルダへの“ショートカット”のことです。公開フォルダ側には実体を置かず、本体側のフォルダを指し示すだけにすることで、二重管理を防ぎます。

そして公開フォルダの index.php は、Laravel本体の絶対パス(例:/home/xxxxx/laravel/<ドメイン>)を読みにいくよう書き換えます。標準の index.php は「ひとつ上の階層に本体がある」前提なので、配置が変わるここを直す必要があります。


ステップ1:サーバー側の事前準備(最初に一度だけ)

エックスサーバーのサーバーパネルで、次の4つを準備します。一度やればOKの初期設定です。

  1. SSHを有効化し、公開鍵を登録する
    接続コマンドは ssh -p 10022 アカウント@サーバー.xsrv.jp(ポート番号 10022 がエックスサーバーの特徴です)
  2. MySQLデータベースを作成する
    DB・ユーザー・権限を作り、DB名/ユーザー名/パスワード/ホスト名を控えておきます(後で .env に書きます)
  3. ドメインを追加し、無料独自SSLを有効化する(HTTPSで公開するため)
  4. PHPバージョンをアプリの要件に合わせる(例:Laravel 11なら PHP 8.3 など)

【エックスサーバーのアフィリエイトリンクをここに貼る】
※「これからエックスサーバーを契約する人はこちら」の導線として設置

エックスサーバーがどんなサーバーで何が得意なのかをまず知りたい人は、エックスサーバーっていいの?初心者向けに徹底解説! もあわせてどうぞ。


ステップ2:初回デプロイ

ここからが本番です。「手元での作業」→「サーバーでの仕上げ」の順に進めます。

① 手元(ローカル)での作業

まず、フロント(CSS/JavaScript)をビルドします。サーバーにnpmが無いので、完成品をこちらで作ってから送るのがポイントです。

npm run build

次に、Laravel本体を rsync でサーバーへ転送します。環境に依存するファイルや不要なファイルは必ず除外します(これを怠るのが、後述するトラブルの最大の原因です)。

rsync -az -e 'ssh -p 10022' \
  --exclude .git \
  --exclude node_modules \
  --exclude tests \
  --exclude .env --exclude '.env.*' \
  --exclude 'bootstrap/cache/*' \
  --exclude 'public/hot' \
  --exclude 'storage/logs/*.log' \
  src/ アカウント@サーバー:laravel/<ドメイン>/

除外している主なものと、その理由はこちらです。

除外するもの

なぜ送ってはいけないか

.env / .env.*

本番とローカルで中身が違う。上書きすると本番設定が壊れる

bootstrap/cache/*

開発環境のパッケージキャッシュが混入し、本番で500エラーの原因になる

public/hot

Vite開発サーバーの“目印”ファイル。本番に送ると画面が真っ白になる

node_modules / .git / tests

本番に不要。転送が重くなるだけ

最後に、公開してよい public/ の中身を、Web公開ルートへ転送します。

rsync -az --delete -e 'ssh -p 10022' --exclude 'hot' \
  src/public/ アカウント@サーバー:<ドメイン>/public_html/<ドメイン>/

② サーバー側での仕上げ(SSHでログインして実行)

SSHでサーバーに接続し、本体フォルダへ移動してから作業します。

cd ~/laravel/<ドメイン>

# .env を作成(APP_URL / DB_* / MAIL_* などを本番の値に設定)
php artisan key:generate          # アプリ固有の暗号化キーを生成

php artisan migrate --force       # データベースのテーブルを作成
php artisan db:seed --force       # 初期データ(管理者・初期設定など)を投入 ※必要な場合のみ
php artisan storage:link          # 画像などを表示するためのリンクを作成

# 本番用にキャッシュを生成して高速化
php artisan config:cache
php artisan route:cache
php artisan view:cache

ここまで終えたら、ブラウザで https://<ドメイン> にアクセスして、アプリが表示されるか確認しましょう。--force は「本番環境で確認なしに実行する」ための指定です(本番では確認プロンプトが省略されるため必要になります)。


ステップ3:2回目以降のデプロイ

一度公開できれば、次回からはとてもシンプルです。基本は「ビルドして送る → DBとキャッシュを更新するだけ」です。

# 手元:ビルドして rsync(初回と同じ)
npm run build
rsync ... 本体
rsync ... public

# サーバー:DBとキャッシュだけ更新
php artisan migrate --force
php artisan config:cache && php artisan route:cache && php artisan view:cache

例外は次の2つだけ覚えておけば十分です。

  • composerの依存が変わったときだけ、サーバーで composer install --no-dev --optimize-autoloader を実行(--no-dev で開発用パッケージを除外するのが重要)
  • 新しい環境変数が増えたときだけ、サーバーの .env に追記

よくあるハマりどころと対処法

共用サーバーへのLaravelデプロイで遭遇しがちなトラブルを、症状ごとにまとめました。困ったらまずこの表を確認してください。

症状

原因

対処

画面が真っ白/HTMLが localhost:5173 を読みにいく

ローカルの public/hot(Vite開発サーバーの目印)を一緒に送ってしまった

サーバーで rm public/hotview:clearview:cache。rsyncで hot を除外する

500:Target class [translator] does not exist など

開発環境の bootstrap/cache/*.php を上書きし、開発専用パッケージの参照が混入(本番は --no-dev

サーバーで bootstrap/cache/*.php を削除 → php artisan package:discover → 各 *:cache を再生成。rsyncで bootstrap/cache を除外

500 Internal Server Error

パーミッション(権限)または .env の設定ミス

storagebootstrap/cache775 に、.env を確認、php artisan config:clear

No application encryption key

APP_KEY が未設定

サーバーで php artisan key:generate を実行

CSS/JSが反映されない

ビルド済み資産またはシンボリックリンクの不備

public/build の存在を確認し、ローカルで再ビルドして送り直す

画像が表示されない

storageへのリンク未作成

php artisan storage:link を実行

キュー(非同期処理)が動かない

共用サーバーは常駐プロセスを立てられない

QUEUE_CONNECTION=sync にする。または cron で queue:work --stop-when-empty を毎分実行


本番公開前のセキュリティチェックリスト

公開前に、最低限ここだけは確認しておきましょう。

  • APP_DEBUG=falseAPP_ENV=production になっている
  • 決済を使う場合は本番キーに切り替えている(テスト用キーのままにしない)
  • 独自SSL(HTTPS)が有効になっている
  • Laravel本体・.env が公開フォルダの外側にある
  • storage/bootstrap/cache/ のパーミッションが 775 以下
  • OPcache(PHPの高速化機能)を有効化している

まとめ

Laravelをエックスサーバーにデプロイする流れを、あらためて振り返ります。

  • 共用サーバーの制約を理解する:npmが使えない・常駐プロセス不可・本体は公開フォルダの外
  • 方式は「ローカルでビルド → rsyncで送る」の一択
  • ディレクトリ構成がすべての土台:公開するのは public/ だけ
  • 2回目以降はビルド+DB/キャッシュ更新だけでとてもシンプル
  • トラブルの多くは「送ってはいけないファイルを送った」のが原因.envbootstrap/cachepublic/hot の除外を忘れない

最初の1回さえ乗り越えれば、あとは同じ手順の繰り返しです。共用サーバーでも、ポイントさえ押さえればLaravelアプリはしっかり動かせます。あなたの個人開発アプリを、ぜひ世界に公開してみてください。


関連記事

👉 エックスサーバーっていいの?初心者向けに徹底解説!
👉 個人開発・副業に最適なサーバー完全ガイド|共用・VPS・クラウドを目的別に徹底比較
👉 Laravel Sail入門|開発環境をシンプルに整える基本ステップ
👉 Laravel × Vue.js × Inertia.jsで構築するモダンWebアプリのすすめ
👉 Laravelプロジェクトでテストコードを書く重要性とは?