結局Astroに戻ってきた
QwikをやめてAstronに戻ってきた。Astro最高!
Qwikは好きです。resumableという概念は俺達の魂を震えさせる。
アイランドアーキテクチャのつらみを感じてQwikに移ったわけだったが、
Astroに戻るにあたり
を参考にした
styling
生CSS。tailwindは好きだが、最近tailwindの運用の難しさを感じ始めている。
tailwindの利点としてはjsへの依存が少ない(静的解析はあるが、無くても動くしバンドルサイズも致命的なサイズになったりしない)こと、
jsへの依存の少なさは強力だ。新興フレームワークでも大体サポートされている(vanilla-extractやemotionはそうはいかない)。data-属性でスコーピングしてくれる。これで十分じゃないか?
colocationも嬉しい。私はラップトップでの作業が多いので画面を複数開かずに済むのは便利だ。とはいえコンポーネントのサイズを常識的な範囲に納めていれば、@applyでまとめればいいんだけど)なのもあり、
そして値に制限があることの利点が一番怪しい。フォントサイズやパディングは良いだろうが、
というわけでtailwindは剥がしてAstroのCSSだけで書いた。@layerを使ってreset、component、patchの3レイヤに分け、page内のスタイルはレイヤーなしとした。patchという謎のレイヤーはMDXだとinline codeもcode blockも同じcodeタグとして処理されるので、pre直下にあるcodeタグのcomponentレベルのスタイルを上書きするために導入した。
URL設計
URL構造は変えた。あまり変えるべきじゃないが、ちょっと今までのURL構造に不満があったので最後の更新のつもりで再設計。/blogから/postに名前を変更し、記事は全て西暦で分けることにした。ページネーションも導入し、/post/index.htmlを廃止して/post/page/1にリダイレクトさせた。paginateを使いたかったから。本当に便利です。
SEOまわり
@astrojs/sitemapとastro-seoを導入。astro-seoで提供し、set:htmlで導入。ArticleとBreadcrumbsしか出していないが、他に出せるものもない。
RSS
をしてrss.xml.tsにGETハンドラを書くだけ。
OpenGraph 画像
@vercel/ogを使って素朴な画像を生成。フォントはローカルに持っておくと重いので都度Google Fontsからダウンロードするヘルパスクリプトを書いた。
emoji
:v: remark-gemoji
数式
remark-math + rehype-katex。CSSとfontをいい感じにminifyしたいが……。
TODO
- Link card
- サイト内検索(pagefindを使いvanillaで頑張る予定)
- AstroのCSSと手でnodeを作ることの相性が微妙かも
- いい感じの脚注
- ページ内anchor
- code blockのタイトル対応
- dark-mode
- 表と図のfigureと参照。これは欲しい
- クライアント画面幅による画像出し分け