[GitHub Actions] package.jsonの中のdevDependenciesから特定のパッケージだけインストールする方法
2 min read
背景
大量の依存パッケージを持つアプリケーションにおいてCI/CD環境での実行時間を短縮するために、特定の依存パッケージのみをインストールしたい場合がある。
今回はDependency cruiserを利用しているケースを元にpackage.json
の中のdevDependencies
から特定のものだけをインストールする。
Dependency cruiser
Dependency cruiserとは、JavaScriptやTypeScriptのプロジェクトにおいて、依存関係の可視化を行うためのツール。依存関係のグラフを生成や特定ルールの検知ができる。
今回は、ローカル環境ではnpm scriptsを利用してDependency cruiserをLintとして実行している。さらにPull RequestにDependency cruiserの結果をGitHub Actionsを利用してコメントを残すためにCI/CD環境でも実行するといった複数な環境で実行している場合とする。
方法
bashを利用して、package.json
の中のdevDependencies
から特定のものだけをインストールする(CIあまり関係ない)。
コード
ワークフローファイル(yaml)で以下のように記述する。
- name: Install dependencies
run: |
# 1. package.jsonから devDependencies に存在している dependency-cruiser のバージョンを取得
DEPENDENCY_CRUISER_VERSION=$(cat package.json | jq -r '.devDependencies["dependency-cruiser"]')
# 2. package.json および package-lock.json を削除
rm package*.json
# 3. dependency-cruiser のみをインストール
npm install --save-dev dependency-cruiser@${DEPENDENCY_CRUISER_VERSION}
package.json
から対象のパッケージのバージョンを取得し、package.json
およびpackage-lock.json
を削除した後、npm install
で特定のパッケージのみをインストールしている。
これによって不必要なほかのパッケージをインストールしないため、npm installの実行時間を短縮できる。また、通常の環境ではnpmを利用しているが、ほかのパッケージマネージャーをCI/CD環境上で利用したい場合も有用である。