レンタルサーバーとクラウドサーバーで異なるpublic/ディレクトリの役割の違い
はじめに
Webアプリを本番環境にデプロイする際、HerokuやAWS EC2などのクラウドサーバーでは何も問題なく動くのに、レンタルサーバーにアップロードするとなぜか動かないことがありました。そこから調べてみるとシンボリックリンクが関係していることが分かりました。
この記事では、Laravelのpublicディレクトリが必要な理由と、なぜレンタルサーバーでシンボリックリンクが必要になるのかについて説明します。
この記事で学べること
- Laravelにおけるpublic/ディレクトリの役割とその理由
 - クラウドサーバーとレンタルサーバーでのデプロイの違い
 - シンボリックリンクの使い方と意味
 
対象者
- Laravelをレンタルサーバーで運用したい方
 - Laravelの構造を理解したい初心者エンジニア
 - Webサーバーの設定とLaravelの関係を知りたい方
 
用語解説
シンボリックリンクとは
シンボリックリンク(symbolic link)とは、他のファイルやディレクトリへの「参照ポインタ」です。
ln -s /path/to/target /path/to/link
これを使うことで、Webサーバーが固定されたディレクトリしか見れない場合でも、あたかもそこにファイルがあるように見せることができます。
ドキュメントルートとは
Webサーバーがリクエストに対して最初に探しに行くディレクトリのことです。
たとえば、https://example.com/index.html にアクセスがあったときに、index.html を探しに行く場所がドキュメントルートです。
結論
- クラウドサーバーでは、ドキュメントルートを
public/に設定できる - レンタルサーバーでは、ドキュメントルートが固定(例:
~/public_html)で、Laravelのpublic/を直接使えない - そのため、
public_html→laravel/publicへのシンボリックリンクが必要になる 
 Laravelの構造とpublic/ディレクトリの役割
Laravelではセキュリティの観点から、Webからアクセスされるべきファイルをpublic/フォルダに隔離しています。
- index.php(アプリのフロントコントローラ)
 - CSS / JS / 画像などのアセットファイル
 
逆に、app/ や routes/、.env などの機密情報を含むファイルはWebから直接アクセスできない位置に配置されています。
理由
Laravelアプリ全体に外部から直接アクセスできる構造だと、機密ファイルが流出する危険性があります。
そのため、Webサーバーのドキュメントルート(public フォルダ)を明示的に指定するのが大前提となっています。
クラウドサーバーの場合
特徴
- NginxやApacheの設定ファイル(例:nginx.conf, httpd.conf)を自由に書き換え可能
 - ドキュメントルートを
/var/www/html/laravel-app/publicのように自由に設定できる 
その結果
- 
public/をそのままルートとしてWebサーバーが参照できる - Laravelアプリ本来の構成を変更せずに安全に動作させられる
 - シンボリックリンクを作成しなくとも公開可能
 
レンタルサーバー(例:お名前.com)の場合
特徴
- Webサーバーの設定に制限がある(ApacheやNginxの設定変更が不可)
 - ドキュメントルートが
~/public_htmlなどで固定されている 
そのままLaravelアプリを配置する場合
- 
routes/web.phpや.envなどに外部からアクセス可能になってしまう… - セキュリティリスクが非常に高く、推奨されない
 
対処法
- Laravelアプリ全体を
~/laravelなどの安全な位置に設置 - 
~/public_htmlにシンボリックリンクを作成: 
ln -s ~/laravel/public ~/public_html
- Webサーバーからは
~/public_html以下のみが見える → 安全に運用可能 
まとめ
| 項目 | クラウドサーバー | レンタルサーバー | 
|---|---|---|
| Webサーバー設定 | 基本的に変更可能 | 固定・制限あり | 
| ドキュメントルート | 
public/に設定可 | 
public_htmlに固定 | 
| Laravel構成の保持 | そのままで問題なし | シンボリックリンクが必要 | 
| セキュリティ | 高く保てる | 設定ミスで危険 | 
おわりに
私も最初はクラウドサーバーでスムーズにデプロイ出来たことが、レンタルサーバーではなぜかうまくいかずに戸惑いました。調べてみると、レンタルサーバー環境は制限もありますが、こうした知識を身につけて設定すれば、Laravelでも十分に安全な本番運用ができることが分かりました。
この記事が、レンタルサーバーでLaravelアプリを動かそうとしている方の参考になれば幸いです。
株式会社ONE WEDGE
【Serverlessで世の中をもっと楽しく】
ONE WEDGEはServerlessシステム開発を中核技術としてWeb系システム開発、AWS/GCPを利用した業務システム・サービス開発、PWAを用いたモバイル開発、Alexaスキル開発など、元気と技術力を武器にお客様に真摯に向き合う価値創造企業です。
Discussion