Skip to content
Cloud AI エンジニア入門ガイド
Go back

04. astro-paper.config.ts で設定する

この章の全体像として、設定の解決、site、features、socials と共有の4つを番号順に並べ、設定の意味と影響範囲が分かるようになることを示した図

シリーズ目次 前章: 03. AstroPaperのディレクトリ構成を読み解く 次章: 05. AstroPaperで記事を書く:フロントマターと公開制御

Table of contents

Open Table of contents

この章のねらい

astro-paper.config.ts は、AstroPaperで最初に編集するファイルです。全項目を並べて、それぞれが画面のどこに効くのかを見ていきます。

設定はどう解決されるのか

設定ファイルの値が既定値と合成され、各ページから参照されるまでの流れを示した図

つまり、編集するのは astro-paper.config.ts だけで、src/config.ts は触りません。

ファイルの骨格

import { defineAstroPaperConfig } from "./src/types/config";

export default defineAstroPaperConfig({
  site: {
    /* ... */
  },
  posts: {
    /* ... */
  },
  features: {
    /* ... */
  },
  socials: [],
  shareLinks: [],
});astro-paper.config.ts

defineAstroPaperConfig は、設定オブジェクトをそのまま返すだけの関数です。実行時には何もしませんが、これで包むことでエディタが期待される形を認識し、入力補完と型チェックが効くようになります

site は必須、残りの4グループは省略できます。5つが何を受け持つのかを先に掴んでおいてください。

必須のsiteグループと、省略できるposts・features・socials・shareLinksの4グループが、それぞれ受け持つ設定内容を示した図

site:サイトの基本情報

必須のグループです。

site: {
  url: "https://example.com/",
  title: "サンプルブログ",
  description: "Web開発について学んだことを書いています。",
  author: "sample-author",
  profile: "https://example.com/about/",
  ogImage: "default-og.jpg",
  lang: "ja",
  timezone: "Asia/Tokyo",
  dir: "ltr",
},astro-paper.config.ts
項目必須既定値説明
url公開先のURL。正規URL、OG画像、RSS、サイトマップの組み立てに使う
titleサイト名。ヘッダー、タイトルタグ、OG画像に出る
descriptionサイトの説明。検索結果やSNS共有時に表示される
author既定の著者名。記事側で上書きできる
profileなし著者のプロフィールURL。構造化データに使われる
ogImage"default-og.jpg"public/ 内の既定OG画像のファイル名
lang"en"<html lang="..."> に入る言語コード
timezone"UTC"記事日時の表示に使うタイムゾーン
dir"ltr"文字の向き。"ltr" / "rtl" / "auto"
googleVerification環境変数Google Search Console用の確認値

必須の4項目は、それぞれ1か所ではなく複数の出力先へ同時に届きます。

url、title、description、authorの4項目が、正規URLやRSS、ヘッダーやOG画像、検索結果やSNS共有、記事の著者表示のどこへ届くかを対応させ、構造化データの著者名だけは常にsite.authorが使われることを添えた図

url は正確に

url はSEOに直結します。ここに書いたURLをもとに、各ページの正規URL(<link rel="canonical">)やサイトマップが作られます。間違ったURLを入れると、検索エンジンが別サイトの内容だと判断してしまう可能性があります。

ogImage はファイル名のみ

ogImage には public/ 直下のファイル名だけを書きます。/.. を含めるとビルド時にエラーになります。これは、意図しないファイルを外部へ公開してしまうのを防ぐための制限です。

timezone の効き方

記事の日付表示に使われます。"Asia/Tokyo" を設定すると、フロントマターに書いた協定世界時(UTC)の日時が日本時間に変換されて表示されます。IANAタイムゾーン名(Asia/TokyoAmerica/New_York など)を使ってください。

googleVerification

設定ファイルに直接書くこともできますが、環境変数 PUBLIC_GOOGLE_SITE_VERIFICATION からも読み込まれます。設定ファイルの値が優先され、なければ環境変数が使われます。

site: {
  // ...
  googleVerification: "<your-verification-value>",
},astro-paper.config.ts

posts:記事一覧の挙動

posts: {
  perPage: 10,
  perIndex: 5,
  scheduledPostMargin: 15 * 60 * 1000,
},astro-paper.config.ts
項目既定値説明
perPage4/posts/ のページ送りで1ページに載せる件数
perIndex4トップページの「Recent Posts」に載せる件数
scheduledPostMargin900000(15分)予約公開を前倒しで表示する猶予(ミリ秒)

scheduledPostMargin とは

