無限ノック › DVA 練習問題一覧 › 問題
DVAデプロイ

開発チームがNode.jsアプリケーションをAWS CodeBuildでビルドしています。各ビルドで毎回`npm install`が実行され数百のパッケージをダウンロードするため、ビルド時間が10分を超えています。依存関係は頻繁には変わりません。ビルド時間を短縮する最も適切な方法はどれですか。

A
buildspec.ymlのcacheセクションでnode_modulesをパスに指定し、CodeBuildプロジェクトにS3キャッシュまたはローカルキャッシュを構成する
✓ 正解
CodeBuildのcacheは依存関係ディレクトリをビルド間で保持し再ダウンロードを省くため、変更の少ないnode_modulesのビルド時間短縮に直接効く。S3キャッシュかローカルキャッシュを選べる点も要件に合致する。
B
CodeBuildのコンピューティングタイプをより大きいインスタンスに変更し、並列ビルドを有効にする
コンピューティングタイプを大きくしてもnpm installのボトルネックはネットワークダウンロードであり、CPU/メモリ増強では本質的な時短にならずコストだけ増える。CodeBuildに任意の並列ビルド設定はない。
C
ビルドごとにnode_modulesをCodeCommitリポジトリにコミットしてソースから取得する
node_modulesをリポジトリにコミットするとリポジトリが肥大化し、OS/アーキ依存のバイナリで環境差異が生じる。依存管理のアンチパターンでありキャッシュより劣る。
D
CodePipelineの並列アクションを使い、複数のCodeBuildプロジェクトでパッケージを分割インストールする
複数CodeBuildへの分割は構成が複雑化し依存解決の一貫性が崩れる。インストール処理自体の重複は残るため、キャッシュ再利用ほどの効果は得られない。

解説

CodeBuildのキャッシュ機能は、ビルド間で再利用可能なディレクトリ(node_modules等の依存関係)を保存し、再ダウンロードを回避することでビルド時間を短縮します。buildspec.ymlの`cache.paths`に対象ディレクトリを指定し、プロジェクト設定でS3キャッシュ(永続・チーム共有向き)またはローカルキャッシュ(同一ホスト再利用向き)を有効化します。 依存関係が頻繁に変わらないケースに最適です。 選択肢Bのコンピューティングタイプ拡大は、ダウンロード自体がネットワークI/Oに依存するため効果が限定的でコスト増を招く。 選択肢CのCodeCommitへのnode_modulesコミットは、リポジトリ肥大化と環境差異の問題を生み、依存管理のアンチパターン。 選択肢Dの分割インストールは構成が複雑化し、依存解決の一貫性が崩れる上にキャッシュほどの効果がない。

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

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

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