Git入門:バージョン管理のきほん
GitHub Actions で自動化のさわり
この回でやること
push のたびに lint を自動で走らせる最小の workflow を 1 つ作り、YAML を 1 行ずつ読み解きます。自動化の入口をここで押さえましょう。
- 読む 約 8 分
毎回同じコマンドを、人が打っている
ブランチを push してプルリクエストを出す流れには、毎回同じことを繰り返す作業が混ざっています。lint を走らせる、テストを流す、ビルドが通るか確かめる。人がやる必要はありません。
GitHub Actions は、リポジトリで何かが起きたときに、GitHub 側の仮想マシンでコマンドを実行してくれる仕組みです。やっていることは単純で、まっさらな Linux マシンを起動し、リポジトリを clone して、こちらが書いたコマンドを順に打つだけです。手元のターミナルの作業を、GitHub のマシンが代わりにやります。
定義は、リポジトリ直下の .github/workflows/ に YAML ファイルとして置きます。このディレクトリ名は固定です。 単数の workflow にしたり先頭のドットを落としたりすると、GitHub はまったく反応しません。
この YAML は、3 か所だけ読めればいい
push のたびに lint を走らせる、最小の workflow です。
YAML
on:
push:
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "20"
- run: npm ci
- run: npm run lint長く見えますが、読むべきは 3 か所です。
on がいつ動くかです。ここでは push のたびに動きます。pull_request と書き足せば、プルリクエストが作られたときと更新されたときにも走り、レビュアーは画面を見るだけで lint の結果が分かります。
runs-on がどこで動くかです。ubuntu-latest は GitHub が用意する Ubuntu の仮想マシンで、毎回まっさらで起動し、終わると捨てられます。
steps が何をするかです。- で始まる項目 1 つが 1 手順で、書き方は 2 通りです。uses は既製の部品を使う指定で、actions/checkout はマシンにリポジトリを clone してきます。これが無いと中は空っぽなので、ほぼすべての workflow の 1 行目がこれです。もう 1 つの run は、そのままシェルでコマンドを実行します。
判定しているのは終了コードだけです。npm run lint が 0 以外で終われば job は失敗します。手元で失敗するコマンドは Actions でも失敗し、手元で通るものは通ります。特別な仕組みではありません。
手元では通るのに、Actions だけ赤くなる
失敗したら Actions タブで赤い印の step を開きます。中身は普通のコマンド出力です。
プレーンテキスト
npm error code ENOENT
npm error path /home/runner/work/my-app/my-app/package.jsonpackage.json が見つからない、というエラーです。原因は、リポジトリ直下ではなく frontend/ のような下の階層にプロジェクトがあることです。Actions はリポジトリ直下でコマンドを実行しますが、手元では cd frontend してから作業しているので気づきません。作業ディレクトリを指定すれば直ります。
YAML
- run: npm ci
working-directory: frontendここで共通しているのは、Actions のマシンは毎回まっさらだという点です。グローバルに入れた道具のように、手元で暗黙に使っているものは全部 workflow に書き出す必要があります。
- GitHub Actions は、push などをきっかけに GitHub のマシンでコマンドを流す仕組み
- 読むのは
on(いつ動くか)、runs-on(どこで動くか)、steps(何をするか) の 3 か所 - step は
usesで既製の部品を使うか、runでコマンドを打つかの 2 通り - 判定は終了コードだけ。マシンは毎回まっさらなので、暗黙の前提は書き出す