アーキテクチャ

このページ

EmDash は Astro インテグレーションです。astro.config.mjs に追加し、データベースとストレージを選択し、コンテンツコレクションを定義します。このページでは、サイトを構築するために必要なモデルについて説明します。内部構造(テーブルレイアウト、リクエストパス、コード生成)については、アーキテクチャ(内部)を参照してください。

EmDash がサイトに追加するもの

┌──────────────────────────────────────────────┐
│              あなたの Astro サイト             │
│                                               │
│   あなたが書くページとコンポーネント           │
│        │                                      │
│        │  getEmDashCollection() / getEmDashEntry()
│        ▼                                      │
│   ┌───────────────┐      ┌────────────────┐   │
│   │   コンテンツ  │      │  管理パネル    │   │
│   │ (あなたのデータ)│◄────►│ /_emdash/admin │   │
│   └───────────────┘      └────────────────┘   │
│        │                                      │
│   データベース (SQLite / libSQL / D1 / Postgres)│
│   メディアストレージ (ローカル / R2 / S3)      │
└──────────────────────────────────────────────┘

ページとコンポーネントは通常通り書きます。EmDash はコンテンツ、それを編集するための管理パネル、そしてその背後にあるデータベースとストレージを提供します。編集者は管理パネルで作業し、あなたのページはクエリ関数を通じて同じコンテンツを読み取ります。

コンテンツモデル

管理パネルまたは CLI でコレクションとフィールドを定義すると、EmDash はそれらに対してコンテンツを保存します。

いつでも変更可能

必要に応じて、コレクションとフィールドをいつでも追加、名前変更、削除、または型変更できます。 変更は即座に有効になります。

編集者が設計

コンテンツ編集者は、管理 UI を通じてモデル全体を設計できます。

型付き

現在のモデルから TypeScript 型を生成し、クエリからテンプレートまでの オートコンプリートを実現します。

ポータブル

モデルを JSON シードファイルとしてエクスポートしてバージョン管理し、 別の環境で適用します。

定義、変更、型付け、シード方法については、コンテンツモデルを参照してください。

コンテンツはライブ

EmDash は実行時に Astro の Live Collections を通じてコンテンツを提供するため、編集者が行った変更は即座に表示されます。2つの関数でコンテンツを読み取ります:

import { getEmDashCollection, getEmDashEntry } from "emdash";

const { entries: posts } = await getEmDashCollection("posts");
const { entry: post } = await getEmDashEntry("posts", "my-post-slug");

フィルタリング、ページネーション、下書きについては、コンテンツのクエリを参照してください。

設定するもの

データベースとストレージバックエンドをインテグレーションに渡します。それ以外はすべてデフォルトです。

import { defineConfig } from "astro/config";
import emdash, { local } from "emdash/astro";
import { sqlite } from "emdash/db";

export default defineConfig({
	integrations: [
		emdash({
			database: sqlite({ url: "file:./data.db" }),
			storage: local({ directory: "./uploads" }),
		}),
	],
});
  • データベース: SQLite(ローカルまたは libSQL)、Cloudflare D1、または PostgreSQL。データベースオプションを参照してください。
  • ストレージ: ローカルファイルシステム、Cloudflare R2、またはメディア用の S3 互換ストレージ。ストレージオプションを参照してください。

プラグインで拡張

プラグインはコンテンツとメディアのライフサイクルイベントに反応し、管理ページ、ダッシュボードウィジェット、設定を追加できます。2つの形式があります:

  • ネイティブプラグインはホスト環境でフルアクセスで実行されます。ファーストパーティおよび信頼できるプラグインに最適です。
  • サンドボックス化されたプラグインは分離されたランタイムで機能ベースの権限で実行されます。サードパーティプラグインに最適です。

プラグインを選択してインストールするにはプラグイン概要を、プラグインを作成するにはプラグインの作成を参照してください。

次のステップ

管理パネル

管理パネルが編集者と管理者に提供するものを確認します。