mcpField
C
caching-strategy-optimizer

caching-strategy-optimizer

github.com/patricio0312revクラウド・DevOps63260 回インストール41 週間前に更新
リポジトリ

caching-strategy-optimizer について

依存関係のインストール、ビルド、Dockerレイヤー、テストを対象に、CIキャッシュを計画するスキルです。キャッシュキーや復元キーの指針に加え、ヒット率の監視と導入前後の指標確認項目を示します。

主な機能

  1. 01パッケージマネージャーのキャッシュ設定
  2. 02Dockerレイヤーとビルド成果物のキャッシュ
  3. 03テスト結果のキャッシュ
  4. 04キャッシュキーと復元キーの指針
  5. 05ヒット率の監視と指標

活用シーン

  1. 01CIでの依存関係の再インストール削減
  2. 02Dockerビルドとアプリ成果物のキャッシュ
  3. 03パイプライン実行ごとのキャッシュ効果の把握

インストール

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

$npx skills add https://github.com/patricio0312rev/skills --skill caching-strategy-optimizer

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

詳細

キャッシュ戦略オプティマイザー

インテリジェントなキャッシュで CI パイプラインを大幅に高速化します。

キャッシュキー戦略

パッケージマネージャーのキャッシュ
# NPM - Hash package-lock.json
- uses: actions/cache@v3
  with:
    path: ~/.npm
    key: ${{ runner.os }}-npm-${{ hashFiles('**/package-lock.json') }}
    restore-keys: |
      ${{ runner.os }}-npm-

# pnpm - More aggressive caching
- uses: pnpm/action-setup@v2
  with:
    version: 8

- uses: actions/cache@v3
  with:
    path: |
      ~/.pnpm-store
      node_modules
    key: ${{ runner.os }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }}
    restore-keys: |
      ${{ runner.os }}-pnpm-

# Python pip
- uses: actions/cache@v3
  with:
    path: ~/.cache/pip
    key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}

# Cargo/Rust
- uses: actions/cache@v3
  with:
    path: |
      ~/.cargo/bin/
      ~/.cargo/registry/index/
      ~/.cargo/registry/cache/
      ~/.cargo/git/db/
      target/
    key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}

Docker レイヤーキャッシュ

Buildx の使用
- name: Set up Docker Buildx
  uses: docker/setup-buildx-action@v3

- name: Build with cache
  uses: docker/build-push-action@v5
  with:
    context: .
    cache-from: type=gha
    cache-to: type=gha,mode=max
レジストリベースのキャッシュ
- name: Build with registry cache
  uses: docker/build-push-action@v5
  with:
    context: .
    cache-from: type=registry,ref=myapp:buildcache
    cache-to: type=registry,ref=myapp:buildcache,mode=max

ビルド出力のキャッシュ

# Next.js cache
- uses: actions/cache@v3
  with:
    path: |
      ${{ github.workspace }}/.next/cache
    key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-${{ hashFiles('**/*.js', '**/*.jsx', '**/*.ts', '**/*.tsx') }}
    restore-keys: |
      ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-
      ${{ runner.os }}-nextjs-

# Webpack cache
- uses: actions/cache@v3
  with:
    path: node_modules/.cache/webpack
    key: ${{ runner.os }}-webpack-${{ hashFiles('webpack.config.js') }}-${{ hashFiles('src/**') }}

# TypeScript build cache
- uses: actions/cache@v3
  with:
    path: |
      dist
      tsconfig.tsbuildinfo
    key: ${{ runner.os }}-tsc-${{ hashFiles('**/*.ts') }}

テスト結果のキャッシュ

# Jest cache
- uses: actions/cache@v3
  with:
    path: /tmp/jest_rt
    key: ${{ runner.os }}-jest-${{ hashFiles('**/*.test.ts') }}

# Pytest cache
- uses: actions/cache@v3
  with:
    path: .pytest_cache
    key: ${{ runner.os }}-pytest-${{ hashFiles('**/*test*.py') }}

導入前と導入後の指標

## Before Optimization

- Total time: 12 minutes
- npm ci: 4 minutes
- Build: 5 minutes
- Tests: 3 minutes

## After Caching

- Total time: 3 minutes
- npm ci: 30 seconds (cache hit)
- Build: 1 minute (incremental)
- Tests: 1.5 minutes (cache hit)

**Improvement: 75% faster (12m → 3m)**

キャッシュヒット率のモニタリング

- name: Check cache hit
  id: cache
  uses: actions/cache@v3
  with:
    path: node_modules
    key: ${{ runner.os }}-deps-${{ hashFiles('package-lock.json') }}

- name: Log cache status
  run: |
    if [ "${{ steps.cache.outputs.cache-hit }}" == "true" ]; then
      echo "✅ Cache hit - saved $(date -u -d @$SECONDS +%M:%S)"
    else
      echo "❌ Cache miss - installing from scratch"
    fi

ベストプラクティス

  1. 正確なキー:ハッシュにすべての依存関係を含めます
  2. 復元キー:部分一致にフォールバックします
  3. 複数のパス:関連ファイルをまとめてキャッシュします
  4. サイズ制限:GitHub Actions の上限は 10GB です
  5. 有効期限:キャッシュは 7 日後に期限切れになります
  6. Mode=max:キャッシュヒット率を高める Docker キャッシュモードです
  7. ヒット状況を監視:キャッシュの有効性を追跡します

よくある落とし穴

❌ 汎用的すぎるキー:key: deps(常にヒットします) ✅ 具体的なキー:key: deps-${{ hashFiles('package-lock.json') }}

❌ restore-keys の設定漏れ:軽微な変更でもキャッシュミスが発生します ✅ 復元キー:部分一致にフォールバックします

❌ 誤ったロックファイルで node_modules をキャッシュする ✅ ロックファイルを一致させる:適切なロックファイルをハッシュ化します

出力チェックリスト

  • パッケージマネージャーのキャッシュを設定済み
  • ビルド出力のキャッシュ
  • Docker レイヤーキャッシュ(該当する場合)
  • テストキャッシュを設定済み
  • キャッシュキーでファイルハッシュを使用
  • フォールバック用の復元キー
  • 導入前と導入後の指標を記録済み
  • キャッシュヒットをモニタリング

コメント