無限ノック › DOP 練習問題一覧 › 問題
DOPSDLC の自動化

Amazon ECS 上で稼働する Node.js アプリケーションの Docker イメージをビルドするため、AWS CodeBuild プロジェクトを運用しています。buildspec.yml 内で docker build コマンドを実行していますが、現在の Dockerfile はアプリケーションコード全体を COPY してから RUN npm install を実行する構成のため、package.json に変更がなくても毎回 npm install(約 8 分)が実行されています。ビルド時間の短縮とコスト最適化を図る上で最も効果的な改善策はどれですか?

A
CodeBuild プロジェクトのキャッシュ設定で「Amazon S3 キャッシュ」を有効化し、キャッシュパスに /root/.npm を指定する。buildspec.yml の install フェーズでは引き続き npm ci を使用する
npm ci が毎回 node_modules を削除するため S3 キャッシュ効果が限定的です。
B
CodeBuild プロジェクトの「Docker レイヤーキャッシュ(DLC: Docker Layer Cache)」を有効化し、Dockerfile を修正してアプリケーションコード全体の COPY より先に COPY package*.json . と RUN npm install を配置することで Docker レイヤーキャッシュを最大活用する
✓ 正解
DLC を有効化すると CodeBuild は Docker ビルドレイヤーを S3 に保存・再利用します。Dockerfile で package*.json のコピーと npm install をアプリコードの COPY より前に配置することで、package.json 未変更時は npm install レイヤーがキャッシュヒットして実行がスキップされます。
C
CodeBuild プロジェクトのキャッシュ設定で「ローカルキャッシュ」の「ソースキャッシュ」タイプを有効化し、Git リポジトリのクローンをキャッシュすることで npm パッケージのダウンロードをスキップする
ソースキャッシュは Git チェックアウト時間の短縮であり npm install とは無関係です。
D
CodeBuild の環境変数に DOCKER_BUILDKIT=1 を設定し、BuildKit(Docker の拡張ビルドエンジン)のマウントキャッシュ機能(--mount=type=cache)を Dockerfile の RUN npm install 行に追加して npm パッケージをキャッシュする
BuildKit マウントキャッシュはビルド間で永続化されず、DLC との組み合わせなしには効果がありません。

解説

DLC を有効化すると CodeBuild は Docker ビルドレイヤーを S3 に保存・再利用します。Dockerfile で package*.json のコピーと npm install をアプリコードの COPY より前に配置することで、package.json 未変更時は npm install レイヤーがキャッシュヒットして実行がスキップされます。 選択肢A は npm ci が毎回 node_modules を削除するため S3 キャッシュ効果が限定的です。 選択肢C のソースキャッシュは Git チェックアウト時間の短縮であり npm install とは無関係です。 選択肢D の BuildKit マウントキャッシュはビルド間で永続化されず、DLC との組み合わせなしには効果がありません。

ドメイン別正答率・予想スコアでリアルタイムに実力把握

無限ノックでDOPを徹底対策。全問AI生成のオリジナル問題。

無料で演習を始める →
← DOP の問題一覧に戻る