こんにちは。現場で「ビルド待ちのコーヒータイム」を過ごすのが当たり前になっていませんか?
CI/CDパイプラインは、開発者の生産性を最大化するための武器です。しかし、設定を怠れば、それは開発の足を引っ張る「足枷」に変わります。
今日は、Bitbucket Pipelinesを使いこなし、ビルド時間を劇的に、そしてエレガントに短縮するための「キャッシング戦略」について、現場の知見を詰め込んで解説します。
—
1. なぜCIは遅くなるのか?(ボトルネックの特定)
パイプラインが遅い原因の9割は、「毎回ゼロから環境を構築し、依存関係をダウンロードしているから」です。
- `npm install` や `pip install` で数分間ネットの海を彷徨う。
- ビルド済みの成果物(`node_modules`や`dist`など)を毎回作り直す。
これらは、現代の高速開発においては「無駄な時間」以外の何物でもありません。Bitbucket Pipelinesには、この時間を魔法のように消し去る「キャッシュ機能」が備わっています。
2. キャッシュの基本:`bitbucket-pipelines.yml`を最適化せよ
キャッシュとは、「一度ダウンロード・作成した依存関係を、次の実行でも使い回す」仕組みです。これを設定するだけで、ビルド時間は数分単位で短縮されます。
まずは、最も一般的なNode.js環境での設定例を見てみましょう。
image: node:18 # Dockerイメージを指定
pipelines:
default:
- step:
name: Build and Test
# キャッシュディレクトリを指定
caches:
- node
script:
# ここで node_modules がキャッシュから復元される
- npm install
- npm run build
- npm test
Bitbucketが提供する標準キャッシュを定義
definitions:
caches:
node: ~/.npm # ここを指すだけで劇的に早くなる
ここがプロの視点:
`caches`に`node`を指定するだけで、Bitbucketは自動的に`node_modules`のハッシュ値を計算し、変更がない場合はダウンロードをスキップします。これが「最初の魔法」です。
3. さらに先へ:独自ディレクトリのキャッシュで「極限の高速化」
標準のキャッシュだけでは満足できない場合、`custom`キャッシュを使って、任意のディレクトリ(例:ビルド成果物や独自ライブラリ)を保存できます。
definitions:
caches:
# 独自キャッシュの定義(プロジェクト固有のディレクトリを指定)
my-build-cache: .cache/custom-build-folder
pipelines:
default:
- step:
caches:
- node
- my-build-cache # 自作キャッシュを読み込む
script:
- npm install
- ./build-script.sh –use-cache # キャッシュを活用するビルドコマンド
現場のハック:
ビルドスクリプト側で「キャッシュが存在するかチェックし、あればスキップする」ロジックを組むと、さらにビルドのオーバーヘッドを削れます。
4. ビルド高速化のベストプラクティス(まとめ)
読者の皆さんが今日から実践できる、高速化の鉄則をまとめました。
1. キャッシュキーの管理: `package-lock.json` や `requirements.txt` が更新されたときだけキャッシュを無効化するよう、Bitbucketは自動で賢く動いてくれます。過度に心配せず、まずは`caches`を定義すること。
2. 必要なものだけをインストール: `npm install` の代わりに `npm ci` を使いましょう。`package-lock.json` を厳密に再現するため、CI環境ではこちらの方が高速で安全です。
3. Dockerイメージの軽量化: 使用する`image`は、必要なツールだけが含まれた軽量なものを選んでください。イメージのPull時間自体もビルド時間に含まれます。
—
最後に:CI/CDは「育てる」もの
設定が終わったら、一度パイプラインを実行してみてください。2回目以降のビルドで、驚くほど短時間で終了するはずです。
「たかが数分」と思うかもしれません。しかし、一日に何度もプッシュするチームにとって、この数分の短縮は、一週間で見れば数時間の余裕を生みます。その余裕で、皆さんはよりクリエイティブなコードを書くことができる。これこそがDevOpsの本質です。
何かうまくいかないことがあれば、いつでも聞いてください。あなたのビルド環境を、世界最高速のパイプラインに仕上げていきましょう!
さあ、次はどの無駄を削りましょうか?