App Store Review Guidelines の変更を Gemini で要約
はじめに
Apple の App Store Review Guidelines は、アプリ審査の基準を定めた重要なドキュメントです。定期的に更新されるため、変更内容を追いかけることが開発者にとって欠かせません。
以前から GitHub Actions で Guidelines の変更を監視していましたが、差分(diff)をそのまま見るだけでした。HTML の差分は読みにくく、変更の影響を把握するのに時間がかかります。
そこで、Gemini API を使って差分を日本語で要約し、PR に自動的に追加する仕組みを作りました。
課題
従来の差分確認には以下の問題がありました。
- HTML の diff は読みにくい(タグや属性の変更が混在)
- 変更の影響範囲が一目で分からない
- 日本語訳が必要(公式は英語のみ)
- 重要度の判断に時間がかかる
毎週月曜日に自動実行される監視システムはありましたが、PR を見ても「どこが変わったのか」「自分のアプリに影響があるのか」をすぐに判断できませんでした。
解決策
Gemini API(gemini-2.5-pro)で差分を日本語要約することで、変更内容を素早く把握できるようになりました。
要約には以下の情報が含まれます。
- 変更サマリー(概要を 3-5 行で説明)
- 詳細な変更内容(追加・削除・変更)
- 影響評価(iOS/macOS アプリ開発者への影響)
- 対応が必要な項目
PR を開くだけで、変更の全体像が分かります。
システム概要
全体の流れ
毎週月曜日 9:00 (JST)
↓
GitHub Actions (self-hosted runner)
↓
curl で Guidelines HTML を取得
↓
前回からの差分を検出
↓
差分あり → Gemini API で要約生成
↓
PR 作成(要約を本文に含める)
GitHub Actions ワークフロー
実際のワークフローファイル全体を以下に示します。
name: Monitor App Store Guidelines
on:
schedule:
- cron: '0 0 * * 1' # 毎週月曜日 0:00 UTC (JST 9:00)
workflow_dispatch:
permissions:
contents: write
pull-requests: write
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GIT_AUTHOR_NAME: "github-actions[bot]"
GIT_AUTHOR_EMAIL: "41898282+github-actions[bot]@users.noreply.github.com"
GIT_COMMITTER_NAME: "github-actions[bot]"
GIT_COMMITTER_EMAIL: "41898282+github-actions[bot]@users.noreply.github.com"
jobs:
check-updates:
runs-on: self-hosted
steps:
- name: Checkout repository
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955
- name: Fetch latest guidelines
run: |
curl -s -A "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" \
--retry 3 \
--max-time 60 \
https://developer.apple.com/app-store/review/guidelines/ \
-o guidelines.html.new
sed -i '' 's/\?[0-9]\{10,\}//g' guidelines.html.new 2>/dev/null || sed -i 's/\?[0-9]\{10,\}//g' guidelines.html.new
- name: Check for differences
id: diff
run: |
if [ ! -f guidelines.html ]; then
mv guidelines.html.new guidelines.html
exit 0
fi
if diff -u guidelines.html guidelines.html.new > diff.txt; then
exit 0
fi
echo "has_diff=true" >> $GITHUB_OUTPUT
- name: Prepare diff content for Gemini
if: steps.diff.outputs.has_diff == 'true'
id: prepare_diff
run: |
DIFF_CONTENT=$(cat diff.txt)
DELIMITER="EOF_DIFF_$(date +%s)_$$"
{
echo "diff_content<<$DELIMITER"
echo "$DIFF_CONTENT"
echo "$DELIMITER"
} >> $GITHUB_OUTPUT
- name: Summarize changes with Gemini
if: steps.diff.outputs.has_diff == 'true'
id: gemini_summary
continue-on-error: true
uses: google-github-actions/run-gemini-cli@f7db4b6f82ad0c3725cf4c98bdd93af80e22b4dc # v0.1.14
with:
gemini_api_key: ${{ secrets.GEMINI_API_KEY }}
gemini_model: gemini-2.5-pro
prompt: |
あなたは Apple App Store Review Guidelines の変更を分析する専門家です。
以下は Apple App Store Review Guidelines の HTML 差分です。
この差分を分析し、以下の形式で日本語で要約してください。
他のテキストは一切含めず、以下の形式のみを出力してください:
## 変更サマリー
- 変更の概要を 3-5 行で説明してください
## 詳細な変更内容
### 追加された内容
- 追加された項目
### 削除された内容
- 削除された項目
### 変更された内容
- 変更された項目
## 影響評価
### iOS/macOS アプリ開発者への影響
- 具体的な影響
### 対応が必要な項目
- 対応が必要な項目、なければ「なし」と記載
差分内容:
```diff
${{ steps.prepare_diff.outputs.diff_content }}
```
- name: Save summary to file
if: steps.diff.outputs.has_diff == 'true'
env:
OUTCOME: ${{ steps.gemini_summary.outcome }}
run: |
if [ "$OUTCOME" == "success" ]; then
SUMMARY_TEXT="${{ steps.gemini_summary.outputs.summary }}"
if [ -n "$SUMMARY_TEXT" ]; then
CLEANED=$(printf '%s' "$SUMMARY_TEXT" | tr -d '\000-\010\013\014\016-\037')
printf '%s\n' "$CLEANED" > summary.md
else
echo "要約の生成に失敗しました(出力が空)。" > summary.md
fi
else
echo "要約の生成に失敗しました。" > summary.md
fi
- name: Create Pull Request
if: steps.diff.outputs.has_diff == 'true'
run: |
TIMESTAMP=${GITHUB_RUN_ID}
DATE_READABLE=$(date +%Y-%m-%d)
DATE_UTC=$(date -u +"%Y-%m-%d %H:%M:%S UTC")
BRANCH_NAME="guidelines-update-$TIMESTAMP"
git checkout -b "$BRANCH_NAME"
mv guidelines.html.new guidelines.html
git add guidelines.html
git commit -m "Update App Store Guidelines baseline"
git push origin "$BRANCH_NAME"
cat > pr_body.md <<EOF
## App Store Review Guidelines の変更を検知しました
$([ -f summary.md ] && [ -s summary.md ] && cat summary.md || echo "要約の生成に失敗しました。")
---
### 参照
- [App Store Review Guidelines](https://developer.apple.com/app-store/review/guidelines/)
- 検知日時: $DATE_UTC
EOF
gh pr create \
--title "App Store Guidelines Update - $DATE_READABLE" \
--body-file pr_body.md \
--base main \
--head "$BRANCH_NAME"
- name: Cleanup
if: always()
run: rm -f *.txt *.md *.new *.normalized
このワークフローは以下のステップで動作します。
- リポジトリをチェックアウト - 最新のベースライン HTML を取得
- Guidelines を取得 - curl でダウンロードし、クエリパラメータを正規化
- 差分を検出 - 初回実行時はベースライン作成、2 回目以降は差分チェック
- 差分を準備 - Gemini に渡すための形式に整形
- Gemini で要約生成 - gemini-2.5-pro で日本語要約を生成
- 要約を保存 - ファイルに保存(失敗時はエラーメッセージ)
- PR を作成 - ブランチ作成、ベースライン更新、PR 作成
- クリーンアップ - 一時ファイルを削除
使用技術
GitHub Actions で定期実行を管理しています。毎週月曜日 0:00 UTC(JST 9:00)に自動実行されます。手動実行も可能です。
curl で Apple の公式サイトから HTML を取得します。リトライとタイムアウト設定により、ネットワークエラーに対応しています。
diff コマンド でベースラインとの差分を検出します。
比較の前に、クエリパラメータを正規化します。HTML 内の URL に含まれるキャッシュバスティング用の数値(例:style.css?1699876543210)は、取得のたびに変わります。これを削除することで、実質的なコンテンツ変更のみを検出できます。
Gemini API で差分を日本語要約します。google-github-actions/run-gemini-cli@v0.1.14 を使用し、gemini-2.5-pro モデルで要約を生成しています。
gh CLI で Pull Request を自動作成します。要約を PR の本文に含めることで、変更内容を素早く確認できます。
実際の PR の例
以下は、実際に生成された PR の例です。

まとめ
Gemini API を使って App Store Review Guidelines の変更を日本語で要約することで、変更の把握が格段に楽になりました。
PR を開くだけで変更サマリー、詳細、影響評価、対応項目が一目で分かります。HTML の diff を読む必要がなくなり、重要な変更を見逃すリスクも減りました。
GitHub Actions と Gemini API の組み合わせは、定期的な情報収集の自動化に最適です。他の公式ドキュメントの監視にも応用できます。