Astroでブログを作る(1)
2024-04-01
URLの設計
Astroがそもそもブログのためのシステムではないので、WordPressのデフォルトのようなURL構造を持っていない。
pagesの中にディレクトリとファイルを置けば、そのままWebサイトの構造となる。
Astroをブログとして利用するにあたって、以下のことができるようにする。
URL | 機能 |
---|---|
/ | トップページ。ブログの記事一覧の1ページ目 |
/[ページ数] | 記事一覧のNページ目 |
/tags/ | タグ一覧のページ |
/tags/[タグ名]/[ページ数] | タグ別記事一覧のNページ目 |
/about | よくある固定ページ |
ファイル構成
./
├── public
│ ├── img
│ └── robots.txt
├── src
│ ├── components
│ │ └── Summary.astro
│ ├── content
│ │ └── posts
│ │ └── *.md
│ ├── layouts
│ │ └── Layout.astro
│ └── pages
│ ├── [...page].astro
│ ├── about.astro
│ ├── archives
│ │ └── [slug].astro
│ └── tags
│ ├── index.astro
│ └── [tag]
│ └── [page].astro
├── README.md
├── astro.config.mjs
├── package.json
└── package-lock.json
静的ルーティング
「pages/about.astro」というファイルを作れば https://example.com/about のページができる。
「pages/tags/index.astro」というファイルを作れば https://example.com/tags/ のページができる。
pages/ 以下の、大括弧([])がない普通のファイル名のファイルは静的ルーティングに対応する。
動的ルーティング
「https://example.com/archives/ページ名」 に対応するのが、「pages/archives/[slug].astro」のファイル。
phpなどの感覚で、つい、URLに対応するphpファイルがあると考えてしまうと理解しづらくなると思う。
静的ファイル生成(SSG)なので、「pages/archives/[slug].astro」のgetStaticPaths() が返した分のページが生成されるという理解をするとよい。
動的ルーティング 2階層
複数階層の動的ルーティングも可能。
「https://example.com/tags/タグ名/ページ名」 に対応するのが、「pages/tags/[tag]/[page].astro」のファイル。
これも、「pages/tags/[tags]/[page].astro」のgetStaticPaths() が返した分のページが生成されるという理解をするとよい。