前回 は、個人ブログの hosting として Vercel を選んだ理由を整理しました。

この回では、何で記事を書くかを扱います。結論としては、React / Vue を主役にせず、Markdown 中心で書ける Astro を選びました。

ただし、最初から Astro の設計思想を深く理解して選んだわけではありません。個人ブログを続けるために、書きやすさ、差分の追いやすさ、AI 補助との相性を重視した結果です。

React / Vue は今回は主役にしなかった

今回の目的には大きかった

5〜6 年前に Rails、Vue、React を個人的に勉強で触っていた時期があります。ただ、当時はまだ自分の中でしっくり来ていないまま、別の領域に移ってしまいました。

なので、今あえて React / Vue で個人ブログを書く動機は、自分の中にはあまりありませんでした。また必要になれば向き合えばよくて、今回は記事を書くところまで早く持っていきたかったので、そのタイミングではない、という整理です。

ブログの主役はアプリケーション状態ではなく、記事本文です。そう考えると、最初からSPAやコンポーネント設計に重心を置くより、Markdownを中心に置ける構成の方が自然に見えました。

Astro は Markdown 中心で育てやすかった

AI 補助後の差分を追いやすい

じゃあ何で書くか、というところで Astro を選びました。

正直に言うと、Astro 固有の強みを最初から理解していて選んだわけではありません。「Vercel と相性が良さそうだし、Markdown 中心で書けるらしい」くらいの軽い入口でした。

実際のところ、このブログのコードは AI エージェントにかなり手伝ってもらっています。だから自分が毎日フレームワークの作法を書き込むというより、いざ直すときに読みやすいか、AI が出してきた差分を追いやすいかを重視しました。

  • Markdown 中心で記事を置ける
  • AI エージェントが出した HTML / CSS / TypeScript の差分を追いやすい
  • 必要になったときに、自分でも最小限の手直しがしやすい

このあたりは、AI に手伝ってもらいながら個人ブログを育てる用途とは相性がいい な、と今のところ感じています。余計な儀式が少ないのは、後からじわっと効きます。

記事とUIを近すぎる距離に置かない

個人ブログでは、記事本文とUIを完全に別物として扱うより、近いところに置いておきたい気持ちがあります。一方で、記事を書くたびにUI実装へ踏み込みすぎるのも避けたいです。

Astroのcontent collectionは、その距離感がちょうどよく感じました。記事はMarkdownとして置きつつ、一覧、タグ、シリーズ、読了時間のようなサイト側の機能はコンポーネントとして育てられます。

この「記事は記事として書けるが、サイト全体の仕組みもrepoで直せる」という距離感が、自前ブログには合っていました。

TypeScript は必要なところで使える距離感にする

書ける環境にしておく

TypeScript も入れていますが、こちらも気合いで全部に型を付けているわけではありません。

  • 書かなくても動く
  • 書きたいところでは書ける

くらいの距離感で運用しています。AI エージェントに補助してもらうときも型情報があると助かるので、書ける環境にしておくのがちょうどいい、という感覚です。

frontmatterの型が効く

記事が増えてくると、タイトル、公開日、route_slug、translation_key、series_id、読了時間の補正値など、frontmatterの項目も増えます。

ここで型やschemaがあると、単なるMarkdownの束ではなく、サイトとして扱える記事データになります。Astroのcontent collectionでfrontmatterを検証できるのは、自前ブログを育てるうえで地味に効いています。

今回の判断

軽く始めて育てる

ざっとまとめると、フレームワーク側の判断はこうでした。

  • React / Vue は今回は主役にしなかった
  • Astro はMarkdown中心で書けて、AI補助後の差分を追いやすかった
  • TypeScript は全部を重くするためではなく、必要なところで使える環境として入れた
  • frontmatter schemaやcontent collectionが、記事をサイトのデータとして扱うのに効いた

最初から完璧に作るというより、書き続けられる形にしておくのが自分には合っていました。まずはこの形で動かしながら、必要になったところをまた直していきます。