ブログをGatsbyからAstroへ移行した話
約3年ぶりにブログを再開するにあたり、フレームワークの移行を行いました。
Gatsbyの技術的負債を解消
まず、Gatsbyのコントリビューターの皆様には感謝しています。
もともとWordPressで運用していた当ブログは、レンタルサーバー代が負担になっていました。そこで、約5年前にGatsbyへの移行を決断。Cloudflare Pagesにデプロイすることで、運用コストをドメイン代だけに抑えられたのは非常に助かりました。
このブログの遷移は以下の通りです。
WordPress
↓ 運用コストを改善
Gatsby
↓ 技術的負債を改善
Astro
Gatsbyを負債に感じた理由
- フレームワークの更新頻度が低下
- v5.14(2024年11月、現最新版)
- v5.13(2023年12月)
- 依存関係に脆弱性があった(当時の記憶)
- SPAである必要性がない
更新頻度の低下
Gatsbyは2023年2月にNetlifyに買収されました。私の推測ですが、買収後1年以内にコアメンテナーがほぼ離れてしまったのではないかと思います。Vercel+Next.jsのようにNetlify+Gatsbyが強力な対抗になることを期待していましたが、残念です。
また、現在のスターターキットではエラーが出て動かないこともあるようです。
依存関係の脆弱性
私の記憶が正しければ、2023年2月の買収前のバージョンですでにいくつかの脆弱性が依存関係に含まれていました。(もしかするとテーマ由来かもしれません)
ブログ程度ならクリティカルな脆弱性以外は大きな問題ではありませんが、利用者としては気持ちの良いものではありません。
SPAである必要性がない
以前、別のツールサイトもGatsbyで作成していましたが、低速回線では内部リンクのクリックがすぐに反応しないことがありました。調査したところ、初期ページはHTMLで高速表示されますが、別ページはJavaScriptで配信されるため、ロード中は遷移できませんでした。この問題から、ツールサイトをSPAベースのGatsbyからMPAベースのAstroへ移行しました。
また、個人ブログのようなサイトでは多くのユーザーが1ページだけ閲覧して離脱します。わざわざ全ページ分のJavaScriptをバンドルして配信する必要はないのでは?と考えました。
レイアウトを再デザイン
以前のレイアウト
- Gatsbyコミュニティのテーマ
新しいレイアウト
デザインについて、完全には満足していません。(何かが違う気がします)
技術的なデザイン変更について
技術面では、投稿一覧・カテゴリ・タグを一気に削除しました。
主な理由は
- /postsか/post、/tagsか/tagで迷ったため
- サイトマップ汚染の軽減
- カテゴリ・タグ管理の手間削減
特に「s」を付けるかどうかで悩みました。一般的には「s」付きが通例ですが、個人的に違和感がありました。そこで「いっそ/postsや/tags自体を無くしてしまえば?」と考えました。
投稿一覧・カテゴリ・タグを削除することで、サイトマップ汚染の軽減や管理コスト削減など、個人運用にはメリットが多いと感じています。代わりにサイト内検索を用意すれば、巡回したい人の入口にもなります。
CMSの利用(検討段階)
次の条件を満たすため、APIベースではなくGitベースのCMSを検討しました。
- バックアップが容易
- ベンダーロックイン回避
- ローカル編集が可能
GitベースCMSの候補
tinaCMS(不採用)
最初はtinaCMS+Astroのスターターキットで始めましたが、以下の理由で不採用になりました。
- スターターキット+MathJaxで数式記述不可
- 解決方法を探すのが面倒だった
- ベンダーロックインの懸念
- 認証がTinaCloudに依存
- 自前実装も可能だが、すぐに見つけられなかった
- スターターキットだとtinaCMSの依存度が高い
- astro単体でdev・buildしづらそうだった
- 認証がTinaCloudに依存
- 依存関係にcritical区分の脆弱性が残る
依存関係の脆弱性は技術的負債になるため、回避することにしました。
Contentrain(不採用)
お手軽さは魅力的ですが、運営状況に不安があります。
- コミュニティがほぼ停止
- サービス終了時はエディタが使えなくなる
- プロジェクトファイルへの汚染度は低い
- ローカル編集は問題なく可能
- プロジェクトファイルへの汚染度は低い
現在、Discordで質問中。反応がなければ不採用予定です。
→ 2週間反応がないため、不採用になりました。
Decap CMS(検討)
基本的には、疎結合なtinaCMSだと思います。まだ未検証ですが、自前認証の例もあります。
CMSなんてなかった(現状)
現在はVSCodeでローカル編集しています。特に困っていることはなく、むしろGithub Copilot Chatが使えて便利です。
「どうしてもCMSが必要」「スマホで編集したい」などがなければ、このままVSCodeで編集でも十分だと感じています。