AI-news/CLAUDE.md
2026-04-17 21:58:37 +09:00

62 lines
2.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# AIニュース
Xのホームタイムラインから24時間以内のAI関連ニュースを収集し、Geminiで分析してSlackに投稿する自動配信ツール。
## プロジェクト構造
```
src/
├── main.ts # エントリポイント(最初にここを読む)
├── settings.ts # 受講生が触る全設定TS定数
├── config.ts # 環境変数の zod 検証
├── types.ts # 共通型定義
├── sources/
│ ├── x-timeline.ts # X API タイムライン取得 + モックルート分岐
│ └── url-content.ts # Jina Reader で URL 本文並列取得
├── analysis/
│ ├── url-summarizer.ts # Gemini Flash で各URL要約
│ ├── analyze.ts # Gemini Pro で最終トレンド分析
│ ├── schema.ts # zod スキーマSSoT
│ └── prompts.ts # プロンプト2つ
├── delivery/
│ └── slack.ts # Block Kit 組み立て + Slack投稿
└── utils/
├── chunk.ts # 配列チャンク分割
├── errors.ts # UserFacingError + assertSlackOk
└── post-optimizer.ts # URL抽出・t.co展開・テキスト整形
```
## 実行方法
```bash
npm start # 通常実行
USE_SAMPLE_DATA=true npm start # モックルートX API 不要)
```
## 読む順番
1. `src/main.ts` — 4ステップの全体像
2. `src/sources/x-timeline.ts` — ソース元
3. `src/analysis/analyze.ts` — 処理
4. `src/delivery/slack.ts` — 届ける先
5. `src/settings.ts` — 設定を変えたいとき
## GitHub Secrets
| シークレット名 | 用途 |
|---|---|
| `X_CONSUMER_KEY` | X OAuth 1.0a consumer keyconsole.x.com 「コンシューマーキー」の API Key |
| `X_CONSUMER_SECRET` | X OAuth 1.0a consumer secret同 API Key Secret |
| `X_ACCESS_TOKEN` | X OAuth 1.0a access tokenconsole.x.com 「OAuth 1.0 キー」のアクセストークン) |
| `X_ACCESS_TOKEN_SECRET` | X OAuth 1.0a access token secret同 アクセストークンシークレット) |
| `JINA_API_KEY` | Jina Reader |
| `GEMINI_API_KEY` | Gemini Flash + Pro |
| `SLACK_BOT_TOKEN` | Slack Bot`chat:write` スコープ) |
| `SLACK_CHANNEL` | 投稿先チャンネルID |
## 禁止事項
- curl で直接 Slack API / X API を叩かない
- `src/settings.ts` 以外のファイルで設定値をハードコードしない
- 受講生に見せたいエラー文言は `UserFacingError``message` に入れる(`main.ts` が `[USER-FACING]` プレフィックス付きで出力する)。`throw new Error(...)` だけだと `[INTERNAL]` 扱いになり、受講生が混乱する