🦔
GitHubのissueをCopilotに割り当ててDockerイメージのビルド時間を短縮してもらった話
概要
Dockerfileの更新時、GitHub ActionsでDockerイメージをビルドし、SyftでSBOMを作成、Grypeで脆弱性をスキャンしています。
しかし、Dockerイメージのビルドに時間がかかるという課題がありました。
GitHub Copilot Proを契約して、GitHubのissueをCopilotに割り当てて対応してもらえるようになったので、Dockerイメージのビルド時間短縮の対応をしてもらいました。
issueの内容
問題点と対策を記載したissueを作成し、Copilotにアサインしました。

Copilotによる修正内容
従来はdockerコマンドでビルドしていましたが、Copilotはdocker/build-push-actionを使うように修正してくれました。
- run: |
- docker build -f .devcontainer/Dockerfile -t dev-container:test .
+ uses: >-
+ docker/build-push-action@48aba3b46d1b1fec4febb7c167d2bc4827b15259
+ # v6.13.0
+ with:
+ context: .
+ file: .devcontainer/Dockerfile
+ tags: dev-container:test
+ load: true
+ cache-from: type=gha
+ cache-to: type=gha,mode=max
Copilotの修正内容にあった問題点
docker/build-push-actionのコミットハッシュが存在しない
ワークフロー内のアクションはバージョン固定のためコミットハッシュを指定しています。
Copilotは他の部分と整合性がとれるように追加したアクションのバージョンをコミットハッシュにしてくれましたが、存在しないコミットハッシュでした。
docker/build-push-actionのバージョンが古い
Copilotはv6.13.0を指定していましたが、実際にはv6.18.0が最新でした。
issue内で「最新安定版を使う」など、より具体的な指示が必要かもしれません。
最終的な修正内容
最終的には、正しいコミットハッシュと最新バージョンを指定しました。
- run: |
- docker build -f .devcontainer/Dockerfile -t dev-container:test .
+ uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83
+ # v6.18.0
+ with:
+ context: .
+ file: .devcontainer/Dockerfile
+ tags: dev-container:test
+ load: true
+ cache-from: type=gha
+ cache-to: type=gha,mode=max
Dockerイメージビルド時間の短縮結果
キャッシュなしの状態では2分6秒かかっていたDockerイメージのビルドが、キャッシュありでは25秒まで短縮されました。
-
修正後の初回実行(キャッシュなし)

-
キャッシュあり

気になった点・今後の課題
- issueがアサインされたCopilotにMCPサーバを参照させる機能はない?
- Copilotが作るプルリクの宛先はデフォルトブランチに固定?
- issueでプルリク先のブランチを指定すれば、その通りに動くのかも
Discussion