テック技報最新号へ →
コード

GitHub Actions: Blacksmith の sticky disk に Nix store を置いて CI を速くする

Blacksmith のランナーでは useblacksmith/stickydisk で /nix をジョブ間で使い回せる。@ryoppippi さんの ccusage では Linux x86 のジョブが3分から14秒になった。

@ryoppippi · 2026-10-16
#github-actions#nix#ci#cache

仕組み

sticky disk は、キーごとに前回のスナップショットを複製してランナーにマウントし、ジョブが終わると保存し直すディスク。actions/cache のようにアーカイブを毎回ダウンロード・展開しないので、Nix store のような数 GB の中身でもすぐ使える(公式の比較では 6GB で約3秒)。

yaml
jobs:
  build:
    runs-on: blacksmith-4vcpu-ubuntu-2404
    steps:
      - uses: actions/checkout@v6
      - run: sudo mkdir -p /nix/store && sudo chmod -R 777 /nix
      - uses: useblacksmith/stickydisk@v1
        with:
          key: ${{ github.repository }}-nix-${{ runner.os }}-${{ runner.arch }}-${{ github.job }}
          path: /nix
      - uses: nixbuild/nix-quick-install-action@v30
      - run: nix build

コツ

  • キーはジョブごとに分ける(github.job を含める)。ccusage では最初、同じアーキテクチャの全ジョブでキーを共有していた。開発シェル全体を作るジョブと nix build だけのジョブが互いの store を上書きし、毎回 cache.nixos.org から取り直して実行時間が 149秒〜388秒とばらついた。
  • 読むだけのジョブは commit: "false"、変化があったときだけ保存するなら commit: "on-change" にできる。
  • Nix 以外でも ~/.npm や node_modules など大きなキャッシュに使える。

注意点

参考

出典

X の元の投稿を開く