caching-strategy-optimizer について
依存関係のインストール、ビルド、Dockerレイヤー、テストを対象に、CIキャッシュを計画するスキルです。キャッシュキーや復元キーの指針に加え、ヒット率の監視と導入前後の指標確認項目を示します。
主な機能
- 01パッケージマネージャーのキャッシュ設定
- 02Dockerレイヤーとビルド成果物のキャッシュ
- 03テスト結果のキャッシュ
- 04キャッシュキーと復元キーの指針
- 05ヒット率の監視と指標
活用シーン
- 01CIでの依存関係の再インストール削減
- 02Dockerビルドとアプリ成果物のキャッシュ
- 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
ベストプラクティス
- 正確なキー:ハッシュにすべての依存関係を含めます
- 復元キー:部分一致にフォールバックします
- 複数のパス:関連ファイルをまとめてキャッシュします
- サイズ制限:GitHub Actions の上限は 10GB です
- 有効期限:キャッシュは 7 日後に期限切れになります
- Mode=max:キャッシュヒット率を高める Docker キャッシュモードです
- ヒット状況を監視:キャッシュの有効性を追跡します
よくある落とし穴
❌ 汎用的すぎるキー:key: deps(常にヒットします)
✅ 具体的なキー:key: deps-${{ hashFiles('package-lock.json') }}
❌ restore-keys の設定漏れ:軽微な変更でもキャッシュミスが発生します ✅ 復元キー:部分一致にフォールバックします
❌ 誤ったロックファイルで node_modules をキャッシュする ✅ ロックファイルを一致させる:適切なロックファイルをハッシュ化します
出力チェックリスト
- パッケージマネージャーのキャッシュを設定済み
- ビルド出力のキャッシュ
- Docker レイヤーキャッシュ(該当する場合)
- テストキャッシュを設定済み
- キャッシュキーでファイルハッシュを使用
- フォールバック用の復元キー
- 導入前と導入後の指標を記録済み
- キャッシュヒットをモニタリング
コメント
Markdown 対応