# ワークフローでジョブを使用する

ワークフローを使用して複数のジョブを実行します。

## 前提条件

ワークフローにジョブを実装するには、ジョブとはどのようなものかを理解する必要があります。 「[GitHub Actionsについて](/ja/enterprise-server@3.22/actions/get-started/understand-github-actions#jobs)」を参照してください。

## ジョブの ID を設定する

ジョブへの一意の識別子の指定には、`jobs.<job_id>` を使います。 `job_id` キーは文字列で、その値はジョブの設定データのマップです。 `<job_id>` は、`jobs` オブジェクトに固有の文字列に置き換える必要があります。 `<job_id>` は文字または `_` で始まり、英数字、`-`、あるいは `_` のみを含める必要があります。

### 例: ジョブを作成する

この例では、`job_id` 値が `my_first_job` と `my_second_job` の 2 つのジョブが作成されました。

```yaml
jobs:
  my_first_job:
    name: My first job
  my_second_job:
    name: My second job
```

## ジョブの名前を設定する

GitHub UI に表示されるジョブの名前の設定に `jobs.<job_id>.name` を使用します。

## 前提条件のジョブを定義する

`jobs.<job_id>.needs` を使って、このジョブの実行前に正常に完了する必要があるジョブを示します。 文字列型または文字列の配列です。 ジョブが失敗した場合、またはスキップされた場合、そのジョブに依存するすべてのジョブは、それらのジョブが実行を継続する条件式を使用していない限り、スキップされます。 互いに必要とする一連のジョブが実行に含まれている場合、失敗またはスキップの時点から、依存関係チェーン内のすべてのジョブに失敗またはスキップが適用されます。 依存しているジョブが成功しなかった場合でもジョブを実行する場合は、`always()` の`jobs.<job_id>.if` 条件式を使用します。

### 例: 依存ジョブの成功を必須にする

```yaml
jobs:
  job1:
  job2:
    needs: job1
  job3:
    needs: [job1, job2]
```

この例では、`job1` が正常に完了してから `job2` が始まる必要があり、`job3` では `job1` と `job2` の両方が完了するまで待機します。

つまり、この例のジョブは逐次実行されるということです。

1. `job1`
2. `job2`
3. `job3`

### 例: 依存ジョブが正常に完了していることを必要としない

```yaml
jobs:
  job1:
  job2:
    needs: job1
  job3:
    if: ${{ always() }}
    needs: [job1, job2]
```

この例では、`job3` では条件式 `always()` を使っているので、`job1` と `job2` が成功したかどうかに関係なく、完了後に常に実行されます。 詳しくは、「[ワークフロー内とアクション内で式を評価する](/ja/enterprise-server@3.22/actions/reference/workflows-and-actions/expressions#status-check-functions)」をご覧ください。

## マトリックスを使って複数の変数があるジョブを実行する

オペレーティング システムや言語バージョンなどのさまざまな変数を組み合わせてジョブを自動的に実行するには、ワークフローで `matrix` 戦略を定義します。

詳しくは、「[ワークフローでのジョブのバリエーションの実行](/ja/enterprise-server@3.22/actions/how-tos/write-workflows/choose-what-workflows-do/run-job-variations)」をご覧ください。