未来の日時を設定した記事は、その時刻まで公開されません。ただし、ビルドしてから配信されるまでには時間差があります。そこで「公開時刻の少し手前でビルドした場合も、公開済みとして扱う」猶予がこの項目です。

既定の15分は 15 * 60 * 1000 ミリ秒と書かれています。計算式のまま残しておくと、後から読んで意図が分かります。

3つの数値が、それぞれ別の画面と別のタイミングを受け持っています。

perIndexがトップページの件数、perPageが記事一覧1ページの件数、scheduledPostMarginが予約公開の猶予を決めることを、画面イメージと時間軸で示した図

features:機能のON/OFF

features: {
  lightAndDarkMode: true,
  dynamicOgImage: true,
  showArchives: true,
  showBackButton: true,
  editPost: { enabled: false },
  search: "pagefind",
},astro-paper.config.ts
項目既定値説明
lightAndDarkModetrueライト/ダーク切り替えボタンを出す
dynamicOgImagetrue記事ごとのOG画像を自動生成する
showArchivestrue/archives/ ページとナビゲーションのリンクを出す
showBackButtontrue記事詳細に「戻る」ボタンを出す
editPost{ enabled: false }記事詳細に「編集」リンクを出す
search"pagefind"検索機能。false で無効化

editPost の書き方

有効にする場合は、編集ページのURLも一緒に指定します。

editPost: {
  enabled: true,
  url: "https://github.com/<your-org>/<your-repo>/edit/main/",
},astro-paper.config.ts

型定義では、enabled: true のときだけ url が必須になるよう定義されています。片方だけ書くと型エラーになるため、書き忘れを防げます。

無効にしたときの動き

showArchivessearchfalse にすると、リンクが消えるだけでなく、そのURLへ直接アクセスしても404ページが表示されます。/archives//search/ のコードには、設定を見て404へ振り替える処理が入っています。

dynamicOgImagefalse にするなら、画像を先に用意してください。public/{site.ogImage} のファイルが存在しないとビルドが失敗します。自動生成に頼らないのであれば、必ず画像を用意してください。詳しくは第10章で扱います。

6つのスイッチの既定値と、切り替えたときの影響をまとめると次のようになります。

lightAndDarkMode、dynamicOgImage、showArchives、showBackButton、editPost、searchの6項目をスイッチの形で並べ、既定値とfalseにしたときの影響を示した図

socials:SNSリンク

ヘッダーとフッターに並ぶアイコンリンクです。

socials: [
  { name: "github", url: "https://github.com/<your-org>" },
  { name: "mail", url: "mailto:<your-address>" },
],astro-paper.config.ts
項目必須説明
namesrc/assets/icons/socials/ にあるSVGのファイル名(拡張子なし)
urlリンク先
linkTitle読み上げ用のラベル。省略時は自動生成される

name はアイコンのファイル名と一致している必要があります。src/assets/icons/socials/github.svg があるから "github" と書ける、という関係です。存在しない名前を書くとビルドが失敗します。

空の配列(または未設定)にすると、SNSリンクの領域そのものが表示されなくなります。

shareLinks:記事の共有ボタン

記事詳細ページの下部に出る共有ボタンです。

shareLinks: [
  { name: "x", url: "https://x.com/intent/post?url=" },
  { name: "facebook", url: "https://www.facebook.com/sharer.php?u=" },
  { name: "mail", url: "mailto:?subject=See%20this%20post&body=" },
],astro-paper.config.ts

url は「記事のURLを末尾に付け足せば共有できる」形にしておきます。テーマ側が末尾に記事URLを連結します。

socials と同様に、空にすれば共有ボタンは表示されません。

設定を変更したら

astro-paper.config.ts を保存すると、開発サーバーは自動で再読み込みします。もし反映されない場合は、一度サーバーを止めて起動し直してください。

型エラーは pnpm astro check で確認できます。

pnpm astro check

最小構成の例

必須項目だけを書いた最小の設定は次のようになります。

import { defineAstroPaperConfig } from "./src/types/config";

export default defineAstroPaperConfig({
  site: {
    url: "https://example.com/",
    title: "サンプルブログ",
    description: "学んだことを記録しています。",
    author: "sample-author",
  },
});astro-paper.config.ts

これだけで、残りはすべて既定値で動きます。この形から始めて、要る項目だけ足してください。

要点

参考資料


シリーズ目次 前章: 03. AstroPaperのディレクトリ構成を読み解く 次章: 05. AstroPaperで記事を書く:フロントマターと公開制御


Share this post:

Previous Post
05. AstroPaperで記事を書く:フロントマターと公開制御
Next Post
03. AstroPaperのディレクトリ構成を読み解く