データベース接続管理の専門スキル。 サーバーレス環境での接続管理、Tursoの接続管理とEmbedded Replicas、 高負荷時の接続最適化を専門とします。 専門分野: - 接続管理設計: 環境に応じた最適な接続設定 - サーバーレス対応: TursoでのlibSQL接続管理とEmbedded Replicas - Drizzle ORM統合: DrizzleでのlibSQL接続設定 - 障害対策: 接続エラーハンドリングとリトライ - 監視: 接続状態の監視とアラート 使用タイミング: - 新規プロジェクトでDB接続を設定する時 - 接続設定のサイジングを決める時 - サーバーレス環境での接続問題を解決する時 - 接続エラーが頻発する時 - 高負荷時の接続最適化が必要な時 Use proactively when setting up database connections, troubleshooting connection issues, or optimizing for serverless. 📚 リソース参照: このスキルには以下のリソースが含まれていま...
Scanned 2/12/2026
Install via CLI
openskills install majiayu000/claude-skill-registry---
name: .claude/skills/connection-pooling/SKILL.md
description: |
データベース接続管理の専門スキル。
サーバーレス環境での接続管理、Tursoの接続管理とEmbedded Replicas、
高負荷時の接続最適化を専門とします。
専門分野:
- 接続管理設計: 環境に応じた最適な接続設定
- サーバーレス対応: TursoでのlibSQL接続管理とEmbedded Replicas
- Drizzle ORM統合: DrizzleでのlibSQL接続設定
- 障害対策: 接続エラーハンドリングとリトライ
- 監視: 接続状態の監視とアラート
使用タイミング:
- 新規プロジェクトでDB接続を設定する時
- 接続設定のサイジングを決める時
- サーバーレス環境での接続問題を解決する時
- 接続エラーが頻発する時
- 高負荷時の接続最適化が必要な時
Use proactively when setting up database connections,
troubleshooting connection issues, or optimizing for serverless.
📚 リソース参照:
このスキルには以下のリソースが含まれています。
必要に応じて該当するリソースを参照してください:
- `.claude/skills/connection-pooling/resources/error-handling.md`: 接続エラーのハンドリングとリトライ戦略
- `.claude/skills/connection-pooling/resources/pool-sizing-guide.md`: 環境別プールサイズ設定と計算式
- `.claude/skills/connection-pooling/resources/serverless-connections.md`: TursoでのサーバーレスlibSQL接続管理
- `.claude/skills/connection-pooling/templates/drizzle-config-template.ts`: Drizzle ORM接続設定テンプレート
- `.claude/skills/connection-pooling/scripts/check-connections.mjs`: 接続状態の確認と診断スクリプト
version: 1.0.0
---
# Connection Pooling
## 概要
このスキルは、データベース接続管理の設計と実装に関する
知識を提供します。特にサーバーレス環境(Turso)での
libSQL接続管理とEmbedded Replicasに焦点を当てています。
**主要な価値**:
- サーバーレス環境での安定した接続
- Embedded Replicasによるローカル↔クラウド同期
- 高負荷時のパフォーマンス維持
- 接続リソースの効率的な利用
**対象ユーザー**:
- `.claude/agents/dba-mgr.md`エージェント
- バックエンド開発者
- DevOpsエンジニア
- SREチーム
## リソース構造
```
connection-pooling/
├── SKILL.md # 本ファイル
├── resources/
│ ├── pool-sizing-guide.md # プールサイジング
│ ├── serverless-connections.md # サーバーレス接続
│ └── error-handling.md # エラーハンドリング
├── scripts/
│ └── check-connections.mjs # 接続状態確認
└── templates/
└── drizzle-config-template.ts # Drizzle設定テンプレート
```
## コマンドリファレンス
### リソース読み取り
```bash
# プールサイジング
cat .claude/skills/connection-pooling/resources/pool-sizing-guide.md
# サーバーレス接続
cat .claude/skills/connection-pooling/resources/serverless-connections.md
# エラーハンドリング
cat .claude/skills/connection-pooling/resources/error-handling.md
```
### スクリプト実行
```bash
# 接続状態確認
node .claude/skills/connection-pooling/scripts/check-connections.mjs
```
## いつ使うか
### シナリオ1: 新規プロジェクトセットアップ
**状況**: 新しいプロジェクトでDB接続を設定する
**適用条件**:
- [ ] データベースサービスが決定済み
- [ ] 想定負荷が見積もられている
- [ ] 実行環境が決まっている
**期待される成果**: 最適な接続プール設定
### シナリオ2: 接続エラーの解決
**状況**: 「too many connections」などのエラーが発生
**適用条件**:
- [ ] エラーの発生パターンが把握できている
- [ ] 現在の設定が確認できる
- [ ] 接続数の監視ができる
**期待される成果**: 安定した接続設定
### シナリオ3: サーバーレス移行
**状況**: サーバーレス環境への移行で接続管理を見直す
**適用条件**:
- [ ] サーバーレスプラットフォームが決定
- [ ] 接続パターンが理解されている
- [ ] Embedded Replicasの使用を検討している
**期待される成果**: サーバーレス対応の接続設定
## ワークフロー
### Phase 1: 要件分析
**目的**: 接続要件を明確化する
**ステップ**:
1. **環境の確認**:
- サーバーレス vs 常駐サーバー
- Turso Cloud / Embedded Replicas / Self-hosted
- ワーカー数・インスタンス数
2. **負荷の見積もり**:
- 同時リクエスト数
- クエリの実行時間
- ピーク時の負荷
**判断基準**:
- [ ] 実行環境が明確か?
- [ ] 負荷の見積もりがあるか?
- [ ] Embedded Replicasの使用を検討したか?
**リソース**: `resources/serverless-connections.md`
### Phase 2: 接続設計
**目的**: 適切な接続設定を決定する
**ステップ**:
1. **接続設定の実装**:
```typescript
// Turso接続設定
const config = {
url: process.env.TURSO_DATABASE_URL,
authToken: process.env.TURSO_AUTH_TOKEN,
};
```
2. **Embedded Replicas設定**:
```typescript
const client = createClient({
url: "file:local.db", // ローカルレプリカ
syncUrl: process.env.TURSO_DATABASE_URL,
authToken: process.env.TURSO_AUTH_TOKEN,
syncInterval: 60, // 60秒ごとに同期
});
```
**判断基準**:
- [ ] 接続URLとトークンは設定されているか?
- [ ] Embedded Replicasの使用を検討したか?
- [ ] 同期間隔は適切か?
- [ ] リトライ設定があるか?
**リソース**: `resources/pool-sizing-guide.md`
### Phase 3: エラーハンドリング
**目的**: 接続エラーに対する回復力を確保する
**ステップ**:
1. **リトライ戦略**:
- 指数バックオフ
- 最大リトライ回数
- リトライ可能なエラーの定義
2. **サーキットブレーカー**:
- 連続失敗時のオープン
- 回復試行間隔
- 半開状態の管理
**判断基準**:
- [ ] リトライ戦略が実装されているか?
- [ ] タイムアウトが設定されているか?
- [ ] エラーログが記録されるか?
**リソース**: `resources/error-handling.md`
### Phase 4: 監視
**目的**: 接続状態を継続的に監視する
**ステップ**:
1. **メトリクスの収集**:
- アクティブ接続数
- 待機中の接続
- 接続エラー率
2. **アラート設定**:
- 接続枯渇の警告
- エラー率の閾値
- レイテンシの監視
**判断基準**:
- [ ] 接続数の監視があるか?
- [ ] アラートが設定されているか?
- [ ] ダッシュボードがあるか?
## 核心概念
### 接続プールの基本
```
アプリケーション
│
├── リクエスト1 ──→ [接続1]
├── リクエスト2 ──→ [接続2] ←── 接続プール
├── リクエスト3 ──→ [接続3] (再利用)
└── リクエスト4 ──→ [待機...]
│
▼
データベース
```
### プールモード
| モード | 説明 | 用途 |
| ----------- | ------------------------------ | -------------------- |
| Session | 接続をセッション全体で保持 | 長いトランザクション |
| Transaction | トランザクション単位で割り当て | 一般的なWeb |
| Statement | ステートメント単位で割り当て | 高速なクエリ |
### サーバーレス特有の課題
```
Lambda/Edge Function
│
├── コールドスタート → 新規接続
│ (オーバーヘッド)
├── ウォームスタート → 既存接続再利用
│ (高速)
└── スケールアウト → 接続爆発のリスク
(プーラーで制御)
```
## ベストプラクティス
### すべきこと
1. **適切な接続方式を選択する**:
- Turso Cloud: HTTPSベースの接続
- Embedded Replicas: ローカルファイル + クラウド同期
- Self-hosted: libSQL Server
2. **接続を適切にリリースする**:
```typescript
try {
const result = await client.execute("SELECT * FROM users");
return result;
} finally {
// libSQLクライアントは自動的に接続を管理
// Embedded Replicasの場合は定期的に同期
}
```
3. **同期設定を最適化する**:
```typescript
const config = {
syncInterval: 60, // 同期間隔(秒)
syncOnWrite: true, // 書き込み時に同期
readYourWrites: true, // 自分の書き込みを即座に読み取り
};
```
### 避けるべきこと
1. **接続のリーク**:
- ❌ 接続を閉じ忘れる
- ✅ try-finallyで確実にリリース
2. **不適切な同期設定**:
- ❌ 同期間隔が短すぎる(ネットワーク負荷)
- ✅ アプリケーション要件に応じた適切な間隔
3. **Embedded Replicasの未活用**:
- ❌ サーバーレス環境で常にリモート接続
- ✅ Embedded Replicasでローカル読み取り + クラウド同期
## トラブルシューティング
### 問題1: 同期エラー
**症状**: Embedded Replicasの同期が失敗
**原因**:
- ネットワーク接続の問題
- 認証トークンの期限切れ
- 同期URLの設定ミス
**解決策**:
```typescript
// 同期状態の確認
const syncStatus = await client.sync();
console.log("Sync completed:", syncStatus);
// 手動で強制同期
await client.sync();
// 同期エラーのハンドリング
client.on("sync-error", (error) => {
console.error("Sync failed:", error);
// リトライロジック
});
```
### 問題2: 接続タイムアウト
**症状**: Tursoへの接続がタイムアウト
**原因**:
- ネットワーク遅延
- 認証トークンの問題
- リージョンが遠い
**解決策**:
```typescript
// Embedded Replicasを使用してローカル接続
const client = createClient({
url: "file:local.db",
syncUrl: process.env.TURSO_DATABASE_URL,
authToken: process.env.TURSO_AUTH_TOKEN,
});
// リトライ戦略
const retryConfig = {
retries: 3,
factor: 2,
minTimeout: 1000,
maxTimeout: 5000,
};
```
### 問題3: コールドスタートの遅延
**症状**: Lambda/Edgeの初回リクエストが遅い
**原因**:
- リモートDB接続の確立
- HTTPS通信のオーバーヘッド
- 認証処理
**解決策**:
- Embedded Replicasの使用(ローカルファイルアクセス)
- Provisioned Concurrencyの使用
- クライアントインスタンスのキャッシング
## 関連スキル
- **.claude/skills/query-performance-tuning/SKILL.md** (`.claude/skills/query-performance-tuning/SKILL.md`): クエリ最適化
- **.claude/skills/backup-recovery/SKILL.md** (`.claude/skills/backup-recovery/SKILL.md`): バックアップ戦略
## メトリクス
### 接続プール健全性指標
| 指標 | 目標値 | 警告値 |
| -------------- | ------- | ------- |
| 接続使用率 | < 80% | > 90% |
| 待機リクエスト | 0 | > 10 |
| 接続エラー率 | < 0.1% | > 1% |
| 平均接続時間 | < 100ms | > 500ms |
## 変更履歴
| バージョン | 日付 | 変更内容 |
| ---------- | ---------- | ------------------------- |
| 1.0.0 | 2025-11-27 | 初版作成 - 接続プール管理 |
## 参考文献
- **Turso Documentation**: https://docs.turso.tech/
- **libSQL**: https://github.com/tursodatabase/libsql
- **Embedded Replicas**: https://docs.turso.tech/features/embedded-replicas
No comments yet. Be the first to comment!