<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>CI/CD &#8211; エンジニア見習い</title>
	<atom:link href="https://otonan-syusyoku.work/archives/tag/ci-cd/feed" rel="self" type="application/rss+xml" />
	<link>https://otonan-syusyoku.work</link>
	<description>三流プログラマー</description>
	<lastBuildDate>Thu, 12 Feb 2026 06:41:34 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://otonan-syusyoku.work/wp-content/uploads/2023/10/cropped-名称未設定のデザイン-16-32x32.png</url>
	<title>CI/CD &#8211; エンジニア見習い</title>
	<link>https://otonan-syusyoku.work</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>GithubActions における DockerImage の Buildキャッシュ戦略</title>
		<link>https://otonan-syusyoku.work/archives/2205</link>
					<comments>https://otonan-syusyoku.work/archives/2205#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Thu, 12 Feb 2026 06:41:33 +0000</pubDate>
				<category><![CDATA[生涯独学]]></category>
		<category><![CDATA[CI/CD]]></category>
		<category><![CDATA[ECS]]></category>
		<category><![CDATA[Githubactions]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=2205</guid>

					<description><![CDATA[どうも、PHPerです。 直近、業務でECSへのデプロイワークフローを実装することになりました。 主な流れは以下の通りです。 この中でボトルネックになるのが 「2. Docker Image のビルド」 です。 毎回フル [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>どうも、PHPerです。</p>



<p>直近、業務でECSへのデプロイワークフローを実装することになりました。</p>



<p>主な流れは以下の通りです。</p>



<ol start="1" class="wp-block-list">
<li>フロントエンドのビルド</li>



<li><strong>Docker Image のビルド</strong></li>



<li>ECR へのログイン</li>



<li>ECR へPush</li>



<li>ECS のサービス更新</li>
</ol>



<p>この中でボトルネックになるのが <strong>「2. Docker Image のビルド」</strong> です。</p>



<p>毎回フルビルドしていると時間がかかりすぎるため、キャッシュの利用は必須です。</p>



<p>Docker Buildx のキャッシュバックエンドには、大きく分けて以下の3つの選択肢があります。</p>



<ol start="1" class="wp-block-list">
<li><strong>GitHub Actions Cache</strong> (<code>type=gha</code>)</li>



<li><strong>GitHub Container Registry</strong> (<code>type=registry</code>)</li>



<li><strong>Amazon ECR</strong> (<code>type=registry</code>)</li>
</ol>



<p>これらを比較検討した結果、今回は <strong>「GitHub Actions Cache (<code>type=gha</code>)」</strong> を採用しました。</p>



<p>その理由はズバリ、<strong>「利用料（ランニングコスト）」と「実装（設定）コスト」が最も低かったから</strong>です。</p>



<h2 class="wp-block-heading">比較検討：3つのキャッシュ戦略</h2>



<p>それぞれの特徴を「コスト」と「手間」の観点で整理しました。</p>



<h3 class="wp-block-heading">1. Amazon ECR (<code>type=registry</code>)</h3>



<p>AWS環境に統一できるメリットはありますが、以下のデメリットがあります。</p>



<ul class="wp-block-list">
<li><strong>実装コスト</strong><br>IAMロールの設定、<code>aws-actions/amazon-ecr-login</code> の設定が必要。</li>



<li><strong>利用料</strong>
<ul class="wp-block-list">
<li><strong>データ転送量</strong><br>GitHub Actions (インターネット) ⇔ AWS ECR 間の通信が発生します。<br>NAT Gatewayを経由する場合などは特に通信費がかさむ可能性があります。</li>



<li><strong>ストレージ料金</strong><br>キャッシュイメージの分だけECRのストレージ料金が発生します。</li>



<li><strong>実行時間</strong><br>ネットワーク越しにPush/Pullするため、ビルド時間が伸び＝GitHub Actionsの課金対象時間（Minutes）も消費します。</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading">2. GitHub Container Registry (<code>type=registry</code>)</h3>



<p>GitHubのエコシステム内で完結しますが、こちらも考慮が必要です。</p>



<ul class="wp-block-list">
<li><strong>実装コスト</strong><br><code>docker/login-action</code> での認証設定や、パッケージの読み書き権限設定が必要。</li>



<li><strong>利用料</strong>
<ul class="wp-block-list">
<li>Organizationのプランによっては、GHCRのストレージ容量やデータ転送量に制限・課金が発生する場合があるらしい</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading">3. GitHub Actions Cache (<code>type=gha</code>)</h3>



<p>今回採用した方法です。</p>



<ul class="wp-block-list">
<li><strong>実装コスト</strong><br><strong>認証設定が一切不要</strong>。YAMLに数行書くだけ。</li>



<li><strong>利用料</strong>
<ul class="wp-block-list">
<li><strong>通信費ゼロ</strong><br>GitHub Actionsの内部ネットワークで完結するため、外部への転送コストがかかりません。</li>



<li><strong>ストレージ無料</strong><br>リポジトリあたり10GBまで利用可能（超過分は古いものから自動削除されるだけなので、追加課金のリスクがない）。</li>



<li><strong>実行時間短縮</strong><br>ネットワークが高速なため、キャッシュのリストアが速く、結果としてActionsの実行時間を節約できます。</li>
</ul>
</li>
</ul>



<h2 class="wp-block-heading">比較まとめ表</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>キャッシュ戦略</strong></td><td><strong>実装(設定)コスト</strong></td><td><strong>利用料(ランニングコスト)</strong></td><td><strong>速度</strong></td></tr></thead><tbody><tr><td><strong>GHA Cache</strong> (<code>type=gha</code>)</td><td><strong>◎ (認証不要)</strong></td><td><strong>◎ (基本無料)</strong></td><td><strong>◎ (最速)</strong></td></tr><tr><td><strong>GHCR</strong> (<code>type=registry</code>)</td><td>△ (Token設定必要)</td><td>◯ (プラン依存)</td><td>◯</td></tr><tr><td><strong>ECR</strong> (<code>type=registry</code>)</td><td>△ (IAM設定必要)</td><td>△ (通信費・保管費)</td><td>△ (通信発生)</td></tr></tbody></table></figure>



<h2 class="wp-block-heading">なぜ <code>type=gha</code> を選んだか</h2>



<p>今回の要件において、私が重視したのは以下の2点です。</p>



<ol start="1" class="wp-block-list">
<li><strong>ワークフローの利用料を抑えたい</strong>
<ul class="wp-block-list">
<li>無駄なデータ転送費やストレージ料金を払いたくない。</li>



<li>ビルド時間を短縮して、GitHub Actionsの利用枠（Minutes）を節約したい。</li>
</ul>
</li>



<li><strong>実装コストを最小限にしたい</strong>
<ul class="wp-block-list">
<li>キャッシュのためだけにIAM権限を調整したり、Secretsを管理したりする手間を省きたい。</li>



<li>シンプルに保ち、メンテナンスしやすくしたい。</li>
</ul>
</li>
</ol>



<p>この2点を満たすのが <strong><code>type=gha</code></strong> でした。</p>



<p>「ローカル開発環境でも同じキャッシュを使いたい」という要件があれば <code>registry</code> 系が候補に挙がりますが、今回は「CIの高速化」が主目的だったため、迷わずこちらを選択しました。</p>



<h2 class="wp-block-heading">実装コード</h2>



<p>設定は驚くほどシンプルです。<code>docker/build-push-action</code> に <code>cache-from</code> / <code>cache-to</code> を追加するだけです。</p>



<pre class="wp-block-code"><code>      # Buildxのセットアップ（必須）
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3

      # ビルド &amp; Push
      - name: Build and push
        uses: docker/build-push-action@v5
        with:
          context: .
          push: true
          tags: ${{ steps.login-ecr.outputs.registry }}/my-app:latest
          # ★ここがポイント
          cache-from: type=gha
          cache-to: type=gha,mode=max
</code></pre>



<h3 class="wp-block-heading">ポイント：<code>mode=max</code></h3>



<p><code>cache-to: type=gha,mode=max</code> を指定することで、最終的なイメージだけでなく、中間レイヤー（<code>npm install</code> などを行ったレイヤー）もキャッシュされます。<br>これにより、コードを少し変更しただけでもフルビルドが走るのを防げます。</p>



<h2 class="wp-block-heading">まとめ</h2>



<p>技術選定において「高機能であること」も重要ですが、<strong>「コストがかからない」「設定が楽」</strong> というのは、運用を続ける上で正義です。</p>



<p>ECSデプロイのビルド時間に悩んでいる方は、まずは一番手軽で財布に優しい <code>type=gha</code> から試してみてはいかがでしょうか。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/2205/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
