Actionsで、キャッシュをS3に保存するアクションactions-s3-cacheをリリースしました。ActionsにおいてCI/CDを行う際にパッケージインストールやビルドを実行する場面があるかと思いますが、それらの結果をキャッシュするためのアクションとなります。Actions公式のキャッシュ機能actions/cacheは、現在以下の問題を抱えているようです。Masteriesこの点に関して、今回公開したアクションは安定しているのではと思います。公式のキャッシュは以下の仕様となっています。テストのように、1ジョブ内で公式のキャッシュを使用パッケージのインストールテストの実行を実行する場合、初回のテストが通るまでインストールしたパッケージがキャッシュされることはありません。actions-s3-cacheでは、後続のステップでエラーが発生してジョブが異常終了した時でも、キャッシュの保存を行います。ビルドするキャッシュを保存するという一連の流れを、アクション使用の1ステップ内で実行しているためです。公式のキャッシュはGitHubリポジトリごとにキャッシュの保存容量が5GBあるそうです。実際に使っていると5GBをまだ超過していなさそうなのに、キャッシュミスが発生するケースが見受けられました。私の職場のとあるリポジトリについて、AさんがActionsでテストをしてキャッシュが保存された後、同じに日にBさんがテストをしたら、キャッシュのキーは同じなのにキャッシュミスになることがありました。actions-s3-cacheではキャッシュのキーが合えば確実にキャッシュヒットする、はずです。公式のキャッシュは、キャッシュ対象としてひとつのディレクトリしか指定できません。ファイル名を指定してキャッシュすることができません。利用シーンは限られるかもしれませんが、actions-s3-cacheでは複数のディレクトリとファイルの組み合わせをまとめてキャッシュ可能です。ciによって作成されたnode_modulesをS3にキャッシュし、次回以降はS3からリストアします。必須(キャッシュするディレクトリやファイル。./)事前準備としては、S3バケットを作成するS3バケットを読み書き可能なポリシーを持ったIAMユーザーを作成するGitHubリポジトリのsettings画面で上記IAMユーザーのアクセスキーIDとのキーをsecretsに設定するが必要となります。キャッシュですので、S3バケットにはライフサイクルポリシーを付けて一定日数でオブジェクトが削除されるようにすると良いかと思います。以下はIAMのポリシーの例です。]}なお、アクションの種類には、DockerアクションとJavaScriptアクションが存在しますが、actions-s3-cacheは後者のJavaScriptアクションです。GitHubが提供するVM環境で直接実行されます。最後に職場では今回のアクションの原型となる、S3キャッシュのためのシェルを作って使っているのですが、GitHubリポジトリごとにシェルをコピペしなければなりませんでした。今回アクションとしてOSS化したことで共通的に使い回せるようになりました。この記事を読んでいただいた方にも、このアクションを使っていただけたら幸いです。(1)関連リンクQiitaはてなブログをはじめよう!shonansurvivorsさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。