【入門編】Bitbucket PipelinesにおけるDockerコンテナ最適化:ビルドイメージを軽量化してCI時間を削る方法 – バージョン管理・CI/CD活用バイブル

こんにちは。現場の最前線でCI/CDと格闘しているエンジニアです。

Bitbucket Pipelinesを使っていると、ふとこう思いませんか?
「なんでテストを実行するだけでこんなに時間がかかるんだ?」

その原因の多くは、Dockerイメージの肥大化とレイヤーキャッシュの非効率さにあります。特にCIは毎日何度も走るもの。1回のビルドで1分短縮できれば、チーム全体で年間数百時間の節約になります。

今日は、Bitbucket Pipelinesを「爆速」にするための、現場で使える最適化テクニックを伝授します。これをマスターすれば、あなたの開発体験は劇的に変わりますよ。

—

1. なぜ「重いイメージ」は悪なのか?

Bitbucket Pipelinesの仕組みはシンプルです。ジョブが走るたびに、指定したDockerイメージをネットワーク経由でプルし、コンテナを立ち上げます。

  • イメージが重い: ダウンロードに時間がかかる(待ち時間の増大)。
  • レイヤーが非効率: キャッシュが効かず、変更に関係ないパッケージまで再インストールする(CPU/メモリの無駄)。

これらを解決するための「3種の神器」を紹介します。

—

2. 【極意その1】マルチステージビルドで「捨てられる環境」を作る

実行環境に、ビルドに必要なコンパイラや開発ツールを含める必要はありません。必要なのは「実行バイナリのみ」です。

ステージ1: ビルド環境 (Node.jsの重いイメージ)
FROM node:18-alpine AS builder
WORKDIR /app
COPY package.json ./
RUN npm install
COPY . .
RUN npm run build

ステージ2: 実行環境 (軽量なNginxイメージ)
FROM nginx:alpine
ビルドした成果物だけをコピーしてくる
COPY –from=builder /app/dist /usr/share/nginx/html

ポイント: `builder`ステージにある重い依存関係やソースコードは、最終イメージには一切含まれません。これにより、デプロイ先でも高速に起動するミニマムな環境が手に入ります。

—

3. 【極意その2】Alpine Linuxへの移行とパッケージ管理の鉄則

可能な限り `alpine` ベースのイメージを選びましょう。OSサイズが数MBレベルに収まります。ただし、パッケージインストール時は「キャッシュを残さない」のが鉄則です。

悪い例: apk updateのキャッシュがレイヤーに残る
RUN apk add git

良い例: –no-cacheでキャッシュを捨て、&&でコマンドを繋ぐ
RUN apk add –no-cache git && \
rm -rf /var/cache/apk/

この「&&で繋ぐ」書き方は非常に重要です。Dockerは命令ごとにレイヤーを作るため、コマンドを分けると削除コマンドが別レイヤーになり、結局サイズが減らないからです。

—

4. 【極意その3】Bitbucket Pipelinesのキャッシュ機能を使い倒す

Dockerレイヤーのキャッシュだけでなく、Bitbucket Pipelines独自のキャッシュ機能を併用します。`bitbucket-pipelines.yml`にこれを書き込むだけで、依存関係のダウンロード時間が激減します。

image: node:18-alpine

pipelines:
default:

  • step:

caches:

  • node # ここが重要!node_modulesをキャッシュする

script:

  • npm install
  • npm test

これで、毎回 `npm install` する必要がなくなります。

—

5. HelloWorld: 最速パイプラインの構成

では、これらを統合した「最高に効率的な基本形」を見てみましょう。

bitbucket-pipelines.yml

image: node:18-alpine

pipelines:
default:

  • step:

name: Build and Test
caches:

  • node

script:

  • npm ci # npm installより高速で安全なインストール
  • npm run test

動作確認の手順:
1. リポジトリのルートに `bitbucket-pipelines.yml` を作成します。
2. Bitbucketの「Pipelines」タブを開き、有効化します。
3. コミットをプッシュすると、自動的にビルドが開始されます。

最初は「緑色のチェックマーク」が出るまでドキドキするかもしれませんが、一度成功してキャッシュが効き始めれば、2回目以降のビルド時間は驚くほど短くなるはずです。

—

最後に:エンジニアとしてのマインドセット

CI/CDの最適化は、単なる「時短」ではありません。
「速いフィードバックループ」は、チームの心理的安全性を高めます。
テスト結果が1分でわかれば、エンジニアは自信を持ってコードをマージできます。逆に15分かかれば、どうしても慎重になり、デプロイの回数は減ってしまうでしょう。

まずは、あなたのプロジェクトのDockerfileに `FROM … AS builder` を1行書くところから始めてみてください。その小さな1歩が、明日のあなたとチームを大きく助けるはずです。

何か詰まったら、いつでも聞いてくださいね。応援しています!

タイトルとURLをコピーしました