Astro DBは、Astroが公式で提供するデータベースサービスです。これを利用すると、簡易的なCMSとして利用したり、お問い合わせフォームの内容を一時的に保管しておく場所として利用するなど、情報を記録したり取り出したりなどの用途で広く利用できます。
早速使ってみましょう。
Astro Studioを利用しよう
Astro DBはAstro Studioというサービス内で提供されているため、まずはAstro Studioのアカウントを準備する必要があります。そして、Astro StudioのアカウントはGitHubアカウントを利用するため、まずはGitHubアカウントを準備しましょう。
そしたら、Astro Studioにサインインします。
ログインすると、図のような「プロジェクト」画面が表示されます。
プロジェクトを作成しよう
続いて、プロジェクトを作成します。プロジェクトを作成すると、データベーススペースが準備されます。
右上の「+」ボタンをクリックしましょう。選択肢が表示されるので、ここでは一番下の「Create Empty Project」をクリックして空のプロジェクトを作成します。
なお、他の選択肢は次の通りです。
- Import from GitHub repo… 既存のプロジェクトをGitHubからインポートします
- Create from Template… テンプレートから選択します。2024年現在ではJob Boardと、Wait Listというテンプレートが準備されています
- Create from CLI… コマンドラインを使って作成できます
- Create Empty Project… 新しいプロジェクトを作成します
続いて、作成するGitHubのリポジトリ名を入力します。新しく作成されるので、既存のリポジトリ名と重ならない名前にしましょう。その他、次のような設定をします。
- Repo Visibility… リポジトリをプライベートに設定します。基本的にはチェックをつけたままにしましょう。誰でも見られるリポジトリになってしまいます。
- Region… データベースの配置場所を選びます。「Asia(Japan)」を選ぶと、日本国内のサーバーに配置されます。
こうしてプロジェクトを作成しましょう。完成すると、図のような画面が表示されます。
リポジトリをクローンしよう
プロジェクトが作られると、指定されたGitHubリポジトリに必要なファイル群が配置されます。これをクローンしましょう。GitHub Desktopをセットアップしていたら、「Open with GitHub Desktop」でクローンすると良いでしょう。
これを、VSCodeで開きましょう。
依存ファイルをインストールして起動しよう
クローンしたプロジェクトには、Node.jsの依存ファイル群が含まれていないので、これをインストールしましょう。VSCodeのターミナルを起動して、次のように入力します。
npm install
依存ファイルがインストールできたら、ローカルサーバーを起動しましょう。
npm run dev
これで、Astroのプロジェクトが起動しました。
データベースを定義しよう
Astro Studioで作成したプロジェクトには、あらかじめ「db」というフォルダが作られていて、ファイルが生成されています。
なお、既存のAstroのプロジェクトに後からAstro DBを追加したい場合は、次のコマンドを入力します。
npx astro add db
そしたら、「db/config.ts」ファイルを開きましょう。ここで、データベースのテーブルを定義します。
データベースは「カラム」という、Excelの「列」のようなものをあらかじめ準備する必要があります。このカラムに対してデータを格納していくイメージになります。
ここでは、簡易的なコメント欄を作成する事を想定し、タイトルと内容を格納するカラムを準備しましょう。次のように書き加えます。
import { defineDb, defineTable, column } from "astro:db";
const Comment = defineTable({
columns: {
title: column.text(),
body: column.text(),
},
});
// <https://astro.build/db/config>
export default defineDb({
tables: { Comment },
});
それぞれ解説しましょう。
まずは、データベースの定義に必要なモジュールをインポートします。
import { defineDb, defineTable, column } from "astro:db";
ここでは、「defineDb」「defineTable」「column」をインポートしました。
そして、「Comment」という名前のテーブルを定義します。
const Comment = defineTable({
columns: {
title: column.text(),
body: column.text(),
},
});
このテーブルには、titleとbodyというカラムを準備しています。カラムには、「データ型」を指定する必要があるので、ここではテキスト(column.text())が指定できるようにしています。データ型には、次のものが指定できます。
- column.text()… テキスト
- column.number()… 数字
- column.boolean()… ブーリアン(trueまたはfalse)
- column.date()… 日付
- column.json()… JSONデータ
データ型の指定のカッコの中にはオプションを指定できます。
最後に、ここで作成したテーブルをAstro DBに登録します。
export default defineDb({
tables: { Comment },
});
これで準備完了です。
シードデータを作成しよう
ここで準備したデータベースには、データを挿入することができるのですが、開発中に毎回データを入れていくのは大変です。そこで、「シーズデータ」というシード(Seed:種)のデータをあらかじめ準備しておき、プログラムを動作させる度に、それらのデータが準備されていると開発が楽になります。
「db/seed.ts」というファイルがあらかじめ準備されているため、ここに次のように追記しましょう。
import { db, News } from "astro:db";
export default async function seed() {
// Seed local development data.
// See <https://docs.astro.build/en/guides/astro-db/#seed-your-database>
await db.insert(News).values([
{ id: 1, title: "こんにちは", body: "拝見しました" },
{ id: 2, title: "初めまして", body: "よろしくお願いします" },
]);
}
JSON形式でデータを準備していきます。これで、テーブルにはあらかじめデータが準備された状態で開発を始めることができる用になります。
Astro DBの内容を画面に表示しよう
それではいよいよ、このデータベースを使ってコメントの一覧ページを作成してみましょう。ここでは、あらかじめ準備されている「src/pages/index.astro」を変更していきましょう。
まずはファイルの先頭に、データを取得するための処理を記述します。
---
import { db, Comment } from "astro:db";
const comments = await db.select().from(Comment);
---
...
これでニュースが取得されます。後は、JSONデータの配列データなので、これを繰り返しで処理していけば、一覧画面を作成することができます。
{comments.map(({ title, body }) => (
<article>
<h2>{title}</h2>
<p>{body}</p>
</article>
))}
このあたりのプログラムの解説は省略するため、必要な場合はAstroの基本をご確認ください。
Cloudflare Pagesで公開しよう
これで、ひとまずWebサイトが完成したとして、これをネットに公開しましょう。公開するには、サーバーが必要となりますが、ここではCloudflare Pagesを利用して公開していきます。
Cloudflareのアカウントを作成したら、「Workers & Pages」で「Pages」タブをクリックして、「Gitに接続」ボタンをクリックしましょう。
GitHubアカウントで連携して、先ほどAstro Studioで作成したリポジトリを選択します。
プロジェクト名やプロダクションブランチはそのままにして、「ビルドの設定」の「フレームワークプリセット」で「Astro」を選択します。
これで準備完了です。
Astro DBとCloudflareを接続しよう
続いて、Astro DBとCloudflareを接続します。これには、Appトークンと呼ばれるキーコードを利用します。
Astro Studioにログインしたら、プロジェクトの「Generate App Token(Appトークンを作成する)」をクリックします。
トークン名には見分けがつくような「Cloudflare」などを入力して「Generate」ボタンをクリックすると、トークン文字列が発行されるので、これをコピーしておきましょう。
次に、Cloudflare Pagesで「設定」タブの「環境変数」でプロダクションの「変数を追加する」ボタンをクリックしましょう。
変数名に「ASTRO_STUDIO_APP_TOKEN」と入力し、値に今コピーしたトークンを貼り付けます。
保存しておきましょう。
リモートのDBと接続しよう
続いて、Astroの設定ファイルでDBをリモートのDBに設定します。これにより、Astro Studio内のDBが利用されるようになります。
package.jsonファイルを開いたら、8行目付近の記述を次のように変更しましょう。
"build": "astro build",
↓
"build": "astro buid --remote",
これですべての準備が整いました。GitHubに最新ファイルをプッシュすれば、Cloudflare Pagesでビルドが始まります。
データベースを更新しよう
それではここに、新しいデータを投入してみましょう。Astro Studioでプロジェクトを選択したら「1 Tables」と書かれたエリアをクリックします。
すると、データベースの管理画面が表示されます。ここで、新しいデータを投入してみましょう。
画面を更新するには再ビルドが必要になるので、Cloudflare Pagesでビルド一覧を表示したら、一番右側のメニューボタンから「デプロイを再試行」をクリックします。
ビルドが正常に終わったら、発行されたURLにアクセスしてみましょう。データベースに挿入した内容が反映されます。
こうして、手軽にデータベースと連携できるので、Astroをますます便利に利用していきましょう。