# Cron Job 実行エラー調査報告書 **作成日**: 2025-11-27 **調査対象**: auto-post-ai-news バッチジョブ **問題**: 毎朝8時のcron実行が403エラーで失敗 --- ## 📋 調査サマリー ### 問題の結論 **根本原因**: アイキャッチ画像アップロード処理の問題 バッチは**正常に実行されている**が、以下の問題により失敗: 1. ✅ Cron は正常に起動 (2025-11-27T08:00:01) 2. ✅ ニュース収集成功 (84件) 3. ✅ 分析成功 (3件選定) 4. ✅ フォーマット成功 (2443文字) 5. ❌ **画像アップロード失敗** (全3記事の画像) 6. ❌ **WordPress投稿失敗 (403エラー)** --- ## 🔍 詳細調査結果 ### 1. Cron設定確認 ```bash 0 8 * * * /usr/bin/node auto-post-ai-news.js >> logs/cron.log 2>&1 ``` - ✅ 設定は正常 - ✅ 実行タイミングは正確 (syslogで確認済み) ### 2. 環境変数確認 ``` WP_API_URL: https://2025032623012012057904.onamaeweb.jp/blog/wp-json ✅ WP_USERNAME: planitai ✅ WP_APP_PASSWORD: [24文字] ✅ WP_CATEGORY_ID: 4 ✅ ``` ### 3. WordPress API接続テスト **curlによる手動テスト**: - GET /wp/v2/posts → ✅ HTTP 200 (成功) - POST /wp/v2/posts → ✅ HTTP 201 (成功) **結論**: 認証情報は完全に正常 ### 4. エラーログ分析 #### 画像アップロード失敗 ``` [2025-11-26T23:01:05.767Z] [INFO] 第1の記事に画像がありません、次の記事を試します [2025-11-26T23:01:05.768Z] [INFO] 第2の記事に画像がありません、次の記事を試します [2025-11-26T23:01:05.768Z] [INFO] 第3の記事の画像URL: https://images.ctfassets.net/.../2Q______1_.jpeg?w=300&q=30 [2025-11-26T23:01:05.824Z] [WARN] 第3の記事の画像アップロードに失敗 ``` #### WordPress投稿エラー ``` [2025-11-26T23:01:05.919Z] [ERROR] WordPress API エラー: 403 at WordPressClient.createPost (wordpress-client.js:269:15) ``` --- ## 🎯 根本原因の特定 ### 原因1: 画像URLの問題 第3の記事の画像URL: ``` https://images.ctfassets.net/jdtwqhzvc2n1/3xnd8Pd0WlOl5td1iZkwG5/ 7e244c4fe5fda98c5550d87cd9c511c2/2Q______1_.jpeg?w=300&q=30 ``` **考えられる問題点**: - ファイル名に日本語文字が含まれている (`2Q______1_.jpeg`) - クエリパラメータ付きURL (`?w=300&q=30`) - CDNのアクセス制限 - Content-Type判定の失敗 ### 原因2: 403エラーの真の原因 コード分析の結果、以下の可能性が判明: **可能性A**: `featuredMediaId`に不正な値が設定 ```javascript // auto-post-ai-news.js:150 if (featuredMediaId) { blogPost.featuredMediaId = featuredMediaId; } ``` 画像アップロード失敗時、`blogPost.featuredMediaId`に何らかの不正な値(0, undefined等)が 残っている可能性。WordPress APIは存在しないメディアIDで403を返すことがある。 **可能性B**: レート制限 連続した画像取得試行によるWordPress側のレート制限 --- ## ✅ 検証済み事項 1. ✅ cron設定は正常 2. ✅ 環境変数は正常にロード 3. ✅ WordPress認証情報は有効 4. ✅ WordPress REST APIは動作中 5. ✅ 投稿権限は問題なし (curlテストで確認) 6. ✅ スクリプト自体は実行可能 --- ## 💡 推奨される対応策 ### 即時対応 (Priority: HIGH) #### 対応1: 画像アップロード処理の改善 ```javascript // wordpress-client.js の uploadImage メソッド // - URLエンコーディングの追加 // - タイムアウトの延長 // - より詳細なエラーログ ``` #### 対応2: エラーハンドリングの強化 ```javascript // auto-post-ai-news.js // 画像アップロード失敗時でも投稿を継続 // featuredMediaId の初期化を確実に if (!featuredMediaId) { delete blogPost.featuredMediaId; // undefined ではなく削除 } ``` #### 対応3: リトライメカニズムの追加 - 画像ダウンロード失敗時のリトライ - WordPress API呼び出し失敗時のリトライ ### 中期対応 (Priority: MEDIUM) #### 対応4: 画像処理の見直し - 画像プロキシサーバーの利用 - 画像の事前検証 (HEAD リクエスト) - 画像URLの正規化処理 #### 対応5: 監視とアラート - Slack/メール通知の追加 - ログ監視の自動化 - 成功/失敗のメトリクス収集 ### 長期対応 (Priority: LOW) #### 対応6: テスト強化 - 画像アップロード専用テスト - エンドツーエンドテスト - モックサーバーでのテスト --- ## 🚀 次のステップ ### 今すぐできること 1. **一時的な回避策の実装** ```javascript // featuredMediaId が失敗した場合は null ではなく undefined に // または blogPost から featuredMediaId プロパティを削除 ``` 2. **手動での投稿実行** ```bash cd /var/www/tkim.planitai.co.jp/blog/batch/auto-post-ai-news node auto-post-ai-news.js ``` 3. **詳細ログの有効化** - wordpress-client.js に console.log を追加 - 画像URL、ダウンロード結果、アップロードレスポンスを記録 ### 確認が必要なこと - [ ] wordpress-client.js の uploadImage でどのエラーが発生しているか - [ ] 画像URLが実際にアクセス可能か - [ ] WordPress側でメディアアップロードの制限がないか - [ ] ファイル名の特殊文字処理が正しいか --- ## 📝 結論 **問題**: 画像アップロード処理の失敗が原因でWordPress投稿が403エラーに **対策**: 1. 画像アップロード失敗時のエラーハンドリング改善 2. featuredMediaId の適切な初期化 3. より詳細なエラーログの追加 **緊急度**: MEDIUM (翌日の実行までに修正が望ましい) --- ## 📎 参考情報 ### ログファイル - `/var/www/tkim.planitai.co.jp/blog/batch/auto-post-ai-news/logs/ai-news-20251126.log` - `/var/www/tkim.planitai.co.jp/blog/batch/auto-post-ai-news/logs/error.log` - `/var/log/syslog` (cron実行記録) ### 関連ファイル - `auto-post-ai-news.js:120-168` - 画像アップロード処理 - `wordpress-client.js:112-197` - uploadImage メソッド - `wordpress-client.js:208-274` - createPost メソッド --- **調査担当**: Claude Code **調査完了日時**: 2025-11-27 10:00 JST