01どんな状況だったか
毎月、Webサイトのアクセス状況をまとめたレポートを作って配っていました。数値を集め、グラフにし、気づいたことを文章にする。手順は決まっていて、毎月同じことを人がやっていました。
02何が問題だったか
- 毎月まったく同じ手順を、人が同じようにくり返している。
- 数値を写す作業なので、いつか間違いが混ざる。
- 作業が月末に固まり、その週の他の仕事を押しのける。
- 一番時間をかけたい「今月は何が変わったか」に、時間が残らない。
03仕組み
文章を書く工程は自動化しているが、生成AIには書かせていない。数字のレポートは、同じ入力から必ず同じ文章が出ることのほうが重要になる。
図は横にスクロールできます →
04何をしたか
数値の取得を自動にした
GA4 と Search Console の API から、決まった数値を決まった形で取り出します。人が転記しないので、写し間違いが構造的に起きなくなります。
文章は、生成AIではなく決まったルールで組んだ
ここが一番の設計判断です。生成AIに書かせると、同じ数字を渡しても毎回ちがう言い方になり、正しいかどうかを確かめられません。前月比や伸びたページの説明は、条件で分岐する文章として実装しました。同じ月をもう一度流せば、必ず同じ文章が出ます。
差し替えを安全にした
新しい版は一時領域に作ってから入れ替えます。途中で落ちた月は前月版に戻すので、壊れたレポートが配信されることがありません。
出す前に、機械が2回検算する
中身の検証とレイアウトの検証を別々に走らせ、両方を通らないと出力に進みません。
人の工程を残した
最後に人が読んで直してから配信します。人が見ずに配信されることはありません。
05システム構成
②の「文章を組み立てる」だけが、この案件の設計判断の中心。ここを生成AIにすると、同じ数字から違う文章が出てしまい、正しいかどうかを確かめられなくなる。
図は横にスクロールできます →
Next.js(App Router)+ Recharts で紙面を描き、Chrome を起動して DevTools Protocol を直接叩いてPDF化しています。PDF生成のためだけに重いライブラリを足していません。毎月の起動は macOS の launchd で、成功すると `state/YYYY-MM.success` を置いて二重実行を防ぎます。
Next.js
Recharts
GA4 Data API
Google Search Console API
Chrome DevTools Protocol
launchd
06出来上がったもの
※ 掲載している数値・ページ名・検索語は、すべてこの説明のために作ったサンプルです
毎月このPDFが自動で出来上がる。表紙に主要な数値と推移、中面にページ別・検索別の内訳と所見が入る。
図は横にスクロールできます →
07どう変わったか
- 月末の作業が「作る」から「読んで直す」に変わった。
- 数値の転記ミスが起きなくなった。人が写す工程が無くなったので、起こりようがない。
- 毎月決まった日に出るようになった。人の予定に左右されない。
- 同じ月を流し直すと同じものが出る。だから「先月のあの数字は何だったか」を後から検算できる。
AIに文章を書かせなかったのは、できなかったからではありません。毎月配る数字のレポートで一番大事なのは、間違っていないことを確かめられることです。生成AIは、同じ入力でも出力が揺れます。揺れてよい場所と、揺れてはいけない場所を分けるのが設計だと考えています。
事例の一覧へ