アルアカ - Arcadia Academia

Arcadia Academiaは「エンジニアリングを楽しむ」を合言葉に日本のデジタル競争力を高めることをミッションとするテックコミュニティです。

Astro.js入門

Featured image of the post

Astro.jsは、モダンなWebアプリケーションのために設計された次世代の静的サイトジェネレーターです。従来のフロントエンドフレームワークとは異なり、Astroは「部分的な水和(Partial Hydration)」というユニークなアプローチを採用しており、必要な部分だけをクライアントサイドで動的に読み込みます。これにより、パフォーマンスが大幅に向上し、より速いWebサイトを構築することができます。本記事では、Astro.jsの基本的な概念とセットアップ方法を解説し、初めてのAstroプロジェクトを構築するステップをご紹介します。

1. Astro.jsとは?

Astro.jsは、JavaScriptやTypeScriptをベースにした静的サイトジェネレーターですが、React、Vue、Svelte、Solidなどの他のフレームワークと一緒に使用できる点が大きな特徴です。これにより、既存のプロジェクトやスキルを再利用しながら、パフォーマンスを最大限に引き出すことができます。Astroの主要な特徴をいくつか見てみましょう。

1.1 Partial Hydration

通常のフレームワークはクライアントサイドで全てのJavaScriptを読み込みますが、Astroでは、必要な部分だけをクライアントサイドで水和(Hydration)する「Partial Hydration」というコンセプトを採用しています。これにより、クライアントに送られるJavaScriptの量が最小限に抑えられ、パフォーマンスが向上します。

1.2 マルチフレームワークサポート

Astroは、React、Vue、Svelte、Solidなど、さまざまなフレームワークのコンポーネントを一つのプロジェクトで使用することが可能です。これにより、チームやプロジェクトのニーズに合わせて柔軟に選択できるというメリットがあります。

1.3 静的生成

Astroは「静的サイトジェネレーター」としての機能が強力で、ページを事前にビルドして静的ファイルとして提供します。これにより、非常に高速なパフォーマンスが実現されます。

2. 環境設定

では、実際にAstro.jsをインストールし、プロジェクトをセットアップする方法を見てみましょう。

2.1 Node.jsのインストール

まず、Astroを使うためにはNode.jsが必要です。まだインストールしていない場合は、Node.jsの公式サイトから最新版をインストールしてください。

2.2 新しいAstroプロジェクトの作成

Node.jsがインストールされたら、次はAstroプロジェクトを作成します。ターミナルで以下のコマンドを実行してください。

npm create astro@latest

このコマンドを実行すると、プロジェクト名やテンプレートの選択など、いくつかの質問が表示されます。自分のプロジェクトに合った設定を選びましょう。

2.3 Astroプロジェクトの実行

プロジェクトのセットアップが完了したら、プロジェクトディレクトリに移動し、開発サーバーを起動します。

cd プロジェクト名
npm install
npm run dev

このコマンドを実行すると、ローカルホストで開発用のサーバーが立ち上がり、ブラウザでページを確認できます。

3. Astroの基本構造

Astroプロジェクトは、独自のファイル構造を持っています。主なディレクトリとファイルについて簡単に解説します。

  • src/pages/:このディレクトリには、各ページのコンテンツが含まれます。各ファイルはURLに対応し、.astroファイルや.mdファイルで記述されます。
  • src/components/:ここには、再利用可能なUIコンポーネントを配置します。ReactやVue、Svelteなどのコンポーネントもここに含まれます。
  • public/:静的ファイル(画像やフォントなど)はこのディレクトリに配置されます。これらはそのまま公開されるため、ビルド時に最適化されません。
3.1 .astroファイル

Astroでは、.astroという独自のファイル形式が使用されます。これはHTMLに似たテンプレート言語で、ReactやVueのようにコンポーネントを組み合わせてUIを構築することができます。

以下は簡単な.astroファイルの例です。

---
const name = "Astro";
---

<html>
  <head>
    <title>{name}サイト</title>
  </head>
  <body>
    <h1>ようこそ、{name}へ!</h1>
  </body>
</html>

このコードでは、テンプレートの上部に変数やロジックを定義し、その後のHTMLテンプレート内で{}を使って変数を参照しています。

3.2 コンポーネントのインポート

Astroでは、ReactやVueなど他のフレームワークで作成したコンポーネントを簡単にインポートして使用することができます。例えば、Reactコンポーネントをインポートする場合、次のように記述します。

---
import MyReactComponent from '../components/MyReactComponent.jsx';
---

<MyReactComponent />

このように、Astroでは複数のフレームワークのコンポーネントを同時に使用できるため、非常に柔軟な開発が可能です。

4. Astroの応用機能

Astroは単に静的なWebサイトを作成するだけでなく、動的なコンテンツや複雑な機能も簡単に実装することができます。以下はその一部です。

4.1 動的なデータフェッチ

Astroでは、getStaticPathsgetStaticPropsを使って、ビルド時に外部APIからデータを取得することができます。例えば、ブログの記事一覧を外部のAPIから取得して表示する場合、次のように記述します。

---
export async function getStaticProps() {
  const res = await fetch('https://api.example.com/posts');
  const posts = await res.json();
  return { props: { posts } };
}
---

<ul>
  {posts.map(post => (
    <li>{post.title}</li>
  ))}
</ul>
4.2 SEOとパフォーマンス最適化

Astroは、SEO(検索エンジン最適化)やパフォーマンスに関しても優れています。静的なHTMLとして生成されるため、Googleなどの検索エンジンによるインデックスもスムーズです。また、ページごとにJavaScriptを最小限に抑える設計のため、ページのロード時間も短く、ユーザーエクスペリエンスが向上します。

5. まとめ

Astro.jsは、シンプルかつパフォーマンスに優れた静的サイトジェネレーターで、ReactやVueなどの既存技術と統合して使えるため、柔軟性も高いです。そのユニークな部分的水和のアプローチにより、特にパフォーマンスが重視されるプロジェクトで大きな力を発揮します。これからWeb開発を行う際には、Astro.jsをぜひ検討してみてください。



▼ 目次