Laravel で @yield, @section が正しく動作しない場合の解決策

### 確認環境
```
Mac OS Ventura 13.7.4 → 追記 13.7.6 UPDATEしました
Vscode

laravel 12
Docker 4.22.0 → 追記 4.41.2 UPDATEしました
```
# yield, section が正しく動作しない

Laravel12 の学習中 `@yield`, `@section` が動きませんでした。
学習していたサイトはこちら。

https://laraveldaily.com/lesson/laravel-from-scratch/navigation-layout


ブラウザの画面に次のような表示が出ています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693413/191c11d3-b5dc-4bb1-8799-9b2d7cf133b4.png)

`("author": "Felix Geisendörfer (http://debuggable.com/)", "name": "combined-stream", "description": "A stream that emits multiple other streams one`

ChatGPTの回答で、`node_modules` を削除して、`npm i` を実行してみて言われたので、実行してみたものの、次のパターンに変わっただけ。

`a:3:{s:6:"_token";s:40:"BAIALXd3B6U1zHWnYYCAFYKR1hd3Bi9NrEQC0s8v";s:9:"_previous";a:1:{s:3:"url";s:21:"http://localhost:8080";}s:6:"_flash";a:2:{s:3:"old";a:0:{}s:3:"new";a:0:{}}}`

明らかに何かがおかしい。

### 原因
ChatGPT のすすめで、次のコマンドでログをログを確認した所、
```
docker compose logs db
``` 
`compose.yaml` の
db の volume 設定先（今回は ./docker/mysql/data, ./docker/mysql/initdb.d）で、
Mac の隠しファイル（._ファイル名）が生成されているのが原因らしい...

```bash
db-container  | chown: changing ownership of '/var/lib/mysql/performance_schema/._memory_summary_b_154.sdi': Operation not permitted
db-container  | chown: changing ownership of '/var/lib/mysql/performance_schema/._memory_summary_b_155.sdi': Operation not permitted
...以降多数
```

### 解決策
1, docker-compose.yaml や compose.yaml で named volume （名前付きボリューム）を設定する


```diff_yaml
services:
  db:
    build: ./docker/mysql
    container_name: db-container
    volumes:
-     - ./docker/mysql/data:/var/lib/mysql
-     - ./docker/mysql/initdb.d:/docker-entrypoint-initdb.d
+      - mysql-data:/var/lib/mysql
+      - mysql-initdb:/docker-entrypoint-initdb.d
    environment:
      - MYSQL_ROOT_PASSWORD=mysql
      - MYSQL_DATABASE=database
      - MYSQL_USER=user
      - MYSQL_PASSWORD=password
      - TZ=Asia/Tokyo
    ports:
      - '3306:3306'
  app:
    build: ./docker/php
    container_name: app-container
    volumes:
      - ./docker/php/php.ini:/usr/local/etc/php/php.ini
      - ./app/laravel:/var/www
    ports:
      - '8080:80'
    depends_on:
      - db
  phpmyadmin:
    build: ./docker/phpmyadmin
    container_name: phpmyadmin-container
    volumes:
      - phpmyadmin-sessions:/sessions
    environment:
      - PMA_ARBITRARY=1
      - PMA_HOST=db
      - PMA_USER=root
      - PMA_PASSWORD=mysql
    ports:
      - '4040:80'
    depends_on:
      - db
#以降を追加
+volumes:
+  mysql-data:
+    driver: local
+  mysql-initdb:
+    driver: local


```

2, 実行中のコンテナに入り、キャッシュをクリアする
```shell
docker compose exec app bash

php artisan view:clear
php artisan cache:clear
```


3, docker を再起動する
```shell
docker compose stop
docker compose up -d
```

これで直りました。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693413/f9920244-a5ed-4d31-b1af-2e3d55500077.png)




古いボリュームは削除しておきます。
```shell
rm -r ./docker/mysql/data
```


## 追記
その後、複数のページ遷移時に、〇〇.blade.php の内容がうまく更新されなかったので、
Mac と Docker をアップデートして、キャッシュクリア、ブラウザもハード再読み込みで更新されるようになりました。


