🐫

脱 pnpm/action-setup で GHA のジョブも高速化

2024/02/08に公開

TL; DR

  • pnpm, GHA 利用向け
  • GHA において pnpm/action-setup を利用しなくても corepackpnpm 使える
  • 当社プロジェクトの場合、GHA の該当 JOB が 3 分 30 秒 -> 1 分 20 秒 と 処理時間 1/3 程度に劇的短縮
  • かなりお手軽にできる改善

背景

ロンラン株式会社 CEO 兼 CTO の武部です。

当社プロジェクトでは、パッケージマネージャに pnpm を利用しています。

GitHub Actions では pnpm/action-setup を利用して pnpm をセットアップしていたのですが、最近は Node.js 16 actions are deprecated な警告が出るようになり、気になっていました。

pnpm/action-setup はメンテ頻度も低く、今後どうしたもんかと思案していたところ、良いアドバイス見つけました。

https://github.com/pnpm/action-setup/issues/99#issuecomment-1918361558

早速試してみます。

before - after diff

GHA コードの修正。該当箇所の diff は例えば次のとおり。

コードもかなりコンパクトになりました。ポイントは下記です。

  • pnpm/actions-setup 退役
  • actions/cache を利用した node_modules 等のキャッシュも退役。キャッシュ は actions/setup-node に任せる
  • corepackactions/setup-node による pnpm のセットアップ
    • 元々 pnpm のバージョンは package.json に記載して管理していました

修正後の GHA ジョブ実行

何もハマることありませんでした。

GHA の実行ログを確認したところ、初回実行時は pnpm / node_modules 等 の キャッシュ が作成・保存され、二度目の実行時はキャッシュから復元されていることが確認できました。

速度変化

平均して 3 分 30 秒ほど掛かっていた job が、1 分 20 秒ほどに短縮!

Before After

上記は単発のジョブの例ですが、実際には後続の複数ジョブがあるため、ワークフロー全体での恩恵は大きいです。

どこが変化したのかみてゆきます。actions/setup-node ネイティブのキャッシュ処理が効率良し。合計 1 分 25 秒が 5 秒に。

Before After

まとめ

  • 嬉しさポイント三つ
    1. GHA 処理時間削減
    2. GHA コードがスリムに
    3. コスト 💰 も削減
  • pnpm/action-setup いままでお世話になりました
  • corepack 活用してゆきましょう
ロンラン Tech Zenn

Discussion