この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:3
ページ更新者:guest
更新日時:2026-06-11 07:07:02

タイトル: assetヘルパーを利用したpublicフォルダへのアクセス
SEOタイトル: Laravel asset() ヘルパー徹底解説 — mix / vite / url との違いと CDN 設定

この記事の要点
  • asset('css/app.css')public/ 配下のファイルへの完全 URL を返す(例: http://example.com/css/app.css
  • ベース URL は config/app.phpurlAPP_URL)。サブドメイン / CDN 配信は ASSET_URL でも上書き可
  • HTTPS 強制は secure_asset()。または AppServiceProviderURL::forceScheme('https')
  • キャッシュバスティングが必要なら mix()(Laravel Mix)か vite()(Vite)を使う — ファイルにハッシュ付き URL を生成
  • url() はアプリケーション URL(ルート向け)、asset() は静的ファイル向け、と用途が違う

asset() の基本

asset()public/ ディレクトリ内のファイルへの URL を生成するヘルパー関数です。Blade テンプレートで CSS / JS / 画像を読み込むときの定番です。

{{-- 例: APP_URL=http://example.com の場合 --}}


{{-- → http://example.com/css/app.css --}}


{{-- → http://example.com/js/app.js --}}

logo
{{-- → http://example.com/images/logo.png --}}

ファイル配置の前提

プロジェクトルート/
├── app/
├── public/                  ← Web 公開ルート(DocumentRoot)
│   ├── index.php
│   ├── favicon.ico
│   ├── css/
│   │   └── app.css          ← asset('css/app.css') で参照
│   ├── js/
│   │   └── app.js
│   └── images/
│       └── logo.png
├── resources/               ← 元ソース。Mix/Vite でビルドして public/ へ
└── ...

URL の組み立てロジック

asset() が返す URL は次の優先順位で決まります:

  1. config('app.asset_url')ASSET_URL 環境変数)— CDN 等を別ホストにしたい場合
  2. config('app.url')APP_URL 環境変数)
  3. リクエストの scheme://host
// 内部実装イメージ (簡略)
function asset(string $path, ?bool $secure = null): string
{
    return app('url')->asset($path, $secure);
}

// .env 例
APP_URL=https://example.com
ASSET_URL=https://cdn.example.com   // ← 設定すると asset() がこちらを優先

secure_asset() による HTTPS 強制

{{-- 常に https:// で出力したい --}}


{{-- 第 2 引数で個別指定も可 --}}

本番環境では AppServiceProvider::boot() で一括強制するのが楽です:

use Illuminate\Support\Facades\URL;

public function boot()
{
    if ($this->app->environment('production')) {
        URL::forceScheme('https');
    }
}

asset / url / route の違い

ヘルパー用途出力例
asset('css/app.css')静的ファイル(public/)https://example.com/css/app.css
url('/users')アプリの任意 URLhttps://example.com/users
route('users.show', 1)名前付きルートhttps://example.com/users/1
action([UserController::class, 'show'], 1)コントローラから生成https://example.com/users/1

キャッシュバスティングが必要な場面

asset('css/app.css') はそのまま /css/app.css を出力するため、ブラウザがキャッシュした古い CSS を読み続ける問題が起きます。デプロイのたびに新しい URL にしたい場合は Mix / Vite を使います。

{{-- Laravel Mix (mix-manifest.json を参照) --}}

{{-- → /css/app.css?id=8a1b3c... のようにハッシュ付き --}}

{{-- Vite (Laravel 9.19+) --}}
@vite(['resources/css/app.css', 'resources/js/app.js'])
{{-- → 
        --}}

CDN 配信のための ASSET_URL 設定

# .env で別ホストを指定
APP_URL=https://example.com
ASSET_URL=https://d1xxxxxx.cloudfront.net

# Blade での出力結果
# asset('images/logo.png')
# → https://d1xxxxxx.cloudfront.net/images/logo.png

# url('/users') はアプリ側 (example.com) のまま
# → https://example.com/users

よくあるトラブル

症状原因 / 対処
本番で http:// になるAPP_URL が https:// になっていない、または URL::forceScheme('https') 未設定
ローカルでドメインが localhost 以外になるAPP_URL を上書き。config:clear 必須
サブディレクトリで動かしたら 404APP_URL に /myapp を含める。例: https://example.com/myapp
storage/app/public が見えないphp artisan storage:link でシンボリックリンク作成

storage と asset の連携

# storage/app/public → public/storage のシンボリックリンクを張る
php artisan storage:link
{{-- アップロード画像を表示 --}}


{{-- または Storage ファサード --}}

FAQ

Q: asset() の出力をすべて HTTPS にしたい
A: APP_URL=https://... に加え、AppServiceProviderURL::forceScheme('https')。リバプロ配下なら TrustProxies ミドルウェアも設定。

Q: バージョン文字列を付けたい(?v=1.2
A: 簡易にやるなら asset('css/app.css') . '?v=' . config('app.version')。本格的には Mix / Vite を使用。

Q: 画像 URL を Blade 内で組み立てるベストプラクティス
A: アップロード画像なら Storage::url()、固定アセットなら asset()、CDN 経由なら ASSET_URL + asset()