| この記事の要点 |
|---|
|
方法 1: @stack / @push(推奨)
同じプレースホルダに複数箇所から追加できる「stack」を使う方法。
レイアウト側
<!-- resources/views/layouts/app.blade.php -->
<!DOCTYPE html>
<html>
<head>
<title>@yield('title')</title>
<!-- 共通 CSS -->
<link href="{{ asset('css/app.css') }}" rel="stylesheet">
<!-- ページ固有 CSS の挿入箇所 -->
@stack('styles')
</head>
<body>
@yield('content')
<!-- 共通 JS -->
<script src="{{ asset('js/app.js') }}"></script>
<!-- ページ固有 JS の挿入箇所 -->
@stack('scripts')
</body>
</html>
個別ページ側
<!-- resources/views/users/index.blade.php -->
@extends('layouts.app')
@section('title', 'ユーザー一覧')
@push('styles')
<link href="{{ asset('css/users.css') }}" rel="stylesheet">
<style>
.user-card { padding: 1em; }
</style>
@endpush
@section('content')
<h1>ユーザー一覧</h1>
<div class="user-list">
@foreach ($users as $user)
<div class="user-card">{{ $user->name }}</div>
@endforeach
</div>
@endsection
@push('scripts')
<script src="{{ asset('js/users.js') }}"></script>
<script>
document.querySelectorAll(".user-card").forEach(card => {
card.addEventListener("click", () => console.log("clicked"));
});
</script>
@endpush
方法 2: @section / @yield
1 箇所からの挿入のみ (上書き) で十分なケース。
<!-- layouts/app.blade.php -->
<head>
<link href="{{ asset('css/app.css') }}" rel="stylesheet">
@yield('styles')
</head>
<body>
@yield('content')
<script src="{{ asset('js/app.js') }}"></script>
@yield('scripts')
</body>
<!-- users/index.blade.php -->
@extends('layouts.app')
@section('styles')
<link href="{{ asset('css/users.css') }}" rel="stylesheet">
@endsection
@section('content')
...
@endsection
@section('scripts')
<script src="{{ asset('js/users.js') }}"></script>
@endsection
@push vs @section の使い分け
| 項目 | @stack / @push | @yield / @section |
|---|---|---|
| 挿入箇所 | 複数 view から追加可能 | 1 つの section を 1 つの view が定義 |
| 順序 | 追加順(先 → 後) | 1 つだけ |
| 用途 | レイアウト + コンポーネント両方から script 追加 | ページ固有の単一 CSS / JS |
| パーシャル / コンポーネント内から使える | ○ @push | × (@yield は section 1 つに限定) |
@once で重複防止
パーシャル (含めるパーツ) を複数回 include しても、CSS / JS は 1 回だけ読み込みたい:
<!-- partials/datepicker.blade.php -->
@once
@push('styles')
<link href="{{ asset('css/datepicker.css') }}" rel="stylesheet">
@endpush
@push('scripts')
<script src="{{ asset('js/datepicker.js') }}"></script>
@endpush
@endonce
<input type="text" class="datepicker">
<!-- 利用側 (datepicker を 3 回 include しても CSS/JS は 1 回だけ) -->
@include('partials.datepicker')
@include('partials.datepicker')
@include('partials.datepicker')
@prepend (先頭に追加)
後から追加するけど stack の先頭に置きたい(jQuery より先に Polyfill 等):
@prepend('scripts')
<script src="https://polyfill.io/v3/polyfill.min.js"></script>
@endprepend
Vite との統合
Laravel 10+ はデフォルトで Vite を使う:
<!-- レイアウト -->
<head>
@vite(['resources/css/app.css', 'resources/js/app.js'])
@stack('styles')
</head>
<body>
@yield('content')
@stack('scripts')
</body>
<!-- 個別ページ -->
@push('styles')
@vite(['resources/css/users.css'])
@endpush
@push('scripts')
@vite(['resources/js/users.js'])
@endpush
# Vite が hot reload + バンドル + cache busting を自動化
条件付き読み込み
@push('scripts')
@if (auth()->check())
<script src="{{ asset('js/authenticated-user.js') }}"></script>
@endif
@env('production')
<script src="{{ asset('js/analytics.js') }}"></script>
@endenv
@if (config('app.feature.chat'))
<script src="{{ asset('js/chat.js') }}"></script>
@endif
@endpush
パフォーマンスの考慮
- defer / async:
<script src="..." defer>でレンダーブロック回避 - preload:
<link rel="preload" href="..." as="script">で先読み - Critical CSS: 重要な CSS はインラインで
<style> - Vite で自動最適化: コード分割・遅延読み込みが自動
@push('scripts')
<script src="{{ asset('js/users.js') }}" defer></script>
@endpush
@push('styles')
<link rel="preload" href="{{ asset('fonts/Noto.woff2') }}" as="font" type="font/woff2" crossorigin>
@endpush
関連記事
子ページ
子ページはありません
同階層のページ
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスのソフト一覧|Blender・Metasequoiaと用途別の選び方
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Visual Studio「デザイナーを表示できません」エラーの原因と対処 2026-10-28 12:06:00
- SSH 認証に失敗しました。再試行してください の対処 2026-10-28 12:06:00
- SSH2 秘密鍵の読み込みに失敗しました の原因と対処 2026-10-28 12:06:00
- TeraTerm のよくあるエラーと対処法完全ガイド — Connection refused / 2026-10-28 12:06:00
- Visual Studio エラー一覧|コンパイルエラー・警告の確認方法と対処 2026-10-28 11:39:57
- Whitelabel Error Page の原因と消し方|Spring Boot のエラーページ 2026-10-28 11:39:57
- Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法 2026-10-28 11:39:57
- SQL WHERE 句完全ガイド 2026-10-28 11:39:57
- SQL JOIN 完全ガイド (INNER/LEFT/RIGHT/FULL OUTER) 2026-10-28 11:39:57
- tomcat の起動 / 停止ログと catalina.log・catalina.out の違い 2026-10-28 10:24:23
- Tomcat の起動確認方法 5 つ|localhost:8080・ポート・プロセス・ログ 2026-10-28 10:24:23
- Oracle 19c COMMITの使い方: 暗黙コミット・自動確定・応答不明時の確認 2026-10-28 09:59:09
- Oracle 19c DELETE文|削除対象の確認・COMMIT前の判断・ROLLBACKの条件 2026-10-28 09:59:09
- Oracle 19c INSERT文|INSERT ALL・SELECT・RETURNINGとMERGEの使い分け 2026-10-28 09:59:09
- Oracle 19cのトランザクション制御|COMMIT・ROLLBACK・分離レベルと接続設定 2026-10-28 09:59:09