Automated Workflow

理想の執筆環境を求めて

前回の記事で述べた通り、私はBloggerのブラックボックス性に疲れ果て、Astroへの移行を決意しました。 しかし、単にプラットフォームを変えるだけでは面白くありません。どうせなら、「世界で一番快適な執筆環境」を自分で作ることにしました。

目指したワークフロー

私が定義した要件は以下の通りです。

  1. Project-First: 記事は「ブログのために書く」のではなく、「プロジェクトの活動記録」として自然に発生するものであるべき。
  2. Markdown Only: 執筆はVS Codeで完結させたい。ブラウザのエディタは使いたくない。
  3. Local Assets: 画像は記事と同じフォルダに置きたい。面倒なアップロード作業はしたくない。
  4. One Command: 書き終わったら、コマンド一つで世界に公開したい。

システムアーキテクチャ

これを実現するために構築したシステムの全体像がこちらです。

1. ディレクトリ構造

「プロジェクトの中に記事がある」という構造を採用しました。

projects/
 └─ 2026-01-web-migration/      <-- プロジェクトルート
     ├─ 00-why-i-left/          <-- 1本目の記事
     │   ├─ index.md
     │   └─ hero.png
     └─ 01-workflow/            <-- この記事
         ├─ index.md
         └─ diagram.png

2. 独自CMSスクリプト (manager.py)

システムの核となるのは、Pythonで書かれた約150行のスクリプトです。 このスクリプトは、以下の仕事を一瞬でこなします。

  • Markdownの解析: 記事内の画像リンク(![alt](./img.png))を検出。
  • Lintと自動修正: 外部リンクの死活監視、AI特有の冗長な接続詞の検出などを行い品質を担保。(詳しくはPythonで作る最強のブログ記事Linterで解説しています)
  • R2へのアップロード: 画像をCloudflare R2に自動転送し、公開URLを取得。
  • リンクの置換: Markdown内のパスをR2のURLに書き換え。
  • ガベージコレクション: 記事で使われていない古い画像をR2から自動削除。
  • Astroへの配置: 完成したMarkdownをAstroの src/content/blog/ に出力。

3. Astro + Cloudflare Pages

生成されたMarkdownは、Astroによって静的HTMLにビルドされます。 Zero JSの高速なHTMLは、wrangler コマンドによってCloudflareのエッジネットワークにデプロイされます。

# たったこれだけ(Lintチェック → 画像アップロード → 記事生成まで全自動)
python web/scripts/manager.py publish projects/.../index.md --slug my-post

pnpm build
npx wrangler pages deploy dist

執筆体験の革命

このシステムのおかげで、私の執筆フローは劇的に変わりました。

Before (Blogger Era): Blogger時代も、実はPythonスクリプトによる自動投稿システムを構築していました。 画像も自動でR2に飛び、Indexing APIにも自動通知していました。 しかし、プラットフォーム自体の壁は超えられませんでした。 どんなに完璧なHTMLを送信しても、Blogger側で勝手に付与されるパラメータやリダイレクト挙動によって、GSCのエラーは消えず、私の努力はブラックボックスの中に吸い込まれていきました。

After (Astro Era): 今回の移行は、「自動化機能の完全移植」と「プラットフォームの透明化」の両立です。 Blogger時代に培った「プロジェクトファースト」の執筆思想はそのままに、出力先をコントロール可能な静的サイト(Astro)に変えることで、真の自由を手に入れました。

技術的な挑戦は「どう自動化するか」ではなく、「既存の高度な自動化フローを、いかにモダンなスタックに適合させるか」でした。 結果として、以前と変わらない快適な執筆体験のまま、爆速でクリーンなサイトを手に入れることができました。

A3roは、この最強の環境を使って、さらなるAIエージェントの実験記録を発信していきます。