Astroのチュートリアルでincludesがみつからない

# はじめに

いまモダンな開発として話題な[Astro](https://astro.build/)のチュートリアルをはじめてみました

https://docs.astro.build/en/tutorial/0-introduction/

そこで地味に解決に時間がかかったことがあったのでまとめます

# 問題

Unit6の[Generate tag pages](https://docs.astro.build/ja/tutorial/5-astro-api/2/)の以下の箇所でエラーが発生しました

```diff:/src/pages/tags/[tag].astro
---
const { tag } = Astro.params;
const { posts } = Astro.props;
+ const filteredPosts = posts.filter((post) => post.frontmatter.tags.includes(tag));
---
```

```
 error   Cannot read properties of undefined (reading 'includes')
  File:
    /home/watanabejin/workspace/astoro-tutorial/tutorial/src/pages/tags/[tag].astro:28:70
  Code:
    27 |   </ul>
    > 28 | </BaseLayout>
         |                                                                      ^
  Stacktrace:
TypeError: Cannot read properties of undefined (reading 'includes')
    at eval (/home/watanabejin/workspace/astoro-tutorial/tutorial/src/pages/tags/[tag].astro:28:70)
    at Array.filter (<anonymous>)
    at eval (/home/watanabejin/workspace/astoro-tutorial/tutorial/src/pages/tags/[tag].astro:28:31)
    at renderPage (file:///home/watanabejin/workspace/astoro-tutorial/tutorial/node_modules/astro/dist/runtime/server/render/page.js:89:36)
    at renderPage (file:///home/watanabejin/workspace/astoro-tutorial/tutorial/node_modules/astro/dist/core/render/core.js:81:26)
    at async renderPage (file:///home/watanabejin/workspace/astoro-tutorial/tutorial/node_modules/astro/dist/core/render/dev/index.js:108:10)
    at async handleRoute (file:///home/watanabejin/workspace/astoro-tutorial/tutorial/node_modules/astro/dist/vite-plugin-astro-server/route.js:152:20)
    at async run (file:///home/watanabejin/workspace/astoro-tutorial/tutorial/node_modules/astro/dist/vite-plugin-astro-server/request.js:46:14)
    at async runWithErrorHandling (file:///home/watanabejin/workspace/astoro-tutorial/tutorial/node_modules/astro/dist/vite-plugin-astro-server/controller.js:65:5)
    at async handleRequest (file:///home/watanabejin/workspace/astoro-tutorial/tutorial/node_modules/astro/dist/vite-plugin-astro-server/request.js:40:3)

 error   Cannot read properties of undefined (reading 'includes')
  File:
    /home/watanabejin/workspace/astoro-tutorial/tutorial/src/pages/tags/[tag].astro:28:70
  Code:
    27 |   </ul>
    > 28 | </BaseLayout>
         |                                                                      ^
  Stacktrace:
TypeError: Cannot read properties of undefined (reading 'includes')
    at eval (/home/watanabejin/workspace/astoro-tutorial/tutorial/src/pages/tags/[tag].astro:28:70)
    at Array.filter (<anonymous>)
    at eval (/home/watanabejin/workspace/astoro-tutorial/tutorial/src/pages/tags/[tag].astro:28:31)
    at renderPage (file:///home/watanabejin/workspace/astoro-tutorial/tutorial/node_modules/astro/dist/runtime/server/render/page.js:89:36)
    at renderPage (file:///home/watanabejin/workspace/astoro-tutorial/tutorial/node_modules/astro/dist/core/render/core.js:81:26)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async renderPage (file:///home/watanabejin/workspace/astoro-tutorial/tutorial/node_modules/astro/dist/core/render/dev/index.js:108:10)
    at async handleRoute (file:///home/watanabejin/workspace/astoro-tutorial/tutorial/node_modules/astro/dist/vite-plugin-astro-server/route.js:152:20)
    at async run (file:///home/watanabejin/workspace/astoro-tutorial/tutorial/node_modules/astro/dist/vite-plugin-astro-server/request.js:46:14)
    at async runWithErrorHandling (file:///home/watanabejin/workspace/astoro-tutorial/tutorial/node_modules/astro/dist/vite-plugin-astro-server/controller.js:65:5)
```

型が正しくないのか`tags`が配列であることが推論で伝わっていないようです
調べても同じようなIssueはみつからず困りました

# 解決方法

まず`glob`について調べて以下の記事を見つけました

https://note.com/jigjp_engineer/n/nc641a935cfdc

>このあたりが Astro API というものです。glob で Markdown を取り出すと、先頭に書かれた Frontmatter までいい感じに読み込んでくれます。

とのことなのでMarkdownを読み込んで推論してくれるとのことなのでMarkdownが悪さをしていると推測できました

そこで`posts`の中のマークダウンをみると

```astro:learning-astro.md
---
layout: ../../layouts/MyMarkdownLayout.astro
title: "Learning About Markdown in Astro"
author: Astro Learner
pubDate: 2022-08-08
---

I learned so much today! Astro allows me to write in Markdown, but also use variables from the frontmatter. I can even access those values in an Astro layout component.
```

このファイルが`tags`がないことが判明しました
これが原因で`tags`の推論ができなくなっていたわけです。おそらく`string[]|undifined`に推論されている気がします

なぜこのファイルがあるのかというとチュートリアルの課題にあった

https://docs.astro.build/ja/tutorial/4-layouts/2/

`Test your knowledge`で作成していました。これが原因でした

このファイルを削除したところうまく動きました

# おわりに

これはチュートリアル的にどうなのでしょうかという作りになっていました
ここは修正してほしいところです

# 参考

https://docs.astro.build/en/tutorial/0-introduction/

https://note.com/jigjp_engineer/n/nc641a935cfdc