SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Astroで始める静的サイト作成入門

「Astro」で爆速Web開発をはじめよう! インストールから環境構築までを解説

  • X ポスト
  • このエントリーをはてなブックマークに追加

Astroコンポーネントのコーディング

 Astroコンポーネントは、.astro拡張子を持つ、Astro独自のUI言語を使用したファイルです。先ほど開発サーバーで表示されたページも、src/pages/index.astroというファイルが静的なHTMLに変換されたものになります。

 それでは、index.astroの中身をVSCodeで開いて見てみましょう。

---
---

<html lang="en">
  <head>
    <meta charset="utf-8" />
    <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
    <meta name="viewport" content="width=device-width" />
    <meta name="generator" content={Astro.generator} />
    <title>Astro</title>
  </head>
  <body>
    <h1>Astro</h1>
  </body>
</html>

 Astroコンポーネントは、大きく分けて、「コンポーネントスクリプト」と「コンポーネントテンプレート」と呼ばれる領域から成り立っています。

---
// コンポーネントスクリプト
---
<!-- コンポーネントテンプレート -->

 .astroという特殊な拡張子を見ると、新しい言語体系を学ばなくてはならないと身構えてしまうところですが、.astro言語はHTMLのスーパーセットになっており、HTMLとしての機能をすべて含んだ上で、より便利な機能が拡張された上位互換というべきものになっています。したがって、普段のHTMLコーディングで見慣れたマークアップをすべてそのまま記述することができます。

 試しに、このindex.astroのファイルを少し修正してみましょう。

---
---
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
    <link rel="icon" type="image/svg+xml" href="/favicon.svg">
    <meta name="viewport" content="width=device-width">
    <meta name="description" content="Astroのサンプルページです。">
    <title>Astro</title>
  </head>
  <body>
    <main class="main">
      <article class="article">
        <h1 class="title">Astro</h1>
        <figure>
          <img src="/favicon.svg" alt="Astroのロゴ" width="100" height="100">
        </figure>
        <h2>見出しが入ります。</h2>
        <p>文章のサンプルです。<br>
        改行が入ります。</p>
        <ul>
          <li>リスト項目</li>
          <li>リスト項目</li>
        </ul>
      </article>
    </main>
  </body>
</html>

 修正内容は以下のとおりです。

  • <!DOCTYPE html>を追加
  • lang属性をjaに修正
  • 一部の自己終了タグ(metalink)の末尾スラッシュ(/)を削除(あっても問題ありませんが、imgbrタグなども合わせて無しに統一)
  • <meta name="generator"...>(このページは○○で作られました情報)を削除
  • <meta name="description"...>を追加
  • body内にいくつかのマークアップ(一部class属性あり)を追加

 先ほど開発サーバーとして開いたブラウザで、修正内容が反映されていることを確認してみましょう。

開発サーバーで修正内容の反映を確認
開発サーバーで修正内容の反映を確認

 上記修正したindex.astroのコードを見てわかるように、冒頭の---で囲われた部分(コンポーネントスクリプト)、

---
// コンポーネントスクリプト
---

 を除いたコード(コンポーネントテンプレート)は、通常のHTMLとなんら遜色のないマークアップで記述されています。

 コンポーネントテンプレートでは、ReactにおけるJSX構文と異なり、

  • class属性のclassName表記
  • 自己終了タグ(imgbrなど)の末尾スラッシュ(/)が必須

などの縛りもありません。

 つまり、すでに運用中のHTMLファイルがあった場合、それらのコードをそのまま流用して、.astroとして構築することもできます。

 その上で、JavaScriptを内包できるJSXに似た構文や、CSSスコープなどの便利な機能を使うこともできるため、開発初心者にとってAstroコンポーネントは、非常に柔軟でとっつきやすいファイル形式と言えるでしょう。

publicフォルダーの扱い

 publicフォルダーに格納されたアセット群は、Astroのビルド(astro build)によって、distフォルダに同名・同階層のファイルとしてコピーされます。

 例:

 public/favicon.svgdist/favicon.svg

 public/images/icon-menu.pngdist/images/icon-menu.png

 この場合、Astroコンポーネントからは、publicフォルダーから見たルートパスで記述することができます。

<!-- public/favicon.svgを画像として挿入する -->
<img src="/favicon.svg" alt="Astroのロゴ" width="100" height="100">

ビルドする際に、特別な処理や最適化などが必要ないアセットに関しては、このようにpublicフォルダを使った運用も可能です。

Astroの「ページ」

 Astroプロジェクトにおける「ページ」は、src/pagesフォルダーにあるファイル群のことで、以下のファイルタイプをサポートしています。

  • .astro(Astroコンポーネントファイル)
  • .html(HTMLファイル)
  • .md(マークダウンファイル)
  • .mdx(マークダウンを拡張した形式のファイル)

 src/pagesフォルダーに格納されたこれらのファイルは、Astroのビルド(astro build)によって、それぞれ同名・同階層の静的HTMLファイルに変換されてdistフォルダに出力されます。

 .md(マークダウンファイル)なども自動的にHTMLに変換されるため、シンプルなドキュメント運用も可能ですが、この連載では基本的に.astroファイルを用いたコーディングに絞って解説していきます。

 例:

 src/pages/index.astrodist/index.html

 src/pages/about.astrodist/about/index.html

 src/pages/news/2023.astrodist/news/2023/index.html

 デフォルトの設定だと、index.astro以外のファイル名の場合、ファイル名/index.htmlに変換されますが、astro.config.mjsに以下のフォーマットオプションを追加することで、

import { defineConfig } from 'astro/config';

// <https://astro.build/config>
export default defineConfig({
  // 追加ここから
  build: {
    format: 'file'
  },
  // 追加ここまで
  server: {
    host: true,
    open: true
  },
});

 src/pages/about.astrodist/about.html

のように、ファイル名.htmlに変換することもできます。最終的に実現したいサイト構造に応じて適宜使い分けてください。

 連載第2回では、Astro開発環境の構築と、.astro拡張子のファイルを用いたコーディングの基本を解説しました。次回は、Astroの再利用可能なコンポーネントの作成と運用方法を説明したいと思います。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Astroで始める静的サイト作成入門連載記事一覧

もっと読む

この記事の著者

池原健治(イケハラ ケンジ)

 ゲーム会社のUXデザイナー。デザイン、プロトタイピング、コーディングなどを担当する他、SNSでの情報発信や、登壇活動など、幅広く活動している。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/18075 2023/09/13 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング