サイトのアクセス解析を確認するたびに GA4 や Search Console の管理画面にログインするのが面倒で、データをローカルに蓄積してサイト改善に活用したくなりました。そこで Google Analytics Data API と Search Console API でデータを取得する Python スクリプトを作り、launchd で日次自動実行する形にしました。手動で実行しなくても日次でデータが溜まるので、必要なときに参照するだけで済みます。

全体の流れ

取得から保存までの流れは次のとおりです。

[launchd 日次実行]
      ↓
[uv run python -m src.main --days 5]
      ↓
[GA4 API] → data/ga4/YYYY-MM-DD.md
[Search Console API] → data/search-console/YYYY-MM-DD.md

当初は GitHub Actions の cron で定期実行する案も検討しました。ただ、credentials などの秘密情報を Actions の Secrets に置く必要があり、データの永続化にも Artifact や別リポジトリへの push が必要になります。ローカルで launchd を使えば、秘密情報はマシン内に留められ、data/ にそのまま蓄積できます。また、Markdown 形式にしたのは、Cursor などの AI が @data/ga4/xxx.md で参照してサイト改善の判断材料にしやすいためです。

取得スクリプト

GA4 は BetaAnalyticsDataClient.from_service_account_file、Search Console は googleapiclient.discovery.build でサービスアカウント認証。日別サマリー、ページ別 PV、参照元、デバイス(GA4)、クエリ別・ページ別の検索パフォーマンス(Search Console)を取得して Markdown を生成しています。

def fetch_one_day(target_date: date) -> None:
    date_str = target_date.strftime("%Y-%m-%d")
    ga4_md = fetch_ga4(date_str)
    save_ga4(date_str, ga4_md)
    sc_md = fetch_search_console(date_str)
    save_search_console(date_str, sc_md)

# --days N で前日から N 日分を遡って取得
parser.add_argument("--days", type=int, default=1, help="取得する日数")

Search Console は GA4 と異なり 2〜3 日遅れでデータが反映されるため、日次実行では --days 5 で毎日 5 日分を再取得する運用にしました。同じ日付は上書きされるので、遅れて反映された分も取り込めます。

定期実行(launchd)

plist の StartCalendarInterval で実行時刻(Hour, Minute)を指定。launchd では .env が読まれないため、plist の EnvironmentVariables で必要な環境変数を渡しています。

  <key>StartCalendarInterval</key>
  <dict>
    <key>Hour</key>
    <integer>9</integer>
    <key>Minute</key>
    <integer>0</integer>
  </dict>

登録用の install-launchd.sh で plist を生成し、~/Library/LaunchAgents/ に配置。対話で有効化を確認して launchctl load します。

# plist を生成して LaunchAgents に配置
sed -e "s|PROJECT_DIR|$PROJECT_DIR|g" plist.example > "$DEST"
mkdir -p "$PROJECT_DIR/logs"
read -p "今すぐ有効化しますか? [y/N] " -n 1 -r
if [[ $REPLY =~ ^[Yy]$ ]]; then
  launchctl load "$DEST"
  echo "有効化しました。指定した時刻に日次実行されます。"
fi

出力先は data/ga4/YYYY-MM-DD.mddata/search-console/YYYY-MM-DD.md。取得したデータを AI に参照させて、メタ情報の最適化や人気記事の把握に活用しています。