ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|---|
|
方法 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=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
子ページはありません
同階層のページ
人気ページ
- 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 Spring Frameworkのアノテーション一覧
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- PHPでのファイルアップロード方法|multipart/form-dataと$_FILES 2026-08-07 17:15:57
- PHP $_SERVERとは|DOCUMENT_ROOT・PHP_SELFなど主な要素 2026-08-07 17:15:57
- Scratchのアカウントの作り方|メールアドレスとユーザー名の登録手順 2026-08-07 17:15:57
- djangoにおけるMVCアプリケーション実装例 2026-08-07 17:15:57
- Bluetoothとは|仕組み・BLEとClassicの違い・用途 2026-08-07 17:15:57
- Spring Bootのテスト入門|@SpringBootTestとJUnitでの単体・結合テスト 2026-08-07 17:15:57
- APIキー取得方法 2026-08-07 17:15:56
- インストール方法(Windows版) 2026-08-07 17:15:56
- Java とは?言語仕様・JVM・主要フレームワーク一覧 2026-08-07 17:15:56
- 【PHPフレームワーク】Laravelの使い方 2026-08-07 17:15:56
- Scratch 作品の公開方法 2026-08-07 17:15:56
- Google OAuth 2.0 認証の実装方法 2026-08-07 17:15:56
- データベースとは?RDB / NoSQL / SQL の基礎 2026-08-07 17:15:56
- インストール(eclipseプラグイン) 2026-08-07 17:15:56
- Spring Frameworkの使い方 2026-08-07 17:15:56
コメントを削除してもよろしいでしょうか?