AIエージェントとの会話ログをQiita記事にして投稿・公開するまでを自動化した。Claude Codeのカスタムコマンド2本とMCPで実現している。
この記事はAIエージェント(Claude Code)が会話ログをもとに生成し、人間が確認・編集したものです。
背景
自宅サーバーをProxmoxで運用しながら、色々なことをAIエージェント(Claude Code)に任せている。
ある日気づいた。「AIエージェントと話した内容って、そのまま技術記事になるんじゃないか?」
調査の過程、ハマったこと、判断の経緯——これが会話ログにそのまま残っている。手で書き直すのは面倒だが、仕組みを作れば会話の副産物として記事が生まれる。
参考にした構成
先に同じようなことをやっている記事を調べた。Claude Code × ObsidianでQiita記事を自動化している例があり、フローはこうなっていた:
- Slackのメッセージ or Obsidianのメモをネタ元にする
- インタビュー形式で体験を引き出す
- SubAgentで役割分担
- Qiita APIで直接投稿
自分のケースではネタ元が「AIエージェントとの会話そのもの」なので、構造は同じで入力元が違うだけ。
設計(シンプルにした)
参考記事に倣ってSubAgentで役割分担する構成を考えかけたが、やめた。
線形のフローで記事1本生成するだけなら、コマンド1本で十分。SubAgentが活きるのは並列処理や明確な役割分担が必要なときで、このケースには過剰だった。
「後で必要になったら分割する」で十分。最初から複雑にする必要はなかった。
作ったもの
コマンドは2本。
/article-draft — 会話から記事を生成してプライベート投稿
~/.claude/commands/article-draft.md
動作:
- 引数なし → 会話からテーマ候補を提示、選んだテーマで生成
- 引数あり → そのテーマで即生成
- 生成した記事を
~/articles/YYYY-MM-DD-{slug}.mdに保存 - Qiita MCPでプライベート投稿(
private: true) - Todo MCPで確認タスクを自動作成(タスクの詳細に記事URLを含める)
記事を書いたらそのままプライベート投稿まで一気に流れる。
/article-publish — 確認済み記事を公開
~/.claude/commands/article-publish.md
動作:
- ユーザーから確認OKの連絡が来る
- Qiita MCPで対象記事を
private: falseに更新 - Todo MCPで紐づく確認タスクを完了に変更
全体のフロー
/article-draft 実行
↓
ドラフト生成 → mdファイル保存
↓
Qiita MCP: プライベート投稿
↓
Todo MCP: 「記事確認: {タイトル}」タスク作成(URLつき)
↓
ブラウザで確認(実際のQiitaのレンダリングで確認できる)
↓
確認OKを伝える
↓
Qiita MCP: public に変更
Todo MCP: タスクを完了に変更
確認ステップにプライベート投稿を使うのがポイント。以前はmdファイルを cat で確認するしかなかったが、実際のQiitaのレンダリングで確認できるようになった。
ハマったこと・気づき
記事の話題が散らかる
最初は引数なしで会話全体を渡した。サーバー運用・記事フロー・フックの話が混在した記事が生成された。
対処:生成前にテーマ候補を提示して選んでもらうステップを追加した。
AIっぽい文体になる
「〇〇できました!」「便利でした」系の表現が出る。コマンドに文体ルールを明示した:
- 結論から書く
- 感情表現は最小限
- 一文で言えることを段落にしない
- 「はじめに」「おわりに」の定型フォーマットは使わない
個人の文体を出すには自分が書いた文章のサンプルを渡す必要がある。これは今後の課題。
mdファイルの扱いを整理した
最初は投稿済みファイルを published/ に移動する設計にしていた。が、プライベート投稿した時点で即 published/ に入るので「未投稿」状態がほぼ存在しない。フォルダ分けの意味がないため、articles/ に置きっぱなしにした。
SessionEndフックからスキルは呼べない
別件で、セッション終了時に自動で日記を書かせるhookを設定していたが、動いていなかった。
"SessionEnd": [{ "hooks": [{ "type": "command", "command": "echo '/diary'" }] }]
echo '/diary' は文字列を出力するだけ。Claude Codeのhookはシェルコマンドしか実行できないため、内部スキルを呼ぶことはできない。
現状
/article-draft 実行だけで、記事生成・プライベート投稿・確認タスク作成まで自動で流れる。確認後に「公開して」と言えば残りも完結する。curlやAPIトークン管理は不要で、MCP経由で完結している。
あわせてAIエージェント自身が記事ネタを見つけたら提案してくるルールも設定した。会話の副産物として記事が生まれる仕組みになっている。