mcpField
V
vercel-cost-tuning

vercel-cost-tuning

github.com/jeremylongshoreクラウド・DevOps2.9k37 回インストール2 日前に更新
リポジトリ

vercel-cost-tuning について

Vercel のコスト分析と調整を支援するスキルです。Fluid Compute の課金、関数実行、キャッシュ、帯域幅、ミドルウェア、支出管理を扱い、利用状況と設定変更による費用管理に役立ちます。

主な機能

  1. 01Fluid Compute 課金の分析
  2. 02主なコスト要因の特定
  3. 03関数メモリと実行の調整
  4. 04キャッシュとミドルウェア範囲の設定
  5. 05予算と支出アラートの設定
  6. 06API による使用量の監視

活用シーン

  1. 01Vercel 請求額の急増調査
  2. 02高トラフィックなエンドポイントの関数呼び出し削減
  3. 03静的アセットのキャッシュ方針調整
  4. 04予算上限と使用量アラートの設定

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/jeremylongshore/tons-of-skills-marketplace --skill vercel-cost-tuning

インストール後、Claude Code で/vercel-cost-tuningを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
cost-estimation.md
cost-reduction-strategies.md
errors.md
examples.md

詳細

Vercel のコスト調整

概要

Fluid Compute の料金モデルを理解し、関数の実行時間を短縮し、エッジキャッシュを活用して関数の呼び出しを回避し、支出管理を設定することで、Vercel のコストを最適化します。プランの比較、コスト要因、監視について説明します。

前提条件

  • Vercel の請求ダッシュボードにアクセスできること
  • 現在のデプロイアーキテクチャを理解していること
  • 使用状況の傾向を把握するために Vercel Analytics にアクセスできること

手順

ステップ 1:料金モデルを理解する

Vercel は、新規プロジェクトに Fluid Compute の料金モデルを使用します。

リソースHobby(無料)Pro($20/メンバー/月)Enterprise
帯域幅100 GB1 TB を含むカスタム
サーバーレス実行100 GB-hrs1000 GB-hrs を含むカスタム
Edge Function の呼び出し500K1M を含むカスタム
Edge Middleware の呼び出し1M1M を含むカスタム
画像の最適化10005000 を含むカスタム
1 日あたりのビルド数60006000カスタム
同時ビルド数11(追加可能)カスタム

Fluid Compute の請求内訳:

  • アクティブ CPU 時間:実際の CPU 使用量に対して 1 ミリ秒単位で課金されます
  • 割り当てメモリ:割り当てられたメモリの 1 GB 秒単位で課金されます
  • メリット:アイドル状態での待機時間(例:データベースの応答待ち)ではなく、実際の処理に対して課金されます
ステップ 2:コスト要因を特定する
# Check usage via API
curl -s -H "Authorization: Bearer $VERCEL_TOKEN" \
  "https://api.vercel.com/v2/usage" | jq .

# Top cost drivers on Vercel:
# 1. Serverless function execution time (CPU + memory)
# 2. Bandwidth (large responses, unoptimized images)
# 3. Edge Middleware invocations (runs on EVERY request)
# 4. Image optimizations (each unique transform costs)
# 5. Build minutes (frequent deploys or slow builds)
ステップ 3:関数の実行コストを削減する
// 1. Right-size function memory — don't over-allocate
// vercel.json
{
  "functions": {
    "api/lightweight.ts": { "memory": 128 },    // Simple JSON responses
    "api/standard.ts": { "memory": 512 },       // Database queries
    "api/heavy.ts": { "memory": 1024 }          // Image processing
  }
}

// 2. Move read-only endpoints to Edge Functions (cheaper, no cold starts)
// api/config.ts
export const config = { runtime: 'edge' };
export default function handler() {
  return Response.json({ features: ['a', 'b'] });
}

// 3. Cache function responses at the edge
// Eliminates function invocations entirely for cached routes
export default function handler(req, res) {
  res.setHeader('Cache-Control', 's-maxage=3600, stale-while-revalidate=86400');
  res.json(data);
}
ステップ 4:帯域幅コストを削減する
// vercel.json — compress and cache aggressively
{
  "headers": [
    {
      "source": "/static/(.*)",
      "headers": [
        { "key": "Cache-Control", "value": "public, max-age=31536000, immutable" }
      ]
    }
  ],
  "images": {
    "sizes": [640, 750, 1080],
    "formats": ["image/avif", "image/webp"],
    "minimumCacheTTL": 86400
  }
}

帯域幅の削減に効果的な方法:

  • Vercel の画像最適化を使用します(WebP/AVIF への自動変換)
  • 静的アセットに積極的なキャッシュヘッダーを設定します
  • SSR の代わりに ISR を使用して、静的 HTML を配信します
  • API レスポンスを圧縮します(Vercel は Brotli で自動圧縮します)
ステップ 5:ミドルウェアのコストを最適化する

ミドルウェアは一致するすべてのリクエストで実行されます。適用範囲を最小限にします。

// middleware.ts — scope to specific paths only
export const config = {
  matcher: [
    // Only run middleware on API routes and protected pages
    '/api/:path*',
    '/dashboard/:path*',
    // Skip static files, images, and public assets
    '/((?!_next/static|_next/image|favicon.ico|public).*)',
  ],
};

export function middleware(request) {
  // Keep logic minimal — this runs on every matched request
  // Avoid: database queries, external API calls, heavy computation
  // Good: cookie checks, header modifications, redirects
}
ステップ 6:支出管理を設定する

Vercel ダッシュボードの Settings > Billing > Spend Management で設定します。

Default budget: $200/month on-demand usage
Options:
- Set custom budget limit
- Enable hard limit (pauses all projects when reached)
- Configure email alerts at 50%, 75%, 90%, 100%
# Check current usage against budget via API
curl -s -H "Authorization: Bearer $VERCEL_TOKEN" \
  "https://api.vercel.com/v2/usage?teamId=team_xxx" \
  | jq '{period: .period, bandwidth: .bandwidth, execution: .serverlessFunctionExecution}'

コスト最適化チェックリスト

アクション効果工数
s-maxage キャッシュヘッダーを追加する高 — 関数の呼び出しをなくします低
シンプルなエンドポイントに Edge Functions を使用する中 — サーバーレスより低コストです低
関数のメモリを適正化する中 — GB-hr コストを削減します低
ミドルウェアの matcher の適用範囲を設定する中 — エッジでの呼び出しを削減します低
画像最適化を有効にする中 — 帯域幅を削減します低
SSR の代わりに ISR を使用する高 — キャッシュ済みの HTML を配信します中
ビルド速度を最適化する低 — ビルド時間を削減します中
支出管理アラートを設定する安全対策 — 予期しない請求を防ぎます低

出力

  • エンドポイントごとに関数のメモリを適正化
  • エッジキャッシュにより関数の呼び出しを削減
  • 呼び出しを最小限にするため、ミドルウェアの適用範囲を設定
  • 予算アラートを設定して支出管理を構成
  • API を使用した使用状況の監視

エラー処理

エラー原因解決策
請求額が予想外に急増するトラフィックの多いエンドポイントがキャッシュされていないレスポンスに s-maxage を追加します
プロジェクトが一時停止される支出上限に達した上限を引き上げるか、使用量を最適化します
画像最適化の割り当てを超過する固有の画像変換が多すぎるsizes 配列を縮小し、キャッシュ TTL を延長します
ビルド時間を超過するビルドが遅い、またはデプロイが多すぎるignoreCommand を使用して、コード以外の変更をスキップします

例

ロールバックを測定可能にして、呼び出しの急増を抑える

トラフィックの多い読み取りエンドポイントでは、プレビュー環境で保守的な s-maxage レスポンスポリシーを追加し、合成リクエストを使って、以前のリリースと呼び出し回数、キャッシュヒット率、レスポンスの正確性を比較します。ロールアウト前に支出アラートを設定し、オーナーが影響範囲を受け入れない限り、アカウント全体に適用されるハード停止は避けてください。個人向けコンテンツが誤ってキャッシュされた場合は、直ちにヘッダーの変更をロールバックし、対応している場合は影響を受けたデプロイのキャッシュのみをパージして、デグレードを記録します。

リソース

次のステップ

リファレンスアーキテクチャについては、vercel-reference-architecture を参照してください。

コメント