Skip to content

Commit e4c43ac

Browse files
authored
Merge pull request #17 from MrSmart00/feature/grok-api-planning
docs: Grok API Tech トレンド機能の実装計画を追加
2 parents 3bff004 + 5d8a4a2 commit e4c43ac

File tree

1 file changed

+206
-0
lines changed

1 file changed

+206
-0
lines changed
Lines changed: 206 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,206 @@
1+
# Grok API Tech トレンド機能追加計画
2+
3+
## 概要
4+
5+
Grok APIを使用してTechトレンドを取得する機能を astute-crow プロジェクトに追加します。
6+
Convex連携は不要で、独立したサービスとして実装します。
7+
8+
## 現在のコードベース構造
9+
10+
- **メインエントリーポイント**: `src/main.ts`
11+
- **既存コンポーネント**: `src/components/ZennTrends.ts` (Zennトレンド表示)
12+
- **既存サービス**: `src/services/zennService.ts` (Convex連携)
13+
- **型定義**: `src/types/zenn.ts`
14+
- **スタイル**: `src/style.css`
15+
16+
## 実装計画
17+
18+
### 1. Grok API サービスの作成
19+
20+
**ファイル**: `src/services/grokService.ts`
21+
22+
#### 主要機能
23+
- Grok APIとの通信管理
24+
- APIキー管理(環境変数 `VITE_GROK_API_KEY`
25+
- レート制限対応
26+
- エラーハンドリング
27+
- ローカルキャッシュ機能(localStorage使用)
28+
29+
#### 実装メソッド
30+
```typescript
31+
class GrokService {
32+
async getTechTrends(): Promise<GrokTrend[]>
33+
async refreshTrends(): Promise<GrokTrend[]>
34+
clearCache(): void
35+
private handleApiError(error: any): void
36+
private getCachedData(): GrokTrend[] | null
37+
private setCachedData(data: GrokTrend[]): void
38+
}
39+
```
40+
41+
### 2. 型定義の追加
42+
43+
**ファイル**: `src/types/grok.ts`
44+
45+
#### 定義する型
46+
```typescript
47+
interface GrokTrend {
48+
id: string
49+
title: string
50+
description: string
51+
url: string
52+
category: string
53+
score: number
54+
publishedAt: string
55+
source: string
56+
}
57+
58+
interface GrokTrendsResponse {
59+
trends: GrokTrend[]
60+
metadata: {
61+
totalCount: number
62+
lastUpdated: string
63+
}
64+
}
65+
66+
interface GrokTrendsState {
67+
trends: GrokTrend[]
68+
loading: LoadingState
69+
error: ErrorState | null
70+
lastUpdated: string | null
71+
}
72+
```
73+
74+
### 3. Grokトレンドコンポーネントの作成
75+
76+
**ファイル**: `src/components/GrokTrends.ts`
77+
78+
#### 設計方針
79+
- ZennTrendsコンポーネントと同様の構造
80+
- 状態管理(loading, error, success)
81+
- カード形式でのトレンド表示
82+
- 手動更新機能
83+
84+
#### 主要メソッド
85+
```typescript
86+
class GrokTrends {
87+
init(): Promise<void>
88+
loadTrends(): Promise<void>
89+
refresh(): Promise<void>
90+
render(): void
91+
private createTrendCard(trend: GrokTrend): string
92+
private createLoadingState(): string
93+
private createErrorState(): string
94+
}
95+
```
96+
97+
### 4. メインファイルの更新
98+
99+
**ファイル**: `src/main.ts`
100+
101+
#### 変更内容
102+
- HTMLテンプレートに新しいセクション追加
103+
- GrokTrendsコンポーネントの初期化
104+
- 既存のZennTrendsと並行表示
105+
106+
```typescript
107+
document.querySelector<HTMLDivElement>('#app')!.innerHTML = `
108+
<div class="container">
109+
<section id="zenn-trends"></section>
110+
<section id="grok-trends"></section>
111+
</div>
112+
`
113+
114+
// コンポーネント初期化
115+
const zennTrends = new ZennTrends('zenn-trends');
116+
const grokTrends = new GrokTrends('grok-trends');
117+
118+
Promise.all([
119+
zennTrends.init(),
120+
grokTrends.init()
121+
]).catch(console.error);
122+
```
123+
124+
### 5. スタイルの調整
125+
126+
**ファイル**: `src/style.css`
127+
128+
#### 追加内容
129+
- Grokトレンド用のスタイル
130+
- 共通カードスタイルのリファクタリング
131+
- セクション間のマージン調整
132+
- レスポンシブデザイン対応
133+
134+
### 6. 環境変数の設定
135+
136+
#### 新規ファイル
137+
- `.env.example`: 設定例の追加
138+
139+
#### 内容
140+
```
141+
# Grok API
142+
VITE_GROK_API_KEY=your_grok_api_key_here
143+
144+
# Convex (existing)
145+
VITE_CONVEX_URL=your_convex_url_here
146+
```
147+
148+
## 実装詳細
149+
150+
### API エンドポイント
151+
- Grok APIの具体的なエンドポイントURL(要確認)
152+
- 認証方法(APIキー、Bearer token等)
153+
- レスポンス形式の詳細
154+
155+
### エラーハンドリング戦略
156+
1. **ネットワークエラー**: リトライ機能付き
157+
2. **APIエラー**: 適切なエラーメッセージ表示
158+
3. **認証エラー**: 設定確認メッセージ
159+
4. **レート制限**: 自動的な遅延処理
160+
161+
### キャッシュ戦略
162+
- **保存場所**: localStorage
163+
- **有効期限**: 30分
164+
- **キャッシュクリア**: 手動更新時
165+
166+
### セキュリティ考慮事項
167+
- APIキーの安全な管理
168+
- HTTPS通信の確保
169+
- XSS対策(HTMLエスケープ)
170+
171+
## 開発フェーズ
172+
173+
### Phase 1: 基本実装
174+
1. GrokService の作成
175+
2. 型定義の追加
176+
3. 基本的なAPI通信テスト
177+
178+
### Phase 2: UI実装
179+
1. GrokTrendsコンポーネントの作成
180+
2. メインファイルの更新
181+
3. 基本スタイルの適用
182+
183+
### Phase 3: 機能強化
184+
1. エラーハンドリングの充実
185+
2. キャッシュ機能の実装
186+
3. UI/UX の改善
187+
188+
### Phase 4: 最終調整
189+
1. スタイルの最適化
190+
2. パフォーマンステスト
191+
3. エラーケースのテスト
192+
193+
## 注意事項
194+
195+
- Convex連携は実装しない(要件通り)
196+
- Grok APIのドキュメント確認が必要
197+
- APIキーの取得方法の確認が必要
198+
- レート制限の詳細確認が必要
199+
200+
## 今後の拡張可能性
201+
202+
- フィルタリング機能(カテゴリ別)
203+
- ソート機能(スコア順、日付順)
204+
- 詳細表示モーダル
205+
- お気に入り機能
206+
- エクスポート機能

0 commit comments

Comments
 (0)