🎄

Qiitaアドベントカレンダー3年連続完走から記事作成を支えたAI運用システム設計を考えた

に公開

この記事の要点

  • Qiita アドベントカレンダー参加は 4 年連続、完走は 3 年連続(2025 年分は執筆時点では公式には未確定だが、自分の認識では完走済み)、累計およそ 100 記事
  • 今年は「完走」だけでなく「品質維持」が課題だった
  • ポリレポ(リポジトリをまたいだ)AI 運用システムで解決
  • 完璧ではないが、来年への土台ができた

4 年連続参加、でも今年は違った

2025 年も Qiita アドベントカレンダーに参加し、記事自体はすでに書き終えた。執筆時点では公式には完走扱いではないが、自分の認識では完走済みのつもりだ。残りの日も 25 日まで楽しんでほしい。参加は 4 年連続で、累計およそ 100 記事になる。

ただ、今年は例年と違った。「完走できるかどうか」ではなく、「品質を維持しながら完走できるか」が課題だった。

結論から言うと、AI 運用システムがなければ品質維持は難しかったと思う。この記事では、そのシステムの構成と、実際にどう活用したかを書く。

例年の完走パターンと今年の課題

これまでの完走方法

正直に書くと、これまでの完走はこんな感じだった。

  • ネタは思いつきでメモ帳に書き出す
  • 書き味やトーンは記事ごとにバラバラ
  • 後半は気合いで乗り切る
  • センシティブ情報のチェックは目視

完走はできていたが、振り返ると品質にムラがあった。

今年の課題

2025 年は、もう少しちゃんとやりたかった。具体的には以下の課題があった。

課題 詳細
ネタ管理 25 記事分のネタを体系的に管理したい
書き味の統一 記事ごとにトーンがバラバラになるのを防ぎたい
センシティブチェック 企業名や実名が混入しないよう自動チェックしたい
進捗可視化 今どこまで終わっているか一目でわかるようにしたい

これらを「気合い」ではなく「仕組み」で解決したかった。

解決策:3 リポジトリの AI 運用システム

システム全体像

構築したシステムは、3 つの Git リポジトリで構成されている。以下の図は、各リポジトリの役割と連携を示している。

それぞれの役割を説明する。

AI 設定リポジトリ - AI の制御中枢

Claude Code(AI ツール)への指示書を管理するリポジトリ。

このリポジトリの特徴は「モードシステム」で、ユーザーのキーワードから自動的に作業モードを判定する。以下の図は、記事作成時のモード起動から執筆までの流れを示している。

アドベントカレンダーで特に使ったのは以下のモード。

モード 用途
記事作成モード 構成提案、シード選択、執筆
記事レビューモード センシティブチェック、書き味チェック
日報作成モード 1 日の作業を日報にまとめる

また、gh 拡張コマンドで操作を効率化している。

: gh quick-pushgh pr-ja はカスタムコマンド(gh 拡張)です。詳細は GitHub CLI Extensions を参照。

# 3コマンド → 1コマンド
gh quick-push "記事追加: Day 5"

# PR作成も1コマンド
gh pr-ja --title "記事追加"

共通ナレッジリポジトリ - 共通ナレッジベース

複数の AI(Claude Code、ChatGPT、Gemini 等)で共通して使うナレッジを管理するリポジトリ。

パス定義ファイル(YAML 形式)でパス情報を一元管理している。

# パス定義ファイルの例
記事化判断フレームワーク: {PATH:article_decision_framework}
Zennワークフロー: {PATH:zenn_workflow}

これにより、AI が「記事を書くときはどのルールを参照すればいい?」と迷わなくなる。

ルール自動同期の仕組みも便利で、ルールファイルを更新すると全 AI 環境に自動反映される。以下の図は、GitHub Actions を使ったルール同期の仕組みを示している。

ログリポジトリ - ログと自動化

セッションログと日報を管理するリポジトリ。26 個の GitHub Actions で自動化している。

特に便利だったのは以下。

ワークフロー 機能
ナレッジ抽出 日報の「学んだこと」から Issue 自動生成
日報チェック ユーザー所感の必須チェック
クリーンアップ マージ後にセッションログ自動削除

日報を書くと、そこから「記事化候補」の Issue が自動生成される。アドベントカレンダーのネタ出しにも活用できた。

実際のワークフロー

Day 1〜4: 事前準備フェーズ

11 月中に以下を準備した。

  1. 記事管理用 JSON ファイルで 25 記事分のネタをリスト化
{
  "year": 2025,
  "day": 5,
  "title": "非エンジニア系研修でエンジニア系講義を教えるコツと目標",
  "status": "draft",
  "seed": {
    "opening": "きっかけ",
    "structure": "やった→困った",
    "tone": "手探り感"
  }
}
  1. 過去記事ディレクトリに過去記事を配置してトーン参照できるように

  2. シードテーブルで書き味のバリエーションを定義

要素 選択肢
書き出し 雑談 / 本題直行 / データ / きっかけ
構成 時系列 / Q&A / 比較 / 問題解決
トーン 軽め / 真面目 / 淡々 / 熱量高め

Day 5〜24: 執筆フェーズ

毎日の執筆フローはこうなった。以下の図は、記事作成から投稿までの一連の流れを示している。

特にセンシティブチェックが役立った。研修講師という仕事柄、企業名や受講生の話が混入しやすい。AI がレビューモードで自動チェックしてくれるのは安心感があった。

Day 25: 振り返りフェーズ

12 月 25 日。最終日の記事を書きながら、日報を作成した。

すると、日報から「記事化候補」の Issue が自動生成された。その中に「アドベントカレンダー完走の振り返り」があり、今あなたが読んでいるこの記事につながっている。

Before / After

システム導入前後の比較をまとめる。

観点 Before(導入前) After(導入後)
ネタ管理 メモ帳に箇条書き 記事管理 JSON + Issue 自動生成
書き味 記事ごとにバラバラ シードテーブルで意図的に変化
品質チェック 目視のみ センシティブチェック自動化
進捗管理 頭の中 日報 + Issue + GitHub Projects
トーン統一 なし 過去記事ディレクトリで参照

「気合いで完走」から「仕組みで完走」に変わった。

来年への課題

完璧ではない。来年に向けて以下を改善したい。

  • 予約投稿の活用: 今年は毎日手動投稿だった。Qiita の予約投稿機能を使えばもっと楽になる
  • ChatGPT/Gemini 連携の強化: 現状は Claude Code 中心。他の AI との連携をもう少しスムーズにしたい
  • CI/CD のさらなる自動化: 投稿から Qiita へのデプロイまで自動化できないか検討中
  • シードテーブルの改善: 25 記事書いてみて、パターンが増えすぎた感がある。整理が必要

気合いから仕組みへ

「完走」だけなら気合いでできる。参加は 4 年連続で、完走は 3 年連続だと自分では見ているからわかる。

でも「品質を維持しながら完走」するには仕組みが必要だった。

3 リポジトリの AI 運用システムは、今年のアドベントカレンダー完走までの走りを支えてくれた。来年はこの土台の上に、さらに改善を重ねていきたい。


参考

Discussion