見出し画像

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の環境には影響を与えません。