このブログ(Nekodesk)は、手で作業する部分をできるだけ減らして、AI に頼みながら運営する前提で作りました。 どういう構成にしたか、何を入れなかったかを書いておきます。

先に決めたこと

  • 記事とメモは、Git の Markdown ファイルだけで管理する
  • 公開は「下書き → 自分が承認 → マージ → 自動デプロイ」の順
  • 管理画面は作らない。作業は AI にチャットで頼む
  • AI の API は、サイトの中では使わない

構成

役割 使ったもの
サイト Astro(静的に書き出す)と Tailwind CSS
配信 Cloudflare(Workers の静的アセット)
自動化 GitHub Actions
開発環境 Node.js の最新 LTS、パッケージ管理は bun、バージョン固定は mise

ビルドして HTML にしたものを置くだけなので、 データベースもサーバーのプログラムもありません。 壊れるところが少なくて、費用も小さく済みます。

最初は Next.js も考えました。 ただ、AI に頼んで運用するなら、動的な機能は要らないな、と思って Astro にしました。

記事の置き方

記事は、1 本ごとにフォルダを作って、本文の index.md と画像を一緒に入れてます。

content/
  notes/      ネタ帳(公開しない)
  drafts/     執筆中
  articles/   公開済み
  products/   紹介する商品の情報

ネタは notes/ から始まって、drafts/、articles/ と進みます。 公開は、フォルダを articles/ に移すだけです。

公開の流れ

  1. AI が下書きを作って、drafts/ に置く
  2. 自分で読んで、直して、OK を出す
  3. dev ブランチで、確認用のサイト(dev.nekodesk.net)を見る
  4. main にマージすると、GitHub Actions が本番にデプロイする

OK を出す前に公開されることはありません。

ちょっと工夫したところ

画像の個人情報

スマホの写真には、撮った場所(GPS)などの情報が入ってます。 そのまま載せると、場所が分かってしまいます。

なので、画像は専用のコマンドを通してから使います。 向きを直して、サイズをそろえて、メタデータを消すやつです。 Astro が出す WebP にも GPS が残らないか、GPS 付きの試験画像で確認しました。 残ってませんでした。 元の写真には情報が残ってるので、元の写真はリポジトリに入れてません。

広告の表記

記事に商品の紹介を入れると、記事の頭に「PR」の表示が自動で出ます。 アフィリエイトのリンクには、rel="sponsored nofollow noopener" も自動で付きます。 書き忘れで表記が漏れる、というのが怖かったので、人が気をつけなくていい形にしました。

入れなかったもの

  • データベース: 記事は Git で足りるので、いまは要りません
  • 管理画面: 作業はチャットで済むので、作ってません
  • AI の API: サイトの中では使いません。AI にやってもらうのは、作業のときだけです
  • コメント欄: いまは入れてません。必要になったら考えます

必要になったら、理由を書いて足すつもりです。