Mar 17, 2024
Updated Apr 25, 2024
Astroブログ作成:記事の表示まで
全体像と目標
今回の記事では、Astroでブログを作成する全体像と、記事が表示できるまでの手順を説明します。NuxtやGatsbyの経験があれば、比較的スムーズに移行できる内容になっています。
目標は、以下の機能を備えたブログの構築です。
今回は、基本的な記事の表示ができるところまでを説明します。
フォルダの構成
Astroブログのフォルダ構成は以下の通りです。ヒーロー画像がpublicに位置しているのは、OGPにも利用していたので、外部からも簡単に読めるようにしています。また画像サイズも1200x630に統一しています。記事内で利用している画像は、content/imagesの中に保存しています。
記事の登録
Gatsbyで利用していたMarkdownファイルを流用し、拡張子をmdからmdxに変更して登録します。また記事のメタデータは、フロントマターに記述します。このフロントマターに合わせてconfig.tsに定義します。
今後説明予定のNotion側でPublishedDateとしていたため、rss.xml.jsのpubDateをpubDate=post.data.publishedDateと変更しました。
記事の表示
記事の表示は、以下のファイルで実装されています。なお共通する関数はutility.tsに集約しています。
-
pages/blog/[slug].astro:記事の読み込みと記事表示
-
lib/utility.ts:記事の取得
-
layout/BlogPost.astro:記事ページレイアウト
-
layout/BaseLayout.astro:すべてのページのベースレイアウト
記事の読み込みと記事の表示
こちらが今回メインとなる[slug].astroになります。全ての記事のファイル名に合わせてページが作成されます。なお以下のコード例は、関連する記事の前後の記事データも取得しています。
記事の取得
こちらが実際にファィルからgetCollection(‘blog’)関数を使って記事を取得します。所得した記事の一覧は、日付でソートしています。
画面レイアウト
BlogPostコンポーネントは、記事ページのレイアウト、BaseLayoutコンポーネントは全体のヘッダー、フッターやサイドバーなどの全体に関わるレイアウトとなります。
これで一通りの記事の表示ができしまた。次回は記事の一覧や今回説明しなかった他のコンポーネントについて記載したいと思います。