# AI News 自動投稿システム構築計画 > **作成日**: 2025-11-23 > **プロジェクト**: 毎日AI関連ニュースを自動でWordPressブログに投稿するシステム --- ## 1. プロジェクト概要 ### 目的 - 毎朝8時に自動的にAI関連ニュースをWordPressブログに投稿 - 前日のAIニュースから影響力の大きい5つを選定し、分析記事を作成 ### ターゲット読者 - 日本のIT関連CTO - エンジニア - 投資家 ### 技術スタック - Node.js 18+ - @anthropic-ai/claude-agent-sdk - WordPress REST API - dotenv - axios --- ## 2. 要求事項 ### 機能要求事項 1. **ニュース収集** - **必須条件**: 24時間以内にpublishされたAI関連ニュースのみを参照 - 前日(過去24時間)のAI関連ニュースを検索 - **ニュースソース**: - 日本語および英語のニュースを両方収集 - グローバルなニュースと日本国内のニュースを含む - **優先ソース**: Bloomberg、Forbes など信頼性の高いメディア - 発行日時が24時間以内であることを厳密にチェック 2. **ニュース選定** - 影響力の大きいニュースを5つ選定 - 以下の基準で評価: - ビジネス・技術的インパクト - CTO/エンジニア/投資家への関連性 - 新規性・独自性 3. **分析記事作成** - 各ニュースに対して以下を生成: - **核心内容**: ニュースの要点を簡潔に要約 - **なぜ重要か**: ビジネス・技術的意義を分析 - ニュース出処リンクを含める 4. **WordPress自動投稿** - WordPress REST APIを使用 - Application Passwordで認証 - 投稿後のエラーハンドリング ### 非機能要求事項 1. **自動実行**: cron で毎朝8時に実行 2. **ロギング**: 実行ログ、エラーログを保存 3. **重複防止**: 同じ日付の記事は投稿しない 4. **エラー通知**: 失敗時の通知機能(将来的に) ### 出力フォーマット ``` タイトル: YYYY/MM/DD AI News ## 1) OpenAI、超長文コーディング特化モデル 「GPT-5.1 Codex Max」 公開 核心内容 OpenAI が既存の GPT-5.1 系列をベースに、コーディング作業に特化した「GPT-5.1-Codex-Max」 を公開。 このモデルは、非常に大きなコードベースを扱いながら、自動で文脈を圧縮・整理しつつ、最後までタスクをやり切る点が特徴です。 なぜ重要か - 単なる「コード自動補完」を超えて、「プロジェクト単位で最後まで面倒を見るコーディングエージェント」 に最適化された初のメジャー LLM の一つである点。 - リポジトリ全体を理解し、修正まで行うワークロードが現実化すると、開発者の役割はより 「問題定義・レビュー・アーキテクチャ設計」 側へシフトしていく可能性が高いです。 ニュース出処: [記事タイトル](URL) ---- ## 2) ... ``` --- ## 3. アーキテクチャ設計 ### システムフロー ``` [Cron Scheduler] ↓ [auto-post-ai-news.js] メインスクリプト ↓ [1. ニュース収集] (news-collector.js) - WebSearch で AI 関連ニュースを検索 - **24時間以内にpublishされたニュースのみ**に絞り込み ↓ [2. ニュース分析] (news-analyzer.js) - Claude Agent SDK でニュース分析 - 5つの重要ニュースを選定 - 核心内容 + なぜ重要か を生成 ↓ [3. フォーマット] (formatter.js) - 指定されたフォーマットに整形 - ニュース出処リンク追加 ↓ [4. WordPress投稿] (wordpress-client.js) - REST API で投稿作成 - Application Password で認証 ↓ [5. ログ記録] - 成功/失敗をログに記録 ``` ### データフロー ```javascript Input: - 日付 (前日) Process: 1. ニュース検索 → [{title, url, summary, date}, ...] 2. 分析・選定 → [{title, coreContent, whyImportant, source}, ...] (5件) 3. フォーマット → WordPress投稿用HTML Output: - WordPress投稿 - ログファイル ``` --- ## 4. ファイル構造 ``` /var/www/tkim.planitai.co.jp/blog/batch/auto-post-ai-news/ ├── package.json # Node.js依存関係 ├── package-lock.json ├── .env # 環境変数 (git ignored) ├── .env.example # 環境変数のテンプレート ├── .gitignore ├── README.md # プロジェクトドキュメント │ ├── auto-post-ai-news.js # メインスクリプト (エントリーポイント) │ ├── lib/ │ ├── news-collector.js # ニュース収集モジュール │ ├── news-analyzer.js # ニュース分析モジュール (Claude SDK) │ ├── formatter.js # フォーマット変換モジュール │ └── wordpress-client.js # WordPress API クライアント │ ├── config/ │ └── prompts.js # Claude用プロンプトテンプレート │ ├── logs/ │ ├── .gitkeep │ ├── ai-news-YYYYMMDD.log # 日別実行ログ │ └── error.log # エラーログ │ └── test/ ├── test-news-collector.js # ユニットテスト ├── test-analyzer.js └── test-wordpress.js ``` --- ## 5. 実装計画 ### Phase 1: 基本構造実装 (Day 1) #### 1.1 プロジェクト初期化 - [ ] ディレクトリ作成 - [ ] package.json 作成 - [ ] 必要なパッケージインストール: - `@anthropic-ai/claude-agent-sdk` - `axios` - `dotenv` - `cheerio` (HTMLパース用) - [ ] .env.example 作成 - [ ] .gitignore 作成 #### 1.2 ニュース収集モジュール (lib/news-collector.js) - [ ] WebSearch を使用したニュース検索 - [ ] 検索キーワード: - "AI news Bloomberg Forbes" (優先ソース) - "artificial intelligence news latest" - "AI ニュース 日本 最新" - "OpenAI, Google AI, Anthropic, Microsoft AI, NVIDIA" など - [ ] **重要**: 日付フィルタリング (24時間以内にpublishされたニュースのみ) - 検索結果から発行日時を抽出 - 現在時刻から24時間以内のニュースのみをフィルタ - 24時間を超えるニュースは除外 - [ ] **ニュースソース優先順位**: - 1. Bloomberg、Forbes、Reuters、Wall Street Journal - 2. TechCrunch、The Verge、Ars Technica - 3. 日本の主要メディア(日経新聞、ITmedia など) - [ ] 結果の構造化 #### 1.3 Claude Agent SDK 連動 - [ ] Claude Agent SDK セットアップ - [ ] WebSearch ツール有効化 - [ ] maxTurns: 50 に設定(十分なニュース収集のため) - [ ] 基本的なクエリテスト --- ### Phase 2: 分析・フォーマット実装 (Day 1-2) #### 2.1 ニュース分析モジュール (lib/news-analyzer.js) - [ ] Claude に以下を依頼するプロンプト設計: 1. 収集したニュースから影響力の大きい5つを選定 2. 各ニュースの「核心内容」を要約 3. 各ニュースの「なぜ重要か」を分析 (CTO/エンジニア/投資家視点) - [ ] JSON形式でレスポンスを受け取る - [ ] バリデーション (5件のニュースが返ってくるか確認) #### 2.2 フォーマットモジュール (lib/formatter.js) - [ ] 指定されたフォーマットに変換: ``` ## N) [ニュースタイトル] 核心内容 [内容] なぜ重要か [分析] ニュース出処: [タイトル](URL) ---- ``` - [ ] タイトル生成: "YYYY/MM/DD AI News" - [ ] HTML変換 (WordPress用) #### 2.3 プロンプトテンプレート (config/prompts.js) ```javascript export const NEWS_SELECTION_PROMPT = ` あなたは日本のIT業界向けにAIニュースを分析する専門家です。 対象読者: CTO、エンジニア、投資家 **重要**: 以下のニュースリストは全て24時間以内にpublishされたAI関連ニュースです。 このリストから、最も影響力が大きい5つを選定してください: {newsListJson} 選定基準: 1. ビジネス・技術的インパクト 2. 日本のIT業界への関連性(CTO/エンジニア/投資家にとっての重要性) 3. 新規性・独自性 各ニュースについて: - 核心内容: ニュースの要点を2-3段落で要約 - なぜ重要か: ビジネス・技術的意義を2-3段落で分析(CTO/エンジニア/投資家の視点から) JSON形式で返してください: { "articles": [ { "title": "ニュースタイトル", "coreContent": "核心内容の文章(段落ごとに配列)", "whyImportant": "なぜ重要かの文章(段落ごとに配列)", "sourceTitle": "元記事タイトル", "sourceUrl": "元記事URL" } ] } `; ``` --- ### Phase 3: WordPress連動 (Day 2) #### 3.1 WordPress API クライアント (lib/wordpress-client.js) - [ ] Application Password 認証実装 - [ ] 投稿作成 API 実装: - エンドポイント: `POST /wp/v2/posts` - パラメータ: - `title`: "YYYY/MM/DD AI News" - `content`: HTML形式の本文 - `status`: "publish" - `categories`: [カテゴリID] (要確認) - [ ] エラーハンドリング - [ ] レスポンス検証 #### 3.2 重複チェック - [ ] 同じタイトルの投稿が存在しないか確認 - [ ] 存在する場合はスキップ #### 3.3 テスト実行 - [ ] ステージング環境でテスト投稿 - [ ] フォーマット確認 - [ ] リンク動作確認 --- ### Phase 4: 自動化・運用 (Day 2-3) #### 4.1 ロギング実装 - [ ] 実行ログ: 日別ファイル (`logs/ai-news-YYYYMMDD.log`) - [ ] エラーログ: 別ファイル (`logs/error.log`) - [ ] ログレベル: INFO, WARN, ERROR - [ ] タイムスタンプ付き #### 4.2 エラーハンドリング - [ ] try-catch で全体をラップ - [ ] 各フェーズでのエラー処理: - ニュース収集失敗 → リトライ - Claude API エラー → ログ記録、通知 - WordPress API エラー → ログ記録、手動確認 - [ ] プロセス終了コード設定 #### 4.3 Cron設定 ```bash # /etc/crontab または crontab -e 0 8 * * * cd /var/www/tkim.planitai.co.jp/blog/batch/auto-post-ai-news && /usr/bin/node auto-post-ai-news.js >> logs/cron.log 2>&1 ``` - [ ] crontab 設定 - [ ] 実行確認 - [ ] ログローテーション設定 (logrotate) #### 4.4 モニタリング (将来的) - [ ] メール通知 (エラー発生時) - [ ] Slack通知 - [ ] ダッシュボード --- ## 6. 環境変数 ### .env ファイル ```bash # WordPress API WP_API_URL=https://2025032623012012057904.onamaeweb.jp/blog/wp-json WP_USERNAME=planitai WP_APP_PASSWORD=FeTbFPmtBn3NbII57BUc59iJ # Claude API (optional if using SDK default) ANTHROPIC_API_KEY=sk-ant-xxx # ログレベル LOG_LEVEL=info # タイムゾーン TZ=Asia/Tokyo # カテゴリID (WordPress) WP_CATEGORY_ID=1 ``` ### WordPress Application Password 情報 - **Application Name**: `ai-news-writer` - **Application Password**: `FeTbFPmtBn3NbII57BUc59iJ` - **Username**: `planitai` ### WordPress Application Password について WordPress Application Passwordは、WordPress 5.6以降で標準機能として提供されるセキュアな認証方式です。 通常のパスワードの代わりに、アプリケーション専用のパスワードを発行することで、セキュリティを向上させます。 --- ## 7. 実行方法 ### 開発・テスト ```bash # インストール cd /var/www/tkim.planitai.co.jp/blog/batch/auto-post-ai-news npm install # .env ファイル作成 cp .env.example .env # .env を編集して環境変数を設定 # テスト実行 node auto-post-ai-news.js # 個別モジュールテスト node test/test-news-collector.js node test/test-analyzer.js node test/test-wordpress.js ``` ### 本番環境 ```bash # Cron設定 crontab -e # 以下を追加 (毎日8時実行) 0 8 * * * cd /var/www/tkim.planitai.co.jp/blog/batch/auto-post-ai-news && /usr/bin/node auto-post-ai-news.js >> logs/cron.log 2>&1 # ログ確認 tail -f logs/ai-news-$(date +\%Y\%m\%d).log tail -f logs/error.log ``` --- ## 8. 技術仕様 ### 使用パッケージ | パッケージ | バージョン | 用途 | |-----------|----------|------| | @anthropic-ai/claude-agent-sdk | ^0.1.49 | Claude AI連動、WebSearch | | axios | ^1.13.2 | HTTP通信 (WordPress API) | | cheerio | ^1.1.2 | HTMLパース (optional) | | dotenv | ^16.0.0 | 環境変数読み込み | ### Claude Agent SDK 設定 ```javascript import { query } from '@anthropic-ai/claude-agent-sdk'; const response = query({ prompt: '...', options: { model: 'claude-sonnet-4-5', maxTurns: 50, // 十分なニュース収集・分析のため allowedTools: ['WebSearch', 'Read'], } }); ``` ### WordPress REST API ```javascript // 認証ヘッダー const auth = Buffer.from(`${username}:${appPassword}`).toString('base64'); headers: { 'Authorization': `Basic ${auth}`, 'Content-Type': 'application/json', } // 投稿作成 POST /wp/v2/posts { "title": "2025/11/23 AI News", "content": "", "status": "publish", "categories": [1] } ``` --- ## 9. リスク管理 ### 想定リスクと対策 | リスク | 影響度 | 対策 | |-------|-------|------| | Claude API障害 | 高 | リトライロジック、エラー通知 | | WordPress API障害 | 高 | ローカルバックアップ、手動投稿 | | ニュース不足 | 中 | 最小件数チェック、前日分も検索 | | 重複投稿 | 中 | タイトルチェック、投稿前確認 | | Cron実行失敗 | 中 | ログ監視、定期的な動作確認 | | APIレート制限 | 低 | リトライ間隔調整、バックオフ | --- ## 10. 今後の拡張 ### 優先度: 高 - [ ] エラー時のSlack通知 - [ ] ダッシュボード (投稿履歴、成功率) - [ ] ニュースソースの多様化 ### 優先度: 中 - [ ] カテゴリ自動分類 - [ ] タグ自動生成 - [ ] Featured Image 自動設定 ### 優先度: 低 - [ ] 多言語対応 (英語版) - [ ] SNS自動投稿 - [ ] アナリティクス連動 --- ## 11. 参考資料 ### WordPress REST API - https://developer.wordpress.org/rest-api/reference/posts/ ### Claude Agent SDK - https://github.com/anthropics/claude-agent-sdk ### 既存コード参考 - `/var/www/yomirank.jp/write-recommendation-blog.js` - Claude Agent SDK 使用例 - WebSearch 実装例 - JSON パース処理 --- ## 12. タスクチェックリスト ### 初期セットアップ - [ ] ディレクトリ構造作成 - [ ] package.json 作成 - [ ] npm install - [ ] .env 設定 - [ ] WordPress Application Password 取得 ### 開発 - [ ] news-collector.js 実装 - [ ] news-analyzer.js 実装 - [ ] formatter.js 実装 - [ ] wordpress-client.js 実装 - [ ] auto-post-ai-news.js (メイン) 実装 - [ ] プロンプト最適化 ### テスト - [ ] ローカルテスト - [ ] ステージング環境テスト - [ ] 本番環境テスト (手動実行) ### デプロイ - [ ] cron設定 - [ ] ログローテーション設定 - [ ] 初回自動実行確認 ### 運用 - [ ] ログ監視 - [ ] 投稿品質確認 - [ ] エラー対応 --- **作成者**: Claude Code **最終更新**: 2025-11-23