GitHub ActionsとWordPress REST APIで実現する自動Blog投稿システム – 2025/08/02

# GitHub ActionsとWordPress REST APIで実現する自動Blog投稿システム

## はじめに

開発プロジェクトにおいて、作業完了時の引継ぎ文書作成は重要ですが、手動での投稿作業は時間がかかります。今回、GitHub ActionsとWordPress REST APIを連携させた自動Blog投稿システムを構築し、PRマージと同時に引継ぎ文書を自動投稿する仕組みを実装しました。

## システム概要

### 🎯 目的
– 開発作業完了時の自動文書化
– 引継ぎ情報の確実な記録
– 手動作業の削減と効率化

### 🔧 技術構成
– **GitHub Actions**: CI/CDパイプライン
– **WordPress REST API**: Blog投稿処理
– **Python**: データ処理・API連携
– **GitHub Secrets**: 認証情報管理

## 実装アーキテクチャ

“`
┌─────────────┐ ┌──────────────────┐ ┌─────────────────┐<br>
│ PR Merge │───▶│ GitHub Actions │───▶│ WordPress Blog │<br>
└─────────────┘ └──────────────────┘ └─────────────────┘<br>
│<br>
▼<br>
┌─────────────────┐<br>
│ Content Security │<br>
│ (秘匿化処理) │<br>
└─────────────────┘<br>
“`

## 実装手順

### 1. GitHub Actions ワークフロー作成

“`yaml
name: Update WordPress Blog<br>
<br>
on:<br>
push:<br>
branches: [main]<br>
workflow_dispatch:<br>
<br>
jobs:<br>
update-blog:<br>
runs-on: ubuntu-latest<br>
steps:<br>
– name: Checkout repository<br>
uses: actions/checkout@v4<br>
<br>
– name: Set up Python<br>
uses: actions/setup-python@v4<br>
with:<br>
python-version: '3.9'<br>
<br>
– name: Install dependencies<br>
run: pip install requests<br>
<br>
– name: Create blog post content<br>
run: |<br>
# 引継ぎ文書コンテンツ生成<br>
cat << 'EOF' > blog_content.md<br>
# 開発作業完了報告<br>
## 実装内容<br>
– 機能実装詳細<br>
– 技術スタック情報<br>
– 今後の課題<br>
EOF<br>
<br>
– name: Sanitize content for blog<br>
run: |<br>
# 機密情報の秘匿化処理<br>
python3 << 'EOF'<br>
import re<br>
with open('blog_content.md', 'r') as f:<br>
content = f.read()<br>
<br>
# 秘匿化パターン適用<br>
sanitized = re.sub(r'API_KEY_[A-Z]+', '[APIキー]', content)<br>
sanitized = re.sub(r'https://example\.com', '[サイトURL]', sanitized)<br>
<br>
with open('sanitized_content.md', 'w') as f:<br>
f.write(sanitized)<br>
EOF<br>
<br>
– name: Post to WordPress<br>
env:<br>
WORDPRESS_URL: ${{ secrets.WORDPRESS_URL }}<br>
WORDPRESS_USERNAME: ${{ secrets.WORDPRESS_USERNAME }}<br>
WORDPRESS_APP_PASSWORD: ${{ secrets.WORDPRESS_APP_PASSWORD }}<br>
run: |<br>
# WordPress REST API投稿処理<br>
python3 << 'EOF'<br>
import requests<br>
import os<br>
from datetime import datetime<br>
<br>
# 認証情報取得<br>
wp_url = os.environ.get('WORDPRESS_URL')<br>
wp_user = os.environ.get('WORDPRESS_USERNAME')<br>
wp_pass = os.environ.get('WORDPRESS_APP_PASSWORD')<br>
<br>
# コンテンツ読み込み<br>
with open('sanitized_content.md', 'r') as f:<br>
content = f.read()<br>
<br>
# 投稿データ作成<br>
post_data = {<br>
'title': f'開発作業完了報告 – {datetime.now().strftime("%Y/%m/%d")}',<br>
'content': content.replace('\n', '<br>\n'),<br>
'status': 'draft',<br>
'categories': [1]<br>
}<br>
<br>
# WordPress REST API呼び出し<br>
response = requests.post(<br>
f'{wp_url}/wp-json/wp/v2/posts',<br>
json=post_data,<br>
auth=(wp_user, wp_pass),<br>
headers={'Content-Type': 'application/json'}<br>
)<br>
<br>
if response.status_code == 201:<br>
result = response.json()<br>
print(f"✅ Blog投稿成功! ID: {result['id']}")<br>
else:<br>
print(f"❌ 投稿失敗: {response.status_code}")<br>
EOF<br>
“`

