Astro Plain 使用ガイド
Astro Plain は Astro ベースのミニマルな多言語静的ブログテンプレートで、CSS / UI フレームワークに依存しません。この記事では、Astro Plain の機能紹介、設定説明、コンテンツ管理やデプロイ手順が含まれています。
NOTE
本記事はAIを用いて翻訳されています。
主な特徴
- 高性能ミニマルアーキテクチャ:Astro (新しいタブで開く) の静的サイト生成(SSG)をベースとし、CSS / UI フレームワークに依存しません。Lighthouse の全カテゴリで 100 点満点 (新しいタブで開く)を達成。
- 国際化(i18n)と SEO:
- 簡体字中国語、英語、日本語の翻訳を内蔵。
- サブパスベースの静的多言語ルーティング(例:
/zh-Hans/、/en-US/、/ja-JP/)。 - スマート言語リダイレクト:言語設定 Cookie またはブラウザの言語設定に基づいて、サイトの言語を自動選択。
- 多言語 SEO タグ(
hreflang/x-default/ Open Graph)の自動生成。 - サイトマップ(Sitemap)、
robots.txt、および各言語対応の RSS フィードの自動生成。
- オフライン全文検索:Pagefind (新しいタブで開く) 静的検索エンジンを統合、設定不要。
- モダンな Markdown / MDX ライティング体験:
- Zod と Astro Content Layer (新しいタブで開く) に基づく型安全なコンテンツコレクション。
- Expressive Code (新しいタブで開く) によるコードハイライト。
- 組み込みの実用的な MDX コンポーネント:ファイルツリー(
FileTree(新しいタブで開く))、ステップバイステップ手順(Steps(新しいタブで開く))、タブ(Tabs(新しいタブで開く))、および GitHub スタイルのアラートブロック引用(remark-github-blockquote-alert(新しいタブで開く)) 。例は Markdown & MDX 執筆ガイド をご参照ください。
- その他の機能:Disqus (新しいタブで開く) コメントシステムと Microsoft Clarity (新しいタブで開く) サイトアクセス分析をサポート。
クイックスタート
インストールと実行
-
リポジトリをクローン:
Terminal window git clone https://github.com/Aaakul/astro-plain.gitTerminal window cd astro-plain -
依存関係をインストール:
Terminal window bun installTerminal window pnpm installTerminal window npm install -
ローカル開発サーバーを起動:
Terminal window bun --bun run devTerminal window pnpm run devTerminal window npm run dev開発サーバーはデフォルトで
http://127.0.0.1:4321で起動し、ブラウザが自動的に開きます。 -
静的ビルドとローカルプレビュー:
Terminal window bun --bun run buildTerminal window bun --bun run previewTerminal window pnpm buildTerminal window pnpm previewTerminal window npm run buildTerminal window npm run preview
NOTE
Pagefind はインデックス生成に静的ビルドの出力に依存しています。開発環境で初めて使用する前に、ビルドコマンドを少なくとも1回実行する必要があります。
記事を追加・修正した後、開発サーバーは検索インデックスを自動的に再生成しません。
設定説明
サイト基本設定
コア設定ファイルは site.config.ts にあり、以下の設定項目をサポートしています:
| 設定項目 | 型 | 説明 | デフォルト値 |
|---|---|---|---|
defaultLanguage | string | デフォルト言語コード | "zh-Hans" |
ogImage | string | デフォルトの Open Graph / ソーシャル共有画像(basePath プレフィックスを自動付加) | "/static/images/og.jpg" |
languageNameMap | Record<string, string> | 言語コードと表示名のマッピング | {"en-US": "English", "ja-JP": "日本語", "zh-Hans": "简体中文"} |
siteUrl | string | サイト URL(環境変数 SITE_URL を優先的に読み取り) | "http://127.0.0.1:4321" |
basePath | string | サブパスデプロイプレフィックス(環境変数 BASE_PATH を優先的に読み取り) | "" |
allowRobots | boolean | クローラーを許可するかどうか | true |
cookieMaxAgeDays | "session" | "none" | number | 言語設定 Cookie の有効期間(日数、無効、またはセッション期間) | "session" |
postsPerPage | number | ブログ記事一覧の1ページあたりの表示件数 | 5 |
navLinks | Array<{ href, titleKey }> | トップナビゲーションバーのルートと多言語キー名 | 設定ファイルを参照 |
disqus | { enable, shortname } | Disqus コメント設定(環境変数の読み取り可) | { enable: false, shortname: "" } |
clarity | { enable, projectId } | Microsoft Clarity 統計設定(環境変数の読み取り可) | { enable: false, projectId: "" } |
isShowLogo | boolean | トップナビゲーションバーに Logo アイコンを表示するかどうか | true |
codeTheme | { light, dark } | Expressive Code のライト・ダークハイライトテーマ | { light: "light-plus", dark: "dark-plus" } |
環境変数
.env.example のコメントを参考に .env ファイルを作成してください。
ファビコンと静的リソース
- ファビコンと画像
public/favicon.icopublic/favicon.svgpublic/apple-touch-icon.pngsrc/assets/*を差し替えてください。 - 静的リソースディレクトリ(
public/static/):- Vite / Astro のビルド最適化を必要としない静的リソース(サイト共通の画像やドキュメントなど)は
public/static/ディレクトリに配置し、/static/...パスで直接参照できます。
- Vite / Astro のビルド最適化を必要としない静的リソース(サイト共通の画像やドキュメントなど)は
ソーシャル共有画像(OG Image)
- グローバルデフォルト共有画像:
site.config.tsのogImageフィールドで設定します(デフォルトは"/static/images/og.jpg"で、対応ファイルはpublic/static/images/og.jpg)。サイト全体の Open Graph およびソーシャル共有プレビュー画像として使用されます。推奨サイズは 1200x630 です。 - 記事専用共有画像:記事の Frontmatter で
image(記事カバー画像)が設定されている場合、そちらが優先的に使用されます。
国際化(i18n)
言語関連付けメカニズム(translationKey)
本プロジェクトでは、Frontmatter の translationKey フィールドを使用して、異なる言語の記事間の関連付けを確立します:
- 同一コンテンツの異なる言語版のファイルでは、同じ
translationKeyを宣言する必要があります。 translationKeyに基づいて、言語切替リンクおよびページの hreflang タグが自動生成されます。- ブログ記事は
/zh-Hans/などの言語別サブディレクトリに配置する必要はありません。
新しい言語の追加
site.config.tsのlanguageNameMapに新しい言語コードを追加します(例:"fr-FR": "Français")。i18n/messages/ディレクトリに対応する辞書ファイルを作成します(例:fr-FR.ts)。i18n/utils.tsで翻訳ファイルをインポートします。src/content/author/<言語コード>/ディレクトリを作成し、著者情報ファイル(最低限default.mdx)を追加します。
詳細は 国際化ガイド をご参照ください。
コンテンツ作成規範
コンテンツコレクションは src/content/ に配置され、src/content.config.ts で Schema が定義されています。
ヒーローセクション(Hero Section)
対応するファイルは src/content/mdx/<言語コード>/hero.mdx にあります。
記事(src/content/blog/)
.md と .mdx 形式をサポートしています。
---title: "記事タイトル" # 必須summary: "一覧表示と SEO description 用の短い概要" # 任意translationKey: "unique-key" # 必須:異なる言語版の記事を関連付けるために使用language: "zh-Hans" # 必須:言語コード、`site.config.ts` の `languageNameMap` に含まれている必要ありdate: "2026-08-30T10:00:00Z" # 必須:記事公開日、ISO 8601 形式lastmod: "2026-08-30T12:00:00Z" # 任意:記事更新日、ISO 8601 形式isCanonical: true # 任意:多言語記事の正規版かどうか(`x-default` と `canonical` リンクを生成)draft: false # 任意:下書きフラグ、`true` に設定するとビルド時にスキップされますauthors: ["default"] # 任意:著者リスト、対応するファイル名を記入、デフォルトは `["default"]`categories: ["技術"] # 任意:記事カテゴリtags: ["Astro", "フロントエンド"] # 任意:記事タグenableComments: false # 任意:この記事のコメント欄を有効にするかどうか、デフォルトは `true`image: "@/assets/banner.jpg" # 任意:記事上部のカバー画像---記事リンクの形式は /<言語コード>/{slug化ファイルパス} です。例:/zh-Hans/blog/my-first-post
著者情報(src/content/author/)
本テンプレートは複数の著者をサポートしています。デフォルトの著者ファイルは default.mdx です。
---name: "test" # 必須:著者名language: "zh-Hans" # 必須:言語コードavatar: "@/assets/avatar.svg"occupation: "フルスタックエンジニア"company: "Acme Inc."email: "hello@example.com"link: github: "https://github.com/Aaakul"---本文の内容...デフォルト以外の著者ページリンクの形式は /<言語コード>/about/{slug化ファイル名} です。例:/zh-Hans/about/test
プロジェクトショーケース(src/content/project/)
---name: "Astro Plain" # 必須:プロジェクトタイトルlanguage: "zh-Hans" # 必須:言語コードwebsite: "https://example.com"image: "@/assets/project-preview.png"link: github: "https://github.com/Aaakul/astro-plain"---本文の内容...Markdown 構文 と MDX コンポーネントガイド
Markdown 構文、Expressive Code コードハイライト、および <Steps>、<FileTree>、<Tabs> 組み込み MDX コンポーネントの例については、Markdown & MDX 執筆ガイド をご参照ください。
デプロイ
本プロジェクトはビルド後に純粋な静的ファイルを出力します。ビルド出力ディレクトリは dist です。
例:Cloudflare Pages を使用する場合
-
本プロジェクトをご自身の GitHub アカウントに Fork します。
-
Cloudflare Dashboard (新しいタブで開く) にログインし、コンピュート -> Workers & Pages -> アプリケーションを作成する -> Pages を導入しようとお考えですか? 始める をクリックして GitHub リポジトリを接続します。
-
ビルドパラメータを設定:
-
ビルドコマンド:
Terminal window npm run build -
ビルド出力ディレクトリ:
dist -
環境変数:
SITE_URLをデプロイ後のサイトドメインに設定(例:https://example.pages.dev)し、必要に応じて Disqus と Microsoft Clarity を設定してください。
-
-
保存してデプロイ。以降
mainブランチにプッシュ(Push)するたびに自動的にビルドとデプロイが行われます。
プロジェクトディレクトリ構造
ディレクトリi18n/ 多言語辞書、型定義、ユーティリティ関数
ディレクトリmessages/ 各言語のローカライズ翻訳キーバリューファイル (zh-Hans, en-US, ja-JP)
- …
- …
ディレクトリlib/ Rehype / Remark プラグインと Starlight MDX コンポーネント
- …
ディレクトリpublic/ 静的リソース (ファビコン, OG画像など)
ディレクトリstatic
ディレクトリimages
- og.jpg
- apple-touch-icon.png
- favicon.ico
- favicon.svg
- _headers HTTP レスポンスヘッダー設定 (CSP セキュリティポリシーとキャッシュルール)
ディレクトリsrc/
ディレクトリassets/ ビルド時に最適化される静的リソース (記事画像, 著者アバター)
- avatar.svg
- …
ディレクトリcomponents/ Astro UI コンポーネント (ナビバー, 検索, コメント, MDXコンポーネント)
- …
ディレクトリcontent/ コンテンツデータコレクション (blog, author, project, hero)
- …
ディレクトリlayouts/ ページレイアウトテンプレート
- …
ディレクトリpages/ Astro ルーティングファイル
- …
ディレクトリstyles/ グローバル CSS スタイルシート
- …
- content.config.ts Astro Content Layer コレクション定義
- astro.config.mjs Astro 設定ファイル
- site.config.ts サイトコア設定ファイル
- package.json 依存関係と実行スクリプト
- .env.example 環境変数設定例
オープンソースライセンス
本プロジェクトは MIT License のもとでオープンソース公開されています。Star、PR、Issue の投稿を歓迎します。
