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

03. AstroPaperのディレクトリ構成を読み解く

この章の全体像として、よく触る、たまに触る、触らない、src と publicの4つを番号順に並べ、直したい場所へ迷わずたどり着けるようになることを示した図

シリーズ目次 前章: 02. AstroPaperのインストールと開発サーバーの起動 次章: 04. astro-paper.config.ts で設定する

Table of contents

Open Table of contents

この章のねらい

プロジェクトを作ると、ディレクトリとファイルがどっと現れます。全部覚える必要はありません。よく触る場所、たまに触る場所、基本的に触らない場所の3つに分けて押さえておけば、必要なときに目的地へ行けます。

プロジェクトルートとsrcディレクトリの主要なディレクトリ構成を示した図

全体像

READMEに記載されている構成を、コメント付きで示します。

/
├── public/                 # そのまま配信されるファイル
   ├── pagefind/           # ビルド時に自動生成される検索索引
   ├── favicon.svg
   └── default-og.jpg
├── src/
   ├── assets/
   ├── icons/          # UIアイコン(SVG)
   └── images/         # 記事などで使う画像
   ├── components/         # 共通の部品
   ├── content/
   ├── pages/
   └── about.md    # 固定ページ
   └── posts/          # ブログ記事はここ
   ├── i18n/               # UI文言(多言語)
   ├── layouts/            # ページの骨組み
   ├── pages/              # URLに対応するページ
   ├── scripts/            # ブラウザで動くスクリプト
   ├── styles/             # CSS
   ├── types/              # 型定義
   ├── utils/              # 補助的な処理
   ├── config.ts           # 設定の既定値を適用する
   └── content.config.ts   # コンテンツの定義とスキーマ
├── astro-paper.config.ts   # あなたが編集する設定
└── astro.config.ts         # Astro本体の設定

編集する頻度で3つに束ねると、全体像が掴めます。

AstroPaperのディレクトリを、よく触る4か所、たまに触る3か所、基本的に触らない5か所の3列に振り分けて示した図

よく触る場所

src/content/posts/

ブログ記事のMarkdownファイルを置くディレクトリです。日常的にもっとも触る場所です。

ファイルを追加するだけで記事が増え、サブディレクトリを作ればURLにもそれが反映されます。詳しくは第6章で扱います。

astro-paper.config.ts

サイト名、URL、著者名、1ページあたりの記事数、機能のON/OFF、SNSリンクなどをまとめた設定ファイルです。プロジェクトルート(一番上の階層)にあります。

利用者が編集するのはここだけで済むように、という方針で用意されたファイルです。次章で全項目を扱います。

src/content/pages/about.md

このサイトについて、のような固定ページの本文です。記事一覧には並ばず、専用のURLで表示されます。テンプレートには about.md が1つ入っています。

src/styles/theme.css

配色を決めるCSSファイルです。7つの色トークンを書き換えるだけで、サイト全体の見た目が変わります。第8章で詳しく扱います。

たまに触る場所

src/i18n/

画面に出る英語のUI文言(「Recent Posts」「Search」など)がまとまっています。

src/i18n/
├── index.ts        # ロケールに応じて文言を選ぶ
├── format.ts       # {{変数}} の差し替え
├── types.ts        # 文言の型定義
└── lang/
    └── en.ts       # 英語の文言

日本語化したい場合は lang/ja.ts を追加します。手順は第11章で説明します。

public/

ここに置いたファイルは、加工されずにそのままの名前で公開されますpublic/favicon.svg/favicon.svg としてアクセスできます。

ファイル役割
favicon.svgブラウザのタブに出るアイコン
default-og.jpgSNS共有時に使われる既定の画像
pagefind/ビルド時に生成される検索索引

pagefind/ は自動生成物なので、手で編集しないでください。

src/assets/

public/ と違い、こちらに置いた画像はAstroが最適化します。サイズ変更も形式変換も自動なので、記事で使う画像はこちらに置いてください。

2つのディレクトリの違いは、公開されるまでに加工が入るかどうか。それだけです。

左のpublicは置いたファイルが同じ名前でそのまま公開され、右のsrc/assetsはAstroが最適化してから公開されることを、URL・加工・向くものの3項目で比べた図

icons/ には IconRss.svgIconSearch.svg といったUIアイコンが入っています。これらはTabler Iconsのアイコンで、Astroのコンポーネントとして直接読み込めます。

