もう3.4なの!?
この前3.3になったと思ったら

二週間で3.4になったAstro。

Page Partialsが新たな機能だが、特に自分にはこの機能は関係なさそうではある。
画像コンポーネントのパフォーマンス改善は良いアップデート。
そんなわけで最大の問題だったMarkdown内の画像が最適化できない問題をプラグインを導入して解決し、カテゴリー部分の修正をした。
/src/assets/に画像を入れてMarkdownファイルから画像を参照すれば画像最適化はAstroが行うがMarkdownファイルがAstroに依存した相対ファイルパスを含んだものになるので将来の互換性を考えて避けたい。将来的にファイルの場所や機能の融通が効くようになれば公式のものを利用することにする。
Markdownファイルの画像最適化
Gatsbyにあったような画像最適化プラグインを作成している方がおられたのでこのプラグインを導入する。
Astro Remark Eleventy Imageの導入
Githubに書かれているようにインストールする。
非公式プラグインである旨などが表示され許可を求めてくるのでYを押していく。
インストール後に/astro.config.mjsに追記する。
//省略 integrations: , vite: ,デフォルト設定で良いなら以下のように書く。
//省略viteの記述についてGithubによると
Astroが利用しているバージョンのViteではeleventy-imgでエラーが発生するため、このパッケージを使用するにはこのスニペットをastro-configに含めます
とのこと(Google日本語翻訳)
カスタムマークアップ
customMarkupは独自のマークアップをしたいときに指定する。同ファイル内に記述する。
これでclassにu-photoがつけられたのでわざわざ<img>タグをMarkdownファイル内に書いてBridgy-Fedに合わせる必要はなくなった。
build時に画像が生成される
これでbuild時にMarkdownから参照されている画像が設定に合わせた画像最適化が行われ、最適化された画像が元画像と同じフォルダに出力されるようになる。
カテゴリーページの修正
ややこしい手順でカテゴリーページが生成されていたものを以下のように修正した。
---import BaseLayout from "@layouts/NoteLayout.astro";import { getCollection } from "astro:content";import NoteList from "@components/NoteList.astro";import Tags from "@components/Tags.astro";import type { CollectionEntry } from "astro:content";import { sortByDate } from "@utils/sortByDate";import Section from "@components/Section.astro";const collection_name = "note";const blogEntries = await getCollection(collection_name);const tags = [...new Set(blogEntries.map((post) => post.data.tags).flat())];const all_name = "すべてのNote";interface NAMES_OF_CATEGORY { [key: string]: CollectionEntry[];}const namesOfCategory: NAMES_OF_CATEGORY = {};const category = [ ...new Set(blogEntries.map((post) => post.data.category).flat()),];category.sort();category.push(all_name);// undefined要素の除去const category_list = category.filter( (category): category is Exclude => category !== undefined);category_list.map(async (cats) => { namesOfCategory[cats] = await getCollection(collection_name, ({ data }) => { return data.category?.includes(cats) === true; }); namesOfCategory[cats]?.sort(sortByDate);});/* 2023-01-28 *//* なぜか一度はここで配列を読み込まないと上記で読み込んだものが反映されない awaitのせい? */namesOfCategory[all_name] = (await getCollection(collection_name)).sort( sortByDate);--- カテゴリー別NOTE { ( <> {category_list.map((cats) => { return ( <> {cats} {namesOfCategory[cats]?.map((posts) => { return ( ); })} </> ); })} </> ) } ここは今もよくわからない。(追記:解決した)
---/* 2023-01-28 *//* なぜか一度はここで配列を読み込まないと上記で読み込んだものが反映されない awaitのせい? */namesOfCategory[all_name] = (await getCollection(collection_name)).sort( sortByDate);最後に
Astroのバージョンアップの速さは異常。
