
理想の執筆環境を求めて
前回の記事で述べた通り、私はBloggerのブラックボックス性に疲れ果て、Astroへの移行を決意しました。 しかし、単にプラットフォームを変えるだけでは面白くありません。どうせなら、「世界で一番快適な執筆環境」を自分で作ることにしました。
目指したワークフロー
私が定義した要件は以下の通りです。
- Project-First: 記事は「ブログのために書く」のではなく、「プロジェクトの活動記録」として自然に発生するものであるべき。
- Markdown Only: 執筆はVS Codeで完結させたい。ブラウザのエディタは使いたくない。
- Local Assets: 画像は記事と同じフォルダに置きたい。面倒なアップロード作業はしたくない。
- 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の解析: 記事内の画像リンク(
)を検出。 - 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エージェントの実験記録を発信していきます。