ページ

ページは、src/pages/サブディレクトリにあるAstroコンポーネントの特殊なタイプです。Webサイトの各HTMLページのルーティング、データロード、全体的なページレイアウトを処理する役割を担っています。

ファイルベースルーティング

Section titled ファイルベースルーティング

Astroは、ファイルベースルーティングと呼ばれるルーティング手法を採用しています。 src/pagesディレクトリ内のすべての.astroファイルは、そのファイルパスに基づいてサイトのページ、またはエンドポイントになります。

ページ間のリンクを張るには、HTMLの<a>要素をコンポーネントテンプレートに記述してください。

📚 Astroのルーティングについて詳しくみる。

Astroページは、<head><body> を含む完全な <html>...</html> ページレスポンスを返す必要があります。(<!doctype html> はオプションで、書かなくても自動的に追加されます)。

src/pages/index.astro
---
---
<html>
  <head>
    <title>ホームページ</title>
  </head>
  <body>
    <h1>私のホームページへようこそ!</h1>
  </body>
</html>

ページレイアウトの活用

Section titled ページレイアウトの活用

すべてのページで同じHTML要素を繰り返すことを避けるために、共通の <head><body> 要素を独自のレイアウトコンポーネントに移動できます。レイアウトコンポーネントはいくつでも使えます。

src/pages/index.astro
---
import MySiteLayout from '../layouts/MySiteLayout.astro';
---
<MySiteLayout>
  <p>レイアウトに包まれたコンテンツ!</p>
</MySiteLayout>

📚 Astroのレイアウトコンポーネントについて詳しくみる。

Astroは /src/pages/ にあるMarkdown (.md) ファイルも、最終的なWebサイトのページとして扱います。これらは一般的に、ブログの投稿やドキュメントのような、テキストを多用するページに使用されます。

ページレイアウトはMarkdownファイルに対して特に有効です。Markdownファイルは特別な layoutというfront-matterプロパティを使用して、Markdownコンテンツを <html>...</html> ページドキュメントにラップする レイアウトコンポーネントを指定できます。

src/pages/page.md
---
layout: '../layouts/MySiteLayout.astro'
title: 'Markdownページ'
---
# タイトル

これは**Markdown**で書かれたページです。

📚 AstroのMarkdownについて詳しくみる。

.json.xmlなどのHTMLではないページや、画像などのアセットも、一般的にファイルルートと呼ばれるAPIルートで構築できます。

ファイルルートは、拡張子が .js または .ts であるスクリプトファイルで、src/pages/ ディレクトリに配置されたものです。

ビルドされるファイル名と拡張子はソースファイルの名前に基づいています。たとえば、src/pages/data.json.ts は、最終的に /data.json のパスとマッチするようにビルドされます。

SSR(サーバーサイドレンダリング)では、拡張子は関係ないので省略できます。これは、ビルド時にファイルが生成されないためです。その代わり、Astroは1つのサーバーファイルを生成します。

src/pages/builtwith.json.ts
// 出力先: /builtwith.json

// ファイルルートはget()関数をエクスポートし、それがファイルを生成するために呼び出されます。
// 最終的なビルドでファイルの内容を保存するために、`body` を持つオブジェクトを返します。
export async function get() {
  return {
    body: JSON.stringify({
      name: 'Astro',
      url: 'https://astro.build/',
    }),
  };
}

APIルートは、params (EN)Request を含む APIContext オブジェクトを受け取ります。

src/pages/request-path.json.ts
import type { APIContext } from 'astro';

export async function get({ params, request }: APIContext) {
  return {
    body: JSON.stringify({
      path: new URL(request.url).pathname
    })
  };
}

APIルートの関数は APIRoute 型を使って書くこともできます。これにより、APIルートが間違った型を返した場合に、より適切なエラーメッセージを表示できます。

src/pages/request-path.json.ts
import type { APIRoute } from 'astro';

export const get: APIRoute = ({ params, request }) => {
  return {
    body: JSON.stringify({
      path: new URL(request.url).pathname
    })
  };
};

カスタム404エラーページ

Section titled カスタム404エラーページ

カスタムの404エラーページを作成するには、src/pages404.astro または 404.md ファイルを作成します。

これは 404.html ページにビルドされます。ほとんどのデプロイサービスはこのファイルを見つけて使用します。