### 2. WordPress REST API設定

#### Application Password作成
1. WordPress管理画面 → ユーザー → プロフィール
2. Application Passwords セクション
3. 新しいパスワード生成
4. 生成されたパスワードを記録

#### REST API有効化確認
“`bash
curl -X GET "https://example.com/wp-json/wp/v2/posts" \<br>
-H "Content-Type: application/json"<br>
“`

### 3. GitHub Secrets設定

リポジトリ設定で以下のSecretsを追加:

“`
WORDPRESS_URL=https://example.com<br>
WORDPRESS_USERNAME=api-user<br>
WORDPRESS_APP_PASSWORD=xxxx xxxx xxxx xxxx<br>
“`

## セキュリティ対策

### 機密情報の秘匿化

“`python
import re<br>
<br>
def sanitize_content(content):<br>
"""機密情報を秘匿化"""<br>
patterns = {<br>
r'API_KEY_[A-Z_]+': '[APIキー]',<br>
r'https://[^/]+\.com': '[サイトURL]',<br>
r'/home/[^/]+/': '[ローカルパス]/',<br>
r'password["\s]*[:=]["\s]*[^"\s]+': 'password: "[パスワード]"'<br>
}<br>
<br>
sanitized = content<br>
for pattern, replacement in patterns.items():<br>
sanitized = re.sub(pattern, replacement, sanitized)<br>
<br>
return sanitized<br>
“`

### 認証情報管理
– GitHub Secretsによる暗号化保存
– Application Passwordの使用
– 最小権限の原則適用

## トラブルシューティング

### よくある問題と解決法

#### 1. 認証エラー (401 Unauthorized)
“`json
{"code":"rest_not_logged_in","message":"現在ログインしていません。"}<br>
“`

**解決法:**
– Application Passwordの再生成
– ユーザー権限の確認
– GitHub Secrets設定の確認

#### 2. パラメータエラー (400 Bad Request)
“`json
{"code":"rest_invalid_param","message":"無効なパラメータ: tags"}<br>
“`

**解決法:**
– tagsパラメータの形式確認
– 文字列配列ではなく整数ID配列を使用
– 不要なパラメータの削除

#### 3. ワークフロー実行失敗
**解決法:**
– YAML構文の確認
– インデントの修正
– workflow_dispatch設定の確認

## 実行結果

### 成功例
“`
✅ Blog投稿成功!<br>
投稿ID: 14988<br>
タイトル: 開発作業完了報告 – 2025/08/02<br>
ステータス: draft<br>
編集URL: https://example.com/wp-admin/post.php?post=14988&action=edit<br>
“`

### パフォーマンス
– 平均実行時間: 12-16秒
– 成功率: 100% (修正後)
– リソース使用量: 最小限

## 運用とメンテナンス

### 日常運用
1. **自動実行**: PRマージ時の自動投稿
2. **確認作業**: WordPress管理画面での内容確認
3. **公開処理**: 下書きから公開への変更

### 定期メンテナンス
– Application Passwordの更新 (3-6ヶ月)
– GitHub Secrets設定の確認
– ワークフロー実行ログの監視
– セキュリティパターンの更新

## 今後の拡張計画

### 機能拡張
– [ ] 複数カテゴリ・タグ対応
– [ ] 投稿テンプレートのカスタマイズ
– [ ] 画像・添付ファイル対応
– [ ] 投稿スケジューリング機能

### 運用改善
– [ ] 通知機能 (Slack/Discord)
– [ ] 投稿統計・分析
– [ ] 自動公開オプション
– [ ] 多言語対応

## まとめ

GitHub ActionsとWordPress REST APIを組み合わせることで、開発ワークフローに自然に組み込まれた自動文書化システムを構築できました。

### 得られた効果
– **作業効率化**: 手動投稿作業の削減
– **確実性向上**: 投稿忘れの防止
– **セキュリティ強化**: 機密情報の自動秘匿化
– **運用負荷軽減**: 自動化による工数削減

このシステムにより、開発チームは技術的な作業に集中しながら、確実な引継ぎ文書管理を実現できるようになりました。

**技術記事カテゴリ**: DevOps, CI/CD, WordPress, GitHub Actions
**難易度**: 中級
**実装時間**: 2-3時間

タイトルとURLをコピーしました