← スキル一覧に戻る

caching
by TakumiOkayasu
dotfiles for work
⭐ 0🍴 0📅 2026年1月23日
SKILL.md
name: caching description: キャッシュ、Redis、キャッシュ無効化を実装する際に使用。
Caching
📋 実行前チェック(必須)
このスキルを使うべきか?
- キャッシュ戦略を検討する?
- Redisを導入する?
- パフォーマンス改善でキャッシュを検討する?
- キャッシュ無効化を実装する?
前提条件
- キャッシュが本当に必要か確認したか?(複雑さ増加)
- キャッシュ対象のデータ特性を把握しているか?
- TTL(有効期限)を検討したか?
- 無効化タイミングを明確にしたか?
禁止事項の確認
- 機密情報(パスワード、トークン)をキャッシュしようとしていないか?
- 無限TTLを設定しようとしていないか?
- キャッシュ無効化を忘れていないか?
- データ更新時のキャッシュ削除を考慮しているか?
トリガー
- キャッシュ戦略検討時
- Redis導入時
- パフォーマンス改善でキャッシュ検討時
- キャッシュ無効化の実装時
🚨 鉄則
キャッシュは複雑さを増す。本当に必要か確認。
キャッシュ戦略
Cache-Aside (Lazy Loading)
async function getData(key: string) {
// 1. キャッシュ確認
const cached = await cache.get(key);
if (cached) return cached;
// 2. DBから取得
const data = await db.find(key);
// 3. キャッシュに保存
await cache.set(key, data, { ttl: 3600 });
return data;
}
Write-Through
async function saveData(key: string, data: Data) {
// DB保存と同時にキャッシュ更新
await db.save(key, data);
await cache.set(key, data);
}
⚠️ キャッシュ無効化
// 更新時は必ず無効化
async function updateUser(id: string, data: UserUpdate) {
await db.users.update(id, data);
await cache.del(`user:${id}`); // ⚠️ 忘れずに
await cache.del(`user:${id}:profile`);
}
TTL設定
// データ特性に応じて設定
cache.set('static-config', data, { ttl: 86400 }); // 1日
cache.set('user-session', data, { ttl: 3600 }); // 1時間
cache.set('rate-limit', data, { ttl: 60 }); // 1分
Redis基本
import Redis from 'ioredis';
const redis = new Redis(process.env.REDIS_URL);
await redis.set('key', JSON.stringify(data), 'EX', 3600);
const data = JSON.parse(await redis.get('key') || 'null');
🚫 禁止事項まとめ
- 機密情報をキャッシュ(パスワード、トークン)
- 無限TTL(メモリリーク)
- キャッシュ無効化忘れ(古いデータ表示)
- 更新時のキャッシュ削除漏れ
スコア
総合スコア
50/100
リポジトリの品質指標に基づく評価
✓SKILL.md
SKILL.mdファイルが含まれている
+20
○LICENSE
ライセンスが設定されている
0/10
○説明文
100文字以上の説明がある
0/10
○人気
GitHub Stars 100以上
0/15
○最近の活動
3ヶ月以内に更新がある
0/10
○フォーク
10回以上フォークされている
0/5
✓Issue管理
オープンIssueが50未満
+5
✓言語
プログラミング言語が設定されている
+5
○タグ
1つ以上のタグが設定されている
0/5
レビュー
💬
レビュー機能は近日公開予定です