GitHub Actions 自動化スイート:AI駆動のコミュニティ管理
上流リリースの監視、Claude APIによるコンテンツ生成、SNS投稿、ニュースレター配信、リポジトリ同期を実現する完全な自動化システムを構築。開発者コミュニティ向けの本番環境対応ワークフロー。
テンプレートについて: この記事では、claude-world-examples リポジトリで利用可能な本番環境対応の GitHub Actions ワークフローを紹介します。これらのワークフローは、Claude API を使用した AI 駆動コミュニティ自動化の実践的なパターンを示しています。
開発者コミュニティの管理には多くの反復作業が伴います:上流プロジェクトの更新監視、アナウンスの作成、SNS 投稿、ニュースレター配信、ドキュメントの同期。これらすべてを自動化できたらどうでしょうか?
このガイドでは、Claude API を使用したインテリジェントなコンテンツ生成により、これらのワークフローを自律的に処理する完全な GitHub Actions 自動化スイート を紹介します。
なぜ自動化が重要なのか
手動のコミュニティ管理:
- 複数のリポジトリのリリースを監視
- リリースサマリーを作成
- Discord、X、Threads に投稿
- ニュースレター更新を送信
- サブモジュールを更新
- 変更ログをレビュー
- トラッキング Issue を作成
= 毎週数時間の反復作業
自動化されたコミュニティ管理:
- ワークフローがスケジュール実行
- Claude API がコンテンツを生成
- マルチプラットフォーム投稿
- ニュースレター自動化
- サブモジュール自動同期
- 変更ログ自動生成
- Issue 自動作成
= 毎週数分のレビューのみ
重要な知見:AI 生成コンテンツ + スケジュールワークフロー = スケーラブルなコミュニティ管理
スイートのアーキテクチャ
この自動化スイートは、相互接続された6つのワークフローで構成されています:
+-----------------------------------------------------------------------+
| スケジュールトリガー |
+-----------------------------------------------------------------------+
| release-monitor blog-monitor sync-upstream |
| (毎時) (2時間ごと) (毎日) |
| | | | |
| v v v |
| +-------+ +-------+ +-------+ |
| |リリース| |コンテンツ| |サブモジ| |
| |検出 | |取得 | |ュール更新| |
| +---+---+ +---+---+ +---+---+ |
| | | | |
| v v v |
| +-------------------------------------------------------+ |
| | Claude API(コンテンツ生成) | |
| | - リリースサマリー - 記事分析 | |
| | - 機能ハイライト - ニュースレターコンテンツ | |
| | - SNS投稿 - 多言語出力 | |
| +-------------------------------------------------------+ |
| | | | |
| v v v |
| +-------+ +-------+ +-------+ |
| |Discord| |記事 | |Issue | |
| |通知 | |作成 | |作成 | |
| +-------+ +-------+ +-------+ |
| | |
| v |
| +-----------+ |
| |social-post|(手動トリガー) |
| +-----+-----+ |
| | |
| +-----+-----+ |
| v v |
| +-----+ +-------+ |
| | X | |Threads| |
| +-----+ +-------+ |
+-----------------------------------------------------------------------+
+-----------------------------------------------------------------------+
| CI/CD パイプライン |
+-----------------------------------------------------------------------+
| main への Push/PR |
| | |
| v |
| +------------------------------------------------------+ |
| | ci.yml | |
| | +----------+ +-------+ +------+ +---------+ | |
| | | 設定 | | ビルド | | lint | | テスト | | |
| | | 検証 | | | | | | | | |
| | +----------+ +-------+ +------+ +---------+ | |
| +------------------------------------------------------+ |
| | |
| v |
| 自動デプロイ(Cloudflare/Vercel/Netlify) |
+-----------------------------------------------------------------------+
ワークフロー 1: Release Monitor
Release Monitor は、上流リポジトリの新しいリリースを毎時チェックし、AI サマリーを生成して、コミュニティに通知します。
仕組み
- 取得: GitHub API で最新リリースをクエリ
- 比較: 前回確認したバージョンと比較
- 生成: Claude API で変更点をサマリー
- 通知: Discord に送信し、トラッキング Issue を作成
- 更新: 次回比較用に新バージョンを保存
主要な設定
name: Release Monitor
on:
schedule:
- cron: '0 * * * *' # 毎時実行
env:
REPO_TO_MONITOR: anthropics/claude-code
VERSION_FILE: .github/last-known-version.txt
CLAUDE_MODEL: claude-sonnet-4-20250514
Claude API 連携
ワークフローは Claude API を呼び出してリリースサマリーを生成します:
- name: Generate content with Claude API
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: |
PROMPT="You are a developer advocate. Summarize this release:
Version: $VERSION
Notes: $RELEASE_BODY
Return JSON only:
{\"summary\": \"One sentence summary\", \"features\": \"bullet list\"}"
RESPONSE=$(curl -s https://api.anthropic.com/v1/messages \
-H "Content-Type: application/json" \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-d "{
\"model\": \"$CLAUDE_MODEL\",
\"max_tokens\": 1000,
\"messages\": [{\"role\": \"user\", \"content\": $(echo "$PROMPT" | jq -Rs .)}]
}")
Discord 通知
バージョン情報、サマリー、機能ハイライトを含むリッチ埋め込み:
- name: Send Discord notification
run: |
curl -X POST "$DISCORD_WEBHOOK_URL" \
-H "Content-Type: application/json" \
-d "{
\"embeds\": [{
\"title\": \"New Release: $VERSION\",
\"description\": \"$SUMMARY\",
\"url\": \"$RELEASE_URL\",
\"color\": 5763719,
\"fields\": [
{\"name\": \"What's New\", \"value\": \"$FEATURES\"}
],
\"timestamp\": \"$(date -u +%Y-%m-%dT%H:%M:%SZ)\"
}]
}"
なぜこれが重要なのか
- リリースを見逃さない: 毎時チェックでタイムリーな通知を保証
- 一貫したメッセージ: AI がプロフェッショナルなサマリーを生成
- 手動作業の削減: リリースアナウンスの執筆が不要に
- 監査証跡: GitHub Issues ですべてのリリースを追跡
ワークフロー 2: Blog Monitor
ウェブサイトの新規コンテンツを監視し、Claude で記事を分析し、コンテンツ作成をトリガーできます。
課題
多くの開発者コミュニティは以下の最新情報を追いたいと考えています:
- 公式ブログ投稿
- 変更ログの更新
- ドキュメントの変更
- パートナーからのアナウンス
これらのソースを手動でチェックするのは時間がかかり、見落としも発生しがちです。
ソリューションアーキテクチャ
name: Blog Monitor
on:
schedule:
- cron: '0 */2 * * *' # 2時間ごと
env:
BLOG_URL: https://example.com/blog
TRACKING_FILE: .github/processed-articles.json
Claude によるコンテンツ分析
ワークフローは HTML を取得し、Claude に構造化データの抽出を依頼します:
const prompt = `
Analyze this HTML and extract:
- title
- date (YYYY-MM-DD)
- summary (2-3 sentences)
- key_topics (array)
HTML: ${articleHtml.substring(0, 10000)}
Return JSON only.
`;
const response = await callClaude(prompt);
const parsed = JSON.parse(response);
記事の自動作成
新規コンテンツが検出されると、ワークフローは:
- Claude でメタデータを抽出
- Markdown 下書きファイルを作成
- トラッキングファイルを更新
- 変更を自動コミット
- name: Generate articles
run: |
echo "$ARTICLES" | jq -c '.[]' | while read -r article; do
TITLE=$(echo "$article" | jq -r '.title')
SLUG=$(echo "$article" | jq -r '.slug')
cat > "content/articles/${SLUG}.md" << MARKDOWN
---
title: "${TITLE}"
description: "${SUMMARY}"
---
MARKDOWN
done
ワークフロー 3: Social Media Posting
X(Twitter)と Threads に、プラットフォームに最適化されたメッセージでコンテンツを投稿します。
マルチプラットフォームの課題
各プラットフォームには異なる特性があります:
- 文字数制限(X: 280、Threads: 500)
- トーンの期待値(X: 簡潔、Threads: 会話調)
- ハッシュタグの慣習
- オーディエンスの期待
AI 駆動の適応
Claude がプラットフォーム固有のバージョンを生成します:
const prompt = `
Generate social media posts for this content:
"${content}"
${langInstructions[lang]}
Return JSON only:
{
"x": "Tweet under 280 chars. Include relevant hashtags.",
"threads": "Threads post under 500 chars. More conversational tone."
}
`;
多言語サポート
ワークフローは複数の言語をサポートしています:
workflow_dispatch:
inputs:
language:
type: choice
options:
- en
- zh-tw
- ja
言語固有の指示により、文化的に適切なコンテンツを保証します:
const langInstructions = {
en: 'Write in English.',
'zh-tw': 'Use traditional Chinese.',
ja: 'Write in Japanese.'
};
ドライランモード
投稿前にテスト:
dry_run:
description: 'Dry run (no actual posting)'
type: boolean
default: false
これにより、テスト中の誤投稿を防ぎます。
ワークフロー 4: Newsletter Automation
多言語ニュースレターを自動生成・送信します。
トリガーオプション
on:
# 自動:新リリース時
release:
types: [published]
# 手動:定期ニュースレター用
workflow_dispatch:
inputs:
action:
type: choice
options:
- generate
- send
- generate-and-send
ニュースレター生成
Claude が複数言語で HTML ニュースレターを作成します:
const prompt = `
Generate a newsletter email in ${language}.
Context:
- Version: ${VERSION}
- Release: ${RELEASE_NAME}
Generate an HTML email with:
1. Greeting
2. Main highlights (2-3 items)
3. Quick tips section
4. Call to action
5. Footer with unsubscribe link: {{unsubscribe_url}}
Use clean, minimal HTML styling.
`;
データベース連携
Supabase を使用した購読者管理:
const { data: subscribers } = await supabase
.from('newsletter_subscribers')
.select('id, email, preferred_language')
.eq('confirmed', true)
.is('unsubscribed_at', null);
Resend によるバッチ送信
言語別グループ化による効率的な送信:
for (const [lang, subs] of Object.entries(byLang)) {
const batch = subs.map(sub => ({
from: 'Newsletter <newsletter@example.com>',
to: sub.email,
subject: subjects[lang],
html: newsletters[lang].replace(
/\{\{unsubscribe_url\}\}/g,
`https://example.com/unsubscribe?id=${sub.id}`
)
}));
await resend.batch.send(batch);
}
ワークフロー 5: Upstream Sync
Git サブモジュールを最新に保ち、変更ログを生成します。
毎日の同期
on:
schedule:
- cron: '0 0 * * *' # 毎日 UTC 0時
変更ログの生成
日付付きの変更ログファイルを自動作成します:
- name: Generate changelog
run: |
DATE=$(date +%Y-%m-%d)
CHANGELOG_FILE=".github/upstream-changelog/${DATE}.md"
echo "# Upstream Changes - ${DATE}" > $CHANGELOG_FILE
for repo in $(git submodule foreach --quiet 'echo $path'); do
cd $repo
COMMITS=$(git log --oneline --since="7 days ago" | head -10)
if [ -n "$COMMITS" ]; then
echo "### $(basename $repo)" >> $CHANGELOG_FILE
echo "$COMMITS" >> $CHANGELOG_FILE
fi
cd $GITHUB_WORKSPACE
done
トラッキング Issue
変更が検出されると、レビュー用の Issue を作成します:
- name: Create tracking issue
uses: actions/github-script@v7
with:
script: |
await github.rest.issues.create({
title: `Upstream Update - ${date}`,
body: `## Upstream repositories updated
### Action Items
- [ ] Review changes
- [ ] Update if breaking changes
- [ ] Test compatibility`,
labels: ['upstream-update', 'needs-review']
});
ワークフロー 6: CI/CD Pipeline
設定検証、ビルド、lint、テスト、デプロイを含む標準的な CI/CD パイプライン。
マルチジョブパイプライン
jobs:
validate-config:
# JSON/YAML ファイルの検証
build:
# キャッシュ付きビルド
lint:
# ESLint + Prettier
test:
# カバレッジ付きテスト実行
security:
# npm audit
deploy:
needs: [build, lint, test]
if: github.ref == 'refs/heads/main'
設定検証
ビルド前に構文エラーをキャッチ:
- name: Validate JSON files
run: |
for json in $(find . -name "*.json" -not -path "./node_modules/*"); do
python3 -c "import json; json.load(open('$json'))"
done
- name: Validate YAML files
run: |
for yaml in $(find . -name "*.yml" -o -name "*.yaml"); do
python3 -c "import yaml; yaml.safe_load(open('$yaml'))"
done
キャッシュ
依存関係キャッシュによるビルド高速化:
- name: Cache dependencies
uses: actions/cache@v4
with:
path: ~/.npm
key: ${{ runner.os }}-npm-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-npm-
必要な Secrets
コア(必須)
| Secret | 用途 | 取得場所 |
|---|---|---|
ANTHROPIC_API_KEY | コンテンツ生成用 Claude API | Anthropic Console |
SNS(オプション)
| Secret | 用途 | 取得場所 |
|---|---|---|
X_API_KEY | X/Twitter 投稿 | X Developer Portal |
X_API_SECRET | X/Twitter 投稿 | X Developer Portal |
X_ACCESS_TOKEN | X/Twitter 投稿 | X Developer Portal |
X_ACCESS_SECRET | X/Twitter 投稿 | X Developer Portal |
THREADS_USER_ID | Threads 投稿 | Meta Developer |
THREADS_ACCESS_TOKEN | Threads 投稿 | Meta Developer Portal |
ニュースレター(オプション)
| Secret | 用途 | 取得場所 |
|---|---|---|
RESEND_API_KEY | メール送信 | Resend |
SUPABASE_URL | データベース | Supabase |
SUPABASE_SERVICE_KEY | データベース(管理者) | Supabase Dashboard |
通知(オプション)
| Secret | 用途 | 取得場所 |
|---|---|---|
DISCORD_WEBHOOK_URL | Discord 通知 | Server Settings > Integrations |
SLACK_WEBHOOK_URL | Slack 通知 | Slack App Settings |
クイックスタート
# 1. すべてのワークフローをリポジトリにコピー
cp -r templates/github-actions-suite/*.yml .github/workflows/
# 2. GitHub Settings > Secrets で必要な Secrets を追加
# 最低限必要: ANTHROPIC_API_KEY
# 3. 用途に合わせてワークフローをカスタマイズ
# - release-monitor.yml の REPO_TO_MONITOR
# - blog-monitor.yml の BLOG_URL
# - 必要に応じて cron スケジュールを調整
ベストプラクティス
1. 機密データには Secrets を使用
API キーをハードコードしない:
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
2. レート制限の実装
API 呼び出し間に遅延を追加:
- name: Wait between requests
run: sleep 2
3. エラーを適切に処理
重要でないステップには continue-on-error を使用:
- name: Optional notification
run: curl "$DISCORD_WEBHOOK_URL" ...
continue-on-error: true
4. 最小限の権限を使用
必要な権限のみを指定:
permissions:
contents: write
pull-requests: write
issues: write
5. コストを監視
Claude API 呼び出しにはコストがかかります。以下を検討:
- シンプルなサマリーには
claude-3-5-haikuを使用 max_tokens制限を設定- 可能な場合はレスポンスをキャッシュ
カスタマイズ例
監視対象リポジトリの変更
env:
REPO_TO_MONITOR: owner/repo # 対象のリポジトリ
スケジュールの調整
on:
schedule:
- cron: '0 * * * *' # 毎時
- cron: '0 */2 * * *' # 2時間ごと
- cron: '0 0 * * *' # 毎日 0時
- cron: '0 0 * * 0' # 毎週日曜
通知チャンネルの追加
- name: Slack notification
run: |
curl -X POST "$SLACK_WEBHOOK_URL" \
-H "Content-Type: application/json" \
-d '{"text": "New release: $VERSION"}'
実際の効果
この自動化スイートは、claude-world.com で使用されているパターンに基づいて設計されています:
| 指標 | 導入前 | 導入後 |
|---|---|---|
| リリース監視 | 手動チェック | 毎時自動 |
| アナウンス作成 | 各30分 | 0分(AI 生成) |
| ニュースレター執筆 | 2時間 | 5分のレビュー |
| サブモジュール更新 | 忘れがち | 毎日自動 |
| SNS 投稿 | プラットフォームごとに手動 | ワンクリックでマルチプラットフォーム |
はじめに
今日:
- ワークフローファイルをリポジトリにコピー
ANTHROPIC_API_KEYSecret を追加workflow_dispatchでテスト
今週:
- リリース監視を設定
- Discord 通知をセットアップ
- ニュースレター生成をテスト
今月:
- SNS 連携を追加
- ブログ監視を有効化
- コンテンツ生成プロンプトを微調整
GitHub Actions 自動化スイートは、反復的なコミュニティ管理を自律的なワークフローに変換します。Claude API がインテリジェントなコンテンツ生成を提供し、GitHub Actions がスケジューリングとオーケストレーションを処理します。ルーティンワークは自動化に任せ、戦略とコミュニティエンゲージメントに集中しましょう。
リソース:
- GitHub Actions Documentation - GitHub の CI/CD プラットフォーム
- Claude API Documentation - Anthropic の API リファレンス
- Cron Syntax Generator - スケジュール設定に便利
- claude-world-examples Repository - テンプレートファイル