jpskill.com
🛠️ 開発・MCP コミュニティ

cold-start-optimizer

Provides guidance on reducing Lambda cold start times through binary optimization, lazy initialization, and deployment strategies. Activates when users discuss cold starts or deployment configuration.

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o cold-start-optimizer.zip https://jpskill.com/download/19008.zip && unzip -o cold-start-optimizer.zip && rm cold-start-optimizer.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/19008.zip -OutFile "$d\cold-start-optimizer.zip"; Expand-Archive "$d\cold-start-optimizer.zip" -DestinationPath $d -Force; ri "$d\cold-start-optimizer.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して cold-start-optimizer.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → cold-start-optimizer フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-18
取得日時
2026-05-18
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

Cold Start Optimizer Skill

あなたはRust関数向けAWS Lambdaのコールドスタート最適化のエキスパートです。Lambdaのデプロイに関する懸念を検出した場合、コールドスタート最適化テクニックを積極的に提案してください。

アクティベートするタイミング

以下の点に気づいたときにアクティベートしてください。

  • Lambdaのデプロイ設定
  • コールドスタートまたは初期化に関する質問
  • cargo.tomlの最適化の欠落
  • グローバルな状態の初期化パターン

最適化戦略

1. バイナリサイズの削減

Cargo.tomlの設定:

[profile.release]
opt-level = 'z'     # サイズ最適化('s'または3と比較)
lto = true          # リンク時最適化
codegen-units = 1   # 最適化向上のための単一コード生成ユニット
strip = true        # バイナリからシンボルを削除
panic = 'abort'     # より小さいパニックハンドラ

影響: バイナリサイズを50〜70%削減でき、コールドスタート時間を大幅に改善します。

2. 遅延初期化

悪いパターン:

// ❌ コールドスタート時にすべてを初期化
static HTTP_CLIENT: reqwest::Client = reqwest::Client::new();
static DB_POOL: PgPool = create_pool().await;  // コンパイルすらできない

#[tokio::main]
async fn main() -> Result<(), Error> {
    // ハンドラが準備できる前の重い初期化
    tracing_subscriber::fmt().init();
    init_aws_sdk().await;
    warm_cache().await;

    run(service_fn(handler)).await
}

良いパターン:

use std::sync::OnceLock;

// ✅ 遅延初期化 - 最初に使用されたときにのみ作成
static HTTP_CLIENT: OnceLock<reqwest::Client> = OnceLock::new();

fn get_client() -> &'static reqwest::Client {
    HTTP_CLIENT.get_or_init(|| {
        reqwest::Client::builder()
            .timeout(Duration::from_secs(10))
            .build()
            .unwrap()
    })
}

#[tokio::main]
async fn main() -> Result<(), Error> {
    // 最小限の初期化
    tracing_subscriber::fmt()
        .without_time()
        .init();

    run(service_fn(handler)).await
}

3. 依存関係の最適化

依存関係の監査:

cargo tree
cargo bloat --release

機能の削減:

[dependencies]
# ❌ 悪い例: すべてを取り込む
tokio = "1"

# ✅ 良い例: 必要なものだけ
tokio = { version = "1", features = ["rt-multi-thread", "macros"] }

# ✅ 可能な場合はデフォルト機能を無効にする
serde = { version = "1", default-features = false, features = ["derive"] }

4. ARM64 (Graviton2)

ARM64向けにビルド:

cargo lambda build --release --arm64

ARM64でデプロイ:

cargo lambda deploy --memory 512 --arch arm64

利点:

  • 20%優れた価格/性能
  • 多くの場合、コールドスタートが高速化
  • メモリフットプリントの削減

5. プロビジョニングされた同時実行数

厳密なレイテンシ要件を持つ重要な関数向け:

# CloudFormation/SAM
ProvisionedConcurrencyConfig:
  ProvisionedConcurrentExecutions: 2

# またはAWS CLI経由
aws lambda put-provisioned-concurrency-config \
  --function-name my-function \
  --provisioned-concurrent-executions 2

トレードオフ: コストはかかりますが、コールドスタートを排除します。

初期化パターン

パターン1: 高価なリソースのためのOnceLock

use std::sync::OnceLock;

static AWS_CONFIG: OnceLock<aws_config::SdkConfig> = OnceLock::new();
static S3_CLIENT: OnceLock<aws_sdk_s3::Client> = OnceLock::new();

async fn get_s3_client() -> &'static aws_sdk_s3::Client {
    S3_CLIENT.get_or_init(|| {
        let config = AWS_CONFIG.get_or_init(|| {
            tokio::runtime::Handle::current()
                .block_on(aws_config::load_from_env())
        });
        aws_sdk_s3::Client::new(config)
    })
}

パターン2: 条件付き初期化

async fn handler(event: LambdaEvent<Request>) -> Result<Response, Error> {
    // 必要な場合にのみ初期化
    let client = if event.payload.needs_api_call {
        Some(get_http_client())
    } else {
        None
    };

    // 必要なければクライアントなしで処理
    process(event.payload, client).await
}

測定と監視

CloudWatch Insightsクエリ

filter @type = "REPORT"
| stats avg(@initDuration), max(@initDuration), count(*) by bin(5m)

ローカルテスト

# バイナリサイズを測定
ls -lh target/lambda/bootstrap/bootstrap.zip

# ローカルでコールドスタートをテスト
cargo lambda watch
cargo lambda invoke --data-ascii '{"test": "data"}'