<!--


以降はボリュームの記法の理解のために行なったChatGPT4.1との対話の記録です。
ついでに掲載しておきます。


## ChatGPT4.1 に名前付きボリュームを小学生高学年にも分かるように説明してくれる？


はい！小学校高学年向けに、**Dockerのnamed volume（ネームドボリューム）**を分かりやすく説明します。

---

### 1. まず「Docker」ってなに？

Dockerは「アプリを入れる箱（コンテナ）」を作る道具です。  
この箱の中でアプリが動きます。

---

### 2. 「データ」はどこに入るの？

アプリが使うデータ（たとえば写真や日記など）は、  
ふつうは箱の中に入ります。でも、箱を壊すとデータも消えちゃいます。

---

### 3. 「ボリューム」ってなに？

ボリュームは「箱の外にある引き出し」です。  
アプリはこの引き出しにデータを入れたり出したりできます。  
箱を壊しても、引き出しの中身は消えません。

---

### 4. 「named volume（ネームドボリューム）」って？

ネームドボリュームは「名前をつけた引き出し」です。  
たとえば「mydata」という名前の引き出しを作って、  
いろんな箱（コンテナ）から使うことができます。

---

### 5. どう便利なの？

- データが消えにくい
- いろんな箱で同じデータを使える
- パソコンの中の変なファイルが入らない（Macの隠しファイル問題も防げる）

---

### 6. まとめ

- **ボリューム＝引き出し**
- **ネームドボリューム＝名前つきの引き出し**
- アプリのデータを安全にしまっておける！

---

もし「どうやって使うの？」と知りたければ、  
`docker-compose.yml` でこう書きます：

```yaml
services:
  db:
    image: mysql
    volumes:
      - mydata:/var/lib/mysql

volumes:
  mydata:
```

こうすると「mydata」という名前の引き出しができます！



## compose.yaml で volumes:./docker/mysql/data:/var/lib/mysql と書いている時、何が起こっているの？分かりやすく教えて。


この設定は、**「パソコンの中のフォルダ」と「コンテナの中のフォルダ」をつなげる**という意味です。

---

### どういうこと？

- data（パソコンの中のフォルダ）  
- `/var/lib/mysql`（コンテナの中のフォルダ）

この2つが「同じもの」として使われます。

---

### 何が起こるの？

1. **MySQLコンテナの中でデータベースのデータが保存される場所**は `/var/lib/mysql` です。
2. この設定があると、**そのデータがパソコンの data フォルダにも保存されます**。
3. コンテナを消しても、パソコンのフォルダにデータが残ります。

---

### たとえば

- 箱（コンテナ）の中で日記を書いたら、その日記がパソコンの引き出し（フォルダ）にもコピーされるイメージです。

---

### まとめ

- **コンテナのデータがパソコンのフォルダに保存されるようになる**  
- コンテナを消してもデータは残る  
- でも、Macだと変な隠しファイルが入ってトラブルになることもある

---

分かりやすく言うと、  
**「コンテナの大事なものをパソコンの引き出しにしまっておく」**設定です！


## 名前付きボリュームはパソコンに保存するのではない？

はい、名前付きボリューム（named volume）はパソコンの「特定のフォルダ」には保存されません。

詳しく説明
- ./docker/mysql/data:/var/lib/mysql
→ これは「パソコンのこの場所（data）」にデータを保存します。

- mysql-data:/var/lib/mysql
→ これは「Dockerが自動で管理する場所（パソコンのどこか）」にデータを保存します。
どこにあるかは自分で指定できませんが、コンテナを消してもデータは残ります。

まとめ
名前付きボリュームは、パソコンの好きな場所には保存されません。
Dockerが自分で安全な場所にしまってくれます。
そのため、Macの隠しファイル問題も起きません。
もし「パソコンのどこにあるか見たい」と思ったら、
docker volume inspect mysql-data で場所を調べることもできます。

-->