---
import IconRss from "@/assets/icons/IconRss.svg";
---

<IconRss width={20} height={20} />

@/src/ を指す別名(エイリアス)です。深い階層から ../../../ と書かずに済むよう、tsconfig.json に設定してあります。

基本的に触らない場所

テーマの本体にあたる部分です。読むぶんには勉強になりますが、書き換えるとテーマの更新を取り込めなくなります。

src/pages/

URLとファイルが対応する、Astroの中心的なディレクトリです。

ファイル生成されるURL
index.astro/
about.astro/about/
search.astro/search/
404.astro存在しないURLへのアクセス時
posts/[...page].astro/posts//posts/2/
posts/[...slug]/index.astro/posts/記事のパス/
tags/index.astro/tags/
tags/[tag]/[...page].astro/tags/タグ名/
archives/index.astro/archives/
rss.xml.ts/rss.xml
robots.txt.ts/robots.txt
og.png.ts/og.png

角かっこ [...] は、ここが可変という意味です。[...slug] なら /posts/astro-paper/01-what-is-astro-paper/ のように複数階層をまとめて受け取れます。

なお src/pages/ の中でも、_ から始まるディレクトリ(_components/_utils/)はURLになりません。そのページ専用の部品を近くに置くための仕組みです。

名前の付け方は3通りあります。そのままURLになるもの、可変部分になるもの、URLにならないもの。

通常のファイル名はそのままURLになり、角かっこ付きの名前は可変部分になり、アンダースコアで始まるディレクトリはURLにならないという3つの規則を並べた図

src/layouts/

ファイル役割
Layout.astro全ページ共通の <html><head>。メタ情報、フォント、テーマ切り替えの初期化
PostLayout.astro記事詳細用。Layout.astro に記事向けのメタ情報を足したもの

src/components/

複数のページで使い回す部品です。

ファイル役割
Header.astro / Footer.astroヘッダーとフッター
Card.astro一覧に並ぶ記事1件分の表示
Datetime.astro日付の表示(タイムゾーン変換込み)
Pagination.astroページ送り
Tag.astroタグのラベル
Socials.astroSNSリンクの並び
Breadcrumb.astroパンくずリスト
Main.astro一覧系ページの見出しと本文枠
LinkButton.astroボタン風のリンク
ResponsiveTable.astro横幅の広い表を横スクロールさせる枠
GoogleAnalytics.astro計測タグの読み込み

src/utils/

テーマの動作を支える小さな関数群です。挙動の理由を追いたくなったら、ここを開きます。

ファイル役割
postFilter.ts下書き・予約公開を判定して記事を絞り込む
getSortedPosts.ts更新日時の新しい順に並べる
getPostPaths.tsファイルパスから公開URLを組み立てる
getUniqueTags.ts重複を除いたタグ一覧を作る
slugify.ts文字列をURL向けの表記へ変換する
withBase.ts公開時のパス接頭辞を付け外しする
resolveDefaultOgImagePath.ts既定のOG画像パスを決める
toTransitionName.ts画面遷移アニメーション用の名前を作る
getFontPathByWeight.tsOG画像生成に使うフォントを探す

src/config.tssrc/content.config.ts

紛らわしい名前ですが、役割は別物です。

前者は第4章、後者は第5章で扱います。

迷ったときの早見表

やりたいこと触る場所
記事を追加したいsrc/content/posts/
サイト名やURLを変えたいastro-paper.config.ts
配色を変えたいsrc/styles/theme.css
「このサイトについて」を書き換えたいsrc/content/pages/about.md
画面の英語表記を日本語にしたいsrc/i18n/lang/
ファビコンを差し替えたいpublic/favicon.svg
記事本文の文字サイズや余白を調整したいsrc/styles/typography.css
ヘッダーのメニューを変えたいsrc/components/Header.astro

上の6つを覚えておけば、テーマ本体へ踏み込まずに済みます。

記事の追加、サイト名の変更、配色の変更、UI文言の日本語化、ファビコンの差し替え、ヘッダーの変更という6つのやりたいことと、編集するファイルを対応させた図

要点

参考資料


シリーズ目次 前章: 02. AstroPaperのインストールと開発サーバーの起動 次章: 04. astro-paper.config.ts で設定する


Share this post:

Previous Post
04. astro-paper.config.ts で設定する
Next Post
02. AstroPaperのインストールと開発サーバーの起動