
SubshellによるGitHub Actionsの最適化
** You can read the English version here.
Subshellとは?
Subshellとは、特定のコマンドやコマンド群を実行するために、Shellが作成する別の子プロセスのことです。Subshellは独自の環境を持ち、親Shell(現在使用しているシェル)とは独立しています。Subshellは並列で実行できるため、GitHub Actionsの実行時間を短縮することが可能です。
例
括弧 () で囲まれた部分がそれぞれSubshellです。
(cd dir1 && npm i) & (cd dir2 && npm i) & wait
GitHub Actions の最適化方法
最適化前
# プロジェクトの依存関係をインストール
- name: Install dependencies in app
working-directory: ./app
run: npm install
- name: Install dependencies in lambdas
working-directory: ./app/lambdas
run: npm install
- name: Install dependencies in cota-app layer
working-directory: ./app/lambdas/layers/v_1_0_0/nodejs
run: npm install
最適化後
# プロジェクトの依存関係をインストール
- name: Install dependencies in app
working-directory: ./app
run: (npm install) & (cd lambdas && npm install) & (cd lambdas/layers/v_1_0_0/nodejs && npm install) & wait
FAQ
Q. Subshellを実行した後のカレントディレクトリはどうなりますか?
A. カレントディレクトリは変わりません。
Subshell内で行われたディレクトリ変更や変数設定などは、親Shellの環境には影響を与えません。