測定する、分割するといった基本は除きます
クローン、checkoutを軽くする
履歴が必要だがクローンが重いとき
fetch-depth: 0を設定すると履歴もcloneされます。
ただ、履歴からコメントを作る処理などであれば、ソースコードは不要なことがあります
その場合は
blob: none
も設定すれば軽量化されます
- uses: actions/checkout@v4
with:
filter: blob:none
fetch-depth: 0
全履歴は重いのでdepth: 0ならblob: noneを狙ってみましょう
重いファイル、不要なディレクトリの除外
リポジトリにバイナリや画像、csvなどなんでも詰め込むことがあります。
不要なものは削除しておきましょう。
sparse checkoutもおすすめです
ディレクトリ単位でも除外できるのでモノリポ時に便利
無駄なパッケージインストールをなくす
- 全部dockerでの作業なのにactions内stepでパッケージインストールしている
- 同一job内で何回もインストールしている
- アプリケーションとは関係ないチェックジョブでアプリケーションの依存関係をインストールしている
- npxで実行するだけのジョブで別にパッケージインストールしている
- npxは自動的にインストールもするsugar syntax
- ついでに
setup-bunを使いbunxに変えておくとさらに高速化
高速なパッケージマネージャに変える
npmよりpnpm / bun、pipよりuvのほうが断然インストールは速くなります
アプリケーションのパッケージマネージャは変更しづらいとしても、ちょっとしたcheck jobは変えてみましょう
特にbunとuvは圧倒的な速度なのでおすすめです
イメージプルよりbun
レガシー気味なチェックツールだとコンテナ前提になっていることがあります。
npm上にパッケージがあるようならイメージプルよりbunxなりで直接実行したほうが高速です
キャッシュに注意
actionsのcache機能は便利です。ただGitHubのオブジェクトストレージの問題か、キャッシュの復元に結構時間がかかります。キャッシュだけに満足せず実際にかかる時間を見てみましょう
また、キャッシュしたつもりでもキャッシュできてないことがあります。actionsのキャッシュ利用状況を確認しましょう
GitHub Actionsの置き換え系SaaSを試す
self hosted runnerのSaaS版という形で多数のSaaSがあります
低価格化、高速化を謳っているので試してみるのもありです
影響範囲としては1行、runs-on部分を変えるだけで済みます