replit-architecture-variants
Replitの検証済みアーキテクチャブループリントを選択し、異なるスケールに対して実装できます。Replit統合の新規設計時、モノリシック/サービス/マイクロサービスアーキテクチャの選択、またはReplitアプリケーションのマイグレーションパス計画に使用します。「replit architecture」「replit blueprint」「how to structure replit」「replit project layout」「replit microservice」といったフレーズで発動します。
description の原文を見る
Choose and implement Replit validated architecture blueprints for different scales. Use when designing new Replit integrations, choosing between monolith/service/microservice architectures, or planning migration paths for Replit applications. Trigger with phrases like "replit architecture", "replit blueprint", "how to structure replit", "replit project layout", "replit microservice".
SKILL.md 本文
Replit アーキテクチャ バリアント
概要
Replit インテグレーション用の3つの検証済みアーキテクチャ ブループリント。
前提条件
- チームサイズとDAU要件の理解
- デプロイメント インフラストラクチャに関する知識
- SLA要件の明確化
- 成長予測の利用可能性
バリアント A: モノリス(シンプル)
最適な場合: MVP、小規模チーム、日次アクティブユーザー数 < 10K
my-app/
├── src/
│ ├── replit/
│ │ ├── client.ts # Singleton client
│ │ ├── types.ts # Types
│ │ └── middleware.ts # Express middleware
│ ├── routes/
│ │ └── api/
│ │ └── replit.ts # API routes
│ └── index.ts
├── tests/
│ └── replit.test.ts
└── package.json
主な特性
- 単一のデプロイメント ユニット
- リクエスト パス内での同期的な Replit 呼び出し
- インメモリ キャッシング
- シンプルなエラー ハンドリング
コード パターン
// ルート ハンドラー内での直接統合
app.post('/api/create', async (req, res) => {
try {
const result = await replitClient.create(req.body);
res.json(result);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
バリアント B: サービス レイヤー(中程度)
最適な場合: 成長段階のスタートアップ、10K~100K DAU、複数統合
my-app/
├── src/
│ ├── services/
│ │ ├── replit/
│ │ │ ├── client.ts # Client wrapper
│ │ │ ├── service.ts # Business logic
│ │ │ ├── repository.ts # Data access
│ │ │ └── types.ts
│ │ └── index.ts # Service exports
│ ├── controllers/
│ │ └── replit.ts
│ ├── routes/
│ ├── middleware/
│ ├── queue/
│ │ └── replit-processor.ts # Async processing
│ └── index.ts
├── config/
│ └── replit/
└── package.json
主な特性
- 関心の分離
- バックグラウンド ジョブ処理
- Redis キャッシング
- サーキット ブレーカー パターン
- 構造化されたエラー ハンドリング
コード パターン
// サービス レイヤー抽象化
class ReplitService {
constructor(
private client: ReplitClient,
private cache: CacheService,
private queue: QueueService
) {}
async createResource(data: CreateInput): Promise<Resource> {
// API 呼び出し前のビジネス ロジック
const validated = this.validate(data);
// キャッシュ確認
const cached = await this.cache.get(cacheKey);
if (cached) return cached;
// リトライ付き API 呼び出し
const result = await this.withRetry(() =>
this.client.create(validated)
);
// 結果をキャッシュ
await this.cache.set(cacheKey, result, 300);
// 非同期フォローアップ
await this.queue.enqueue('replit.post-create', result);
return result;
}
}
バリアント C: マイクロサービス(複雑)
最適な場合: エンタープライズ、100K以上 DAU、厳格な SLA
replit-service/ # 専用マイクロサービス
├── src/
│ ├── api/
│ │ ├── grpc/
│ │ │ └── replit.proto
│ │ └── rest/
│ │ └── routes.ts
│ ├── domain/
│ │ ├── entities/
│ │ ├── events/
│ │ └── services/
│ ├── infrastructure/
│ │ ├── replit/
│ │ │ ├── client.ts
│ │ │ ├── mapper.ts
│ │ │ └── circuit-breaker.ts
│ │ ├── cache/
│ │ ├── queue/
│ │ └── database/
│ └── index.ts
├── config/
├── k8s/
│ ├── deployment.yaml
│ ├── service.yaml
│ └── hpa.yaml
└── package.json
other-services/
├── order-service/ # Calls replit-service
├── payment-service/
└── notification-service/
主な特性
- 専用の Replit マイクロサービス
- 内部通信用 gRPC
- イベント駆動アーキテクチャ
- サービスごとのデータベース
- Kubernetes オートスケーリング
- 分散トレーシング
- サービスごとのサーキット ブレーカー
コード パターン
// ドメイン分離を備えたイベント駆動
class ReplitAggregate {
private events: DomainEvent[] = [];
process(command: ReplitCommand): void {
// ドメイン ロジック
const result = this.execute(command);
// ドメイン イベント発行
this.events.push(new ReplitProcessedEvent(result));
}
getUncommittedEvents(): DomainEvent[] {
return [...this.events];
}
}
// イベント ハンドラー
@EventHandler(ReplitProcessedEvent)
class ReplitEventHandler {
async handle(event: ReplitProcessedEvent): Promise<void> {
// サガ オーケストレーション
await this.sagaOrchestrator.continue(event);
}
}
判定マトリックス
| 要素 | モノリス | サービス レイヤー | マイクロサービス |
|---|---|---|---|
| チームサイズ | 1~5 | 5~20 | 20+ |
| DAU | < 10K | 10K~100K | 100K+ |
| デプロイメント頻度 | 週単位 | 日単位 | 継続的 |
| 障害の分離 | なし | 部分的 | 完全 |
| 運用の複雑性 | 低 | 中程度 | 高 |
| 市場投入までの時間 | 最速 | 中程度 | 最遅 |
マイグレーション パス
モノリス → サービス レイヤー:
1. Replit コードを service/ に抽出
2. キャッシング レイヤーを追加
3. バックグラウンド処理を追加
サービス レイヤー → マイクロサービス:
1. 専用 replit-service リポジトリを作成
2. gRPC コントラクトを定義
3. イベント バスを追加
4. Kubernetes にデプロイ
5. トラフィックを段階的にマイグレーション
手順
ステップ 1: 要件を評価する
判定マトリックスを使用して、適切なバリアントを特定します。
ステップ 2: アーキテクチャを選択する
ニーズに基づいてモノリス、サービス レイヤー、またはマイクロサービスを選択します。
ステップ 3: 構造を実装する
選択したブループリントに従ってプロジェクト レイアウトをセットアップします。
ステップ 4: マイグレーション パスを計画する
将来のスケーリングに向けたアップグレード パスを文書化します。
出力
- 選択されたアーキテクチャ バリアント
- 実装されたプロジェクト構造
- 文書化されたマイグレーション パス
- 適用された適切なパターン
エラー ハンドリング
| 問題 | 原因 | 解決策 |
|---|---|---|
| 過度な設計 | バリアント選択の誤り | よりシンプルに始める |
| パフォーマンス問題 | レイヤーの誤り | キャッシング/非同期を追加 |
| チーム間の摩擦 | 複雑なアーキテクチャ | シンプル化またはトレーニング |
| デプロイメント複雑性 | マイクロサービス オーバーヘッド | サービス レイヤーを検討 |
例
クイック バリアント チェック
# チームサイズと DAU をカウントしてバリアントを選択
echo "Team: $(git log --format='%ae' | sort -u | wc -l) developers"
echo "DAU: Check analytics dashboard"
リソース
次のステップ
一般的なアンチパターンについては、replit-known-pitfalls を参照してください。
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- Brmbobo
- リポジトリ
- Brmbobo/Web2podcast
- ライセンス
- MIT
- 最終更新
- 2026/1/26
Source: https://github.com/Brmbobo/Web2podcast / ライセンス: MIT
関連スキル
doubt-driven-development
重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。
apprun-skills
TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。
desloppify
コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。
debugging-and-error-recovery
テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。
test-driven-development
テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。
incremental-implementation
変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。