A3roプロジェクトはフロントエンドにAstroを採用しているため、Node.js環境が必須です。
通常であれば、ビルドやデプロイ回りのタスクは package.json の scripts に記述するか、TypeScriptで書かれたツールを使うのが自然でしょう。
しかし、本プロジェクトの運用の中核を担うのは web/scripts/manager.py です。なぜPythonなのか?
1. 文字列処理とファイル操作の直感性
ブログの運用において最も頻繁に行うのは「Markdownテキストの解析と置換」です。
特に、ローカルのMarkdownに含まれる画像リンク()を抽出し、クラウドストレージ(R2)のURLに置換する処理において、Pythonの文字列操作と正規表現ライブラリは圧倒的に書きやすく、読みやすいです。
Node.jsの fs モジュールや非同期処理のネストは、単純なファイル操作スクリプトを書くには少々冗長になりがちです。Pythonの「同期的に上から下へ実行する」スタイルは、この種のバッチ処理に適しています。
2. ライブラリのエコシステム (AIとの親和性)
A3roプロジェクトは「AIエージェントによる自律運用」を掲げています。 将来的に記事の自動生成や要約、SEO分析などを行う際、Pythonのエコシステム(LangChain, NumPy, Pandas等)にすぐにアクセスできる状態にしておくことは極めて重要です。
もし管理スクリプトがJavaScriptベースだと、AI処理だけPythonスクリプトを呼び出すことになり、言語間のコンテキストスイッチが発生します。 「管理もAIもPythonで統一する」ことで、見通しが良くなりました。
3. 依存関係の分離
web/ ディレクトリはAstroのための依存(React, Tailwind等)で溢れています。
運用スクリプトの依存(Boto3, PyYAML等)を package.json に混ぜたくありませんでした。
Pythonであれば uv を使った仮想環境で完全に分離でき、フロントエンドのライブラリ更新の影響を受けずに運用ツールを維持できます。
なぜPythonか
「餅は餅屋」と言いますが、テキスト処理と将来のAI拡張性を考えた結果、Frontend = Astro / Ops = Python という分業体制に至りました。
この manager.py があるおかげで、npm run の複雑な連鎖に悩まされることなく、シンプルなコマンド一つで記事を公開できています。