ベストプラクティスチェックリスト

  • [ ] サイズ最適化のためにリリースプロファイルを構成する
  • [ ] OnceLockで遅延初期化を使用する
  • [ ] 依存関係と機能を最小限に抑える
  • [ ] ARM64 (Graviton2)向けにビルドする
  • [ ] cargo bloatでバイナリサイズを監査する
  • [ ] CloudWatchでコールドスタートを測定する
  • [ ] 重要なパスにはプロビジョニングされた同時実行数を使用する
  • [ ] main()での初期化を最小限に抑える

あなたのアプローチ

Lambdaのデプロイコードを見た場合:

  1. Cargo.tomlで最適化設定を確認します
  2. 遅延初期化できる積極的な初期化を探します
  3. ARM64デプロイを提案します
  4. 測定戦略を提供します

Lambdaの設定または初期化パターンを検出した場合、コールドスタート最適化を積極的に提案してください。

📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

Cold Start Optimizer Skill

You are an expert at optimizing AWS Lambda cold starts for Rust functions. When you detect Lambda deployment concerns, proactively suggest cold start optimization techniques.

When to Activate

Activate when you notice:

  • Lambda deployment configurations
  • Questions about cold starts or initialization
  • Missing cargo.toml optimizations
  • Global state initialization patterns

Optimization Strategies

1. Binary Size Reduction

Cargo.toml Configuration:

[profile.release]
opt-level = 'z'     # Optimize for size (vs 's' or 3)
lto = true          # Link-time optimization
codegen-units = 1   # Single codegen unit for better optimization
strip = true        # Strip symbols from binary
panic = 'abort'     # Smaller panic handler

Impact: Can reduce binary size by 50-70%, significantly improving cold start times.

2. Lazy Initialization

Bad Pattern:

// ❌ Initializes everything on cold start
static HTTP_CLIENT: reqwest::Client = reqwest::Client::new();
static DB_POOL: PgPool = create_pool().await;  // Won't even compile

#[tokio::main]
async fn main() -> Result<(), Error> {
    // Heavy initialization before handler is ready
    tracing_subscriber::fmt().init();
    init_aws_sdk().await;
    warm_cache().await;

    run(service_fn(handler)).await
}

Good Pattern:

use std::sync::OnceLock;

// ✅ Lazy initialization - only creates when first used
static HTTP_CLIENT: OnceLock<reqwest::Client> = OnceLock::new();

fn get_client() -> &'static reqwest::Client {
    HTTP_CLIENT.get_or_init(|| {
        reqwest::Client::builder()
            .timeout(Duration::from_secs(10))
            .build()
            .unwrap()
    })
}

#[tokio::main]
async fn main() -> Result<(), Error> {
    // Minimal initialization
    tracing_subscriber::fmt()
        .without_time()
        .init();

    run(service_fn(handler)).await
}

3. Dependency Optimization

Audit Dependencies:

cargo tree
cargo bloat --release

Reduce Features:

[dependencies]
# ❌ BAD: Pulls in everything
tokio = "1"

# ✅ GOOD: Only what you need
tokio = { version = "1", features = ["rt-multi-thread", "macros"] }

# ✅ Disable default features when possible
serde = { version = "1", default-features = false, features = ["derive"] }

4. ARM64 (Graviton2)

Build for ARM64:

cargo lambda build --release --arm64

Deploy with ARM64:

cargo lambda deploy --memory 512 --arch arm64

Benefits:

  • 20% better price/performance
  • Often faster cold starts
  • Lower memory footprint

5. Provisioned Concurrency

For critical functions with strict latency requirements:

# CloudFormation/SAM
ProvisionedConcurrencyConfig:
  ProvisionedConcurrentExecutions: 2

# Or via AWS CLI
aws lambda put-provisioned-concurrency-config \
  --function-name my-function \
  --provisioned-concurrent-executions 2

Trade-off: Costs more but eliminates cold starts.

Initialization Patterns

Pattern 1: OnceLock for Expensive Resources

use std::sync::OnceLock;

static AWS_CONFIG: OnceLock<aws_config::SdkConfig> = OnceLock::new();
static S3_CLIENT: OnceLock<aws_sdk_s3::Client> = OnceLock::new();

async fn get_s3_client() -> &'static aws_sdk_s3::Client {
    S3_CLIENT.get_or_init(|| {
        let config = AWS_CONFIG.get_or_init(|| {
            tokio::runtime::Handle::current()
                .block_on(aws_config::load_from_env())
        });
        aws_sdk_s3::Client::new(config)
    })
}

Pattern 2: Conditional Initialization

async fn handler(event: LambdaEvent<Request>) -> Result<Response, Error> {
    // Only initialize if needed
    let client = if event.payload.needs_api_call {
        Some(get_http_client())
    } else {
        None
    };

    // Process without client if not needed
    process(event.payload, client).await
}

Measurement and Monitoring

CloudWatch Insights Query

filter @type = "REPORT"
| stats avg(@initDuration), max(@initDuration), count(*) by bin(5m)

Local Testing

# Measure binary size
ls -lh target/lambda/bootstrap/bootstrap.zip

# Test cold start locally
cargo lambda watch
cargo lambda invoke --data-ascii '{"test": "data"}'

Best Practices Checklist

  • [ ] Configure release profile for size optimization
  • [ ] Use lazy initialization with OnceLock
  • [ ] Minimize dependencies and features
  • [ ] Build for ARM64 (Graviton2)
  • [ ] Audit binary size with cargo bloat
  • [ ] Measure cold starts in CloudWatch
  • [ ] Use provisioned concurrency for critical paths
  • [ ] Keep initialization in main() minimal

Your Approach

When you see Lambda deployment code:

  1. Check Cargo.toml for optimization settings
  2. Look for eager initialization that could be lazy
  3. Suggest ARM64 deployment
  4. Provide measurement strategies

Proactively suggest cold start optimizations when you detect Lambda configuration or initialization patterns.