0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

スマホだけでAI自動投稿を復旧させた話【GitHub Actions×Claude】

0
Posted at

金曜9時、自動投稿がスキップされていた

今週の金曜朝、いつものように投稿が上がっているはずが、パイプラインのログを見ると以下の一行で処理が止まっていた。

notes/log.mdが前回投稿時から更新されていないため、投稿をスキップします

バグではない。notes/log.md の SHA256 ハッシュを前回投稿時と比較し、変化がなければ重複防止でスキップする、という自分で仕込んだ安全弁だった。ログを更新し忘れていた僕のミスだ。

問題はそのとき手元にPCがなく、スマホしかなかったこと。VSCodeも開けない。さてどうするか。

「生成」と「公開」を切り離す設計に変更した

その場で考えた解決策は、記事の 生成フェーズ公開フェーズ を完全に分離することだった。これまでは「Claudeに記事を作らせてそのままWordPressに投稿」という一本道だったが、途中にJSONファイルを挟むバッファを設ける構成に変える。

具体的にやったことは以下の4つ。

やったこと① ClaudeにJSONで下書きを生成させる

スマホのブラウザでClaude(Cowork)を開き、「記事本文をWordPressに投稿できるJSON形式で出力して」と指示。タイトル・本文HTML・カテゴリ・タグなどをまとめたJSONをそのままコピーし、GitHubのファイル編集画面から notes/draft_ai-proofreading-tools.json として保存した。

ポイントは、この時点では 投稿しない こと。下書きをリポジトリに置くだけにとどめる。

やったこと② main.pyに --from-file オプションを追加

次に、生成済みのJSONを読み込んで投稿できるよう main.py を改修した。

# 変更前: 毎回Claudeを呼び出して記事生成→投稿
python main.py

# 変更後: 生成済みJSONを指定して投稿のみ実行
python main.py --from-file notes/draft_ai-proofreading-tools.json --status draft

実装自体はシンプルで、引数に --from-file が渡されたらAPI呼び出しをスキップしてJSONをそのまま読み込む分岐を追加するだけだ。スマホのGitHub Web UIでも十分編集できる量の変更だった。

やったこと③ workflow_dispatchにinputを追加してGitHub UIから投稿トリガー

GitHub Actionsの workflow_dispatchfrom_file 入力を追加し、GitHubのサイト上から「Run workflow」ボタンを押すだけで任意のJSONを指定して投稿できるようにした。

on:
  workflow_dispatch:
    inputs:
      from_file:
        description: '投稿する下書きJSONのパス(例: notes/draft_xxx.json)'
        required: false
        default: ''

これで「スマホ→Claudeで下書き生成→GitHubにコミット→ActionsのRun workflowで投稿」という経路がすべてブラウザだけで完結した。

やったこと④ 投稿済みJSONを notes/posted/ に自動退避

同じファイルを誤って二重投稿しないよう、投稿完了後に該当JSONを notes/posted/ ディレクトリへ自動で移動する処理も追加した。単純なファイル移動だが、これがないと「前回投稿したのがどのJSONだったか」の管理が煩雑になる。

ハマったポイント:認証情報の持ち運び問題

スマホ運用で一番不安だったのが認証情報の扱いだ。Anthropic APIキー・WordPressのアプリケーションパスワード・LINE通知トークンなどを手元の端末に持たずに済むか?

結論、すべてGitHub Secretsに寄せてあるので問題なかった。ローカルの .env を参照しているのはローカル実行時だけで、Actions経由なら端末に鍵を持ち歩く必要が一切ない。この設計にしておいて本当によかった。

今回の構成まとめ

変更後のフローを整理すると、以下のようになる。

[通常ルート]
GitHub Actions(定期実行)→ Claude API で記事生成 → WordPress投稿

[緊急・手動ルート]
Claude(ブラウザ)で JSON 下書き生成
  → GitHub Web UI でコミット
  → Actions の workflow_dispatch で from_file 指定して投稿トリガー
  → 投稿完了後、JSONを notes/posted/ へ退避

次にやりたいこと:スキップ時の自動PR作成

今回は「スキップされたことに自分で気づいた」から手動で動けたが、理想は スキップが発生した時点でClaudeが自動で下書きJSONを生成してPRを立てる ところまで自動化することだ。

イメージとしては:

  1. 定期実行でスキップ判定が出る
  2. Actions内でClaude APIを呼び出し、下書きJSONを生成
  3. GitHub CLIでブランチを切り、JSONをコミットしてPRを作成
  4. 自分はPRをマージするだけ → 次のActionsが投稿実行

「完全放置」ではなく「承認だけ人間がする」形にすることで、誤投稿リスクを残しつつ手間を最小化できる。来週はここに着手したい。

まとめ

今週の収穫は、スマホだけで記事下書き〜投稿トリガーまで完結できる経路を作れたこと。PCがない状況でのトラブル対応が、結果的にシステム全体の柔軟性を高めることになった。

認証情報をGitHub Secretsに集約し、生成と公開を分離しておくだけで、端末を選ばない運用が可能になる。同じ構成でWordPress自動投稿を組んでいる人には参考になるはずなので、詰まっている箇所があればコメントで教えてほしい。

👉 関連商品をAmazonで探す(GitHub Actions)


元記事: スマホだけでAI自動投稿を復旧させた話【GitHub Actions×Claude】

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?