# Travis CI から GitHub Actions への移行

GitHub Actions Travis CI は複数の類似点を共有しているため、 GitHub Actionsへの移行が比較的簡単になります。

## はじめに

このガイドは、Travis CI から GitHub Actions に移行するのに役立ちます。 概念と構文を比較して類似点を説明し、一般的なタスクに対するさまざまなアプローチを示します。

## 開始する前に

GitHub Actionsへの移行を開始する前に、そのしくみを理解すると便利です。

* GitHub Actions ジョブを示す簡単な例については、[GitHub Actionsのクイック スタート](/ja/actions/get-started/quickstart) を参照してください。
* GitHub Actionsの基本的な概念については、[ワークフロー成果物を使ったデータの格納と共有](/ja/actions/tutorials/store-and-share-data#passing-data-between-jobs-in-a-workflow) を参照してください。

## ジョブ実行の比較

CI タスクを実行するタイミングを制御するために、 GitHub Actions\_ワークフロー\_ では、既定で並列で実行される *ジョブ* が使用されます。 各ジョブには、定義した順序で実行される *ステップ* が含まれています。 ジョブのセットアップおよびクリーンアップアクションを実行する必要がある場合は、各ジョブでステップを定義してこれらを実行できます。

## 主な類似点

GitHub Actions と Travis CI は特定の類似点を共有しており、事前にこれらを理解することで、移行プロセスを円滑に進めることができます。

### YAML 構文の使用

Travis CI と GitHub Actions はどちらも YAML を使用してジョブとワークフローを作成し、これらのファイルはコードのリポジトリに格納されます。
GitHub Actionsで YAML を使用する方法の詳細については、[サンプル ワークフローの作成](/ja/actions/tutorials/create-an-example-workflow) を参照してください。

### カスタム変数

Travis CI によって、環境変数を設定し、ステージ間で共有することができます。 同様に、 GitHub Actions を使用すると、ワークフローの変数を定義できます。 詳しくは、「[変数に情報を格納する](/ja/actions/how-tos/write-workflows/choose-what-workflows-do/use-variables)」をご覧ください。

### 既定の変数

Travis CI と GitHub Actions の両方に、YAML ファイルで使用できる既定の環境変数が含まれています。
GitHub Actionsについては、[変数リファレンス](/ja/actions/reference/workflows-and-actions/variables#default-environment-variables) の一覧を参照してください。

### 並列なジョブの処理

Travis CI では、`stages` を使ってジョブを並列実行できます。 同様に、 GitHub Actions は並列で `jobs` 実行されます。 詳しくは、「[GitHub Actions　のワークフロー構文](/ja/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idneeds)」をご覧ください。

### 状態バッジ

Travis CI と GitHub Actions 両方のサポート ステータス バッジを使用して、ビルドが成功しているか失敗しているかを示します。
詳しくは、「[ワークフロー状態バッジの追加](/ja/actions/how-tos/monitor-workflows/add-a-status-badge)」をご覧ください。

### マトリックスの使用

Travis CI と GitHub Actions はどちらもマトリックスをサポートしているため、オペレーティング システムとソフトウェア パッケージの組み合わせを使用してテストを実行できます。 詳しくは、「[ワークフローでのジョブのバリエーションの実行](/ja/actions/how-tos/write-workflows/choose-what-workflows-do/run-job-variations)」をご覧ください。

以下は、各システムの構文を比較した例です。

#### マトリックスの Travis CI 構文

```yaml
matrix:
  include:
    - rvm: '2.5'
    - rvm: '2.6.3'
```

#### GitHub Actions 行列の構文

```yaml
jobs:
  build:
    strategy:
      matrix:
        ruby: ['2.5', '2.6.3']
```

### 特定のブランチをターゲットにする

Travis CI と GitHub Actions の両方で、CI を特定のブランチにターゲットにできます。 詳しくは、「[GitHub Actions　のワークフロー構文](/ja/actions/reference/workflows-and-actions/workflow-syntax#onpushbranchestagsbranches-ignoretags-ignore)」をご覧ください。

以下は、それぞれのシステムにおける構文の例です。

#### 特定のブランチをターゲットにするための Travis CI 構文

```yaml
branches:
  only:
    - main
    - 'mona/octocat'
```

#### GitHub Actions 特定のブランチを対象とする構文

```yaml
on:
  push:
    branches:
      - main
      - 'mona/octocat'
```

### サブモジュールをチェックアウトする

Travis CI と GitHub Actions の両方を使用すると、サブモジュールをリポジトリクローンに含めるかどうかを制御できます。

以下は、それぞれのシステムにおける構文の例です。

#### サブモジュールをチェックアウトするための Travis CI 構文

```yaml
git:
  submodules: false
```

#### GitHub Actions サブモジュールをチェックアウトするための構文

```yaml
- uses: actions/checkout@v6
  with:
    submodules: false
```

### マトリックスで環境変数を使用する

Travis CI と GitHub Actions の両方で、カスタム変数をテスト マトリックスに追加できます。これにより、後の手順で変数を参照できます。

GitHub Actionsでは、`include` キーを使用して、カスタム環境変数をマトリックスに追加できます。 この例では、`node-version` のマトリックス エントリはそれぞれ、環境変数 `site` と `datacenter` に異なる値を使用するように構成されています。 次に `Echo site details` ステップでは、`env: ${{ matrix.env }}` を使用してカスタム変数を参照します。

```yaml
name: Node.js CI
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
       include:
         - node-version: '14.x'
           site: "prod"
           datacenter: "site-a"
         - node-version: '16.x'
           site: "dev"
           datacenter: "site-b"
    steps:
      - name: Echo site details
        env:
          SITE: ${{ matrix.site }}
          DATACENTER: ${{ matrix.datacenter }}
        run: echo $SITE $DATACENTER
```

## GitHub Actions の主な機能

Travis CI から移行する場合は、 GitHub Actionsで次の主な機能を検討してください。

### シークレットの保存

GitHub Actions を使用すると、シークレットを格納し、ジョブ内でそれらを参照できます。
GitHub Actions 組織は、組織のシークレットにアクセスできるリポジトリを制限できます。 デプロイ保護規則では、環境シークレットにアクセスするためのワークフローに対して手動承認が必要になる場合があります。 詳しくは、「[シークレット](/ja/actions/concepts/security/secrets)」をご覧ください。

### ジョブとワークフロー間でファイルを共有する

GitHub Actions にはアーティファクト ストレージの統合サポートが含まれており、ワークフロー内のジョブ間でファイルを共有できます。 結果のファイルを保存して、他のワークフローと共有することもできます。 詳しくは、「[GitHub Actionsについて](/ja/actions/get-started/understand-github-actions)」をご覧ください。

### 自分のランナーをホストする

ジョブに特定のハードウェアまたはソフトウェアが必要な場合は、 GitHub Actions 独自のランナーをホストし、処理のためにジョブを送信できます。
GitHub Actions また、ポリシーを使用してこれらのランナーへのアクセス方法を制御し、組織またはリポジトリ レベルでアクセスを許可することもできます。 詳しくは、「[セルフホステッド ランナーの管理](/ja/actions/how-tos/manage-runners/self-hosted-runners)」をご覧ください。

### 同時ジョブと実行時間

GitHub Actionsの同時実行ジョブとワークフロー実行時間は、GitHubプランによって異なる場合があります。 詳しくは、「[課金と使用](/ja/actions/concepts/billing-and-usage)」をご覧ください。

### で異なる言語を使用する GitHub Actions

GitHub Actionsで異なる言語を使用する場合は、ジョブで言語の依存関係を設定するステップを作成できます。 特定の言語の操作の詳細については、「[コードのビルドとテスト](/ja/actions/tutorials/build-and-test-code)」を参照してください。

## スクリプトの実行

GitHub Actions では、 `run` 手順を使用してスクリプトまたはシェル コマンドを実行できます。 特定のシェルを使うには、スクリプトへのパスを指定するときに `shell` 型を指定できます。 詳しくは、「[GitHub Actions　のワークフロー構文](/ja/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstepsrun)」をご覧ください。

次に例を示します。

```yaml
steps:
  - name: Run build script
    run: ./.github/scripts/build.sh
    shell: bash
```

## GitHub Actions におけるエラー処理

GitHub Actionsに移行する場合、注意が必要になる可能性があるエラー処理にはさまざまな方法があります。

### スクリプトエラーの処理

GitHub Actions は、いずれかの手順でエラー コードが返された場合、ジョブを直ちに停止します。 詳しくは、「[GitHub Actions　のワークフロー構文](/ja/actions/reference/workflows-and-actions/workflow-syntax#exit-codes-and-error-action-preference)」をご覧ください。

### ジョブエラーの処理

GitHub Actions では、 `if` 条件を使用して、特定の状況でジョブまたはステップを実行します。 たとえば、あるステップは、別のステップで `failure()` が発生したときに実行できます。 詳しくは、「[GitHub Actions　のワークフロー構文](/ja/actions/reference/workflows-and-actions/workflow-syntax#example-using-status-check-functions)」をご覧ください。 また、[`continue-on-error`](/ja/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idcontinue-on-error) を使って、ジョブが失敗したときにワークフロー実行が停止しないようにすることもできます。

## 条件文と式の構文を移行する

条件式でジョブを実行するには、Travis CI と GitHub Actions で同様の `if` 条件構文を共有します。
GitHub Actions では、`if` 条件を使用して、条件が満たされている場合にのみジョブまたはステップを実行できるようにできます。 詳しくは、「[ワークフロー内とアクション内で式を評価する](/ja/actions/reference/workflows-and-actions/expressions)」をご覧ください。

次の例は、ステップを実行するかどうかを `if` 条件文で制御する方法を示しています。

```yaml
jobs:
  conditional:
    runs-on: ubuntu-latest
    steps:
      - run: echo "This step runs with str equals 'ABC' and num equals 123"
        if: env.str == 'ABC' && env.num == 123
```

## フェーズからステップに移行する

Travis CI が\_フェーズ\_を使用して\_ステップ\_を実行する場合、GitHub Actionsには\_アクション\_を実行する\_ステップ\_があります。
[
GitHub Marketplace
](https://github.com/marketplace?type=actions)で事前構築済みのアクションを見つけるか、独自のアクションを作成できます。 詳しくは、「[自動化の再利用](/ja/actions/how-tos/reuse-automations)」をご覧ください。

以下は、それぞれのシステムにおける構文の例です。

### フェーズとステップの Travis CI 構文

```yaml
language: python
python:
  - "3.7"

script:
  - python script.py
```

### GitHub Actions ステップとアクションの構文

```yaml
jobs:
  run_python:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/setup-python@v5
        with:
          python-version: '3.7'
          architecture: 'x64'
      - run: python script.py
```

## 依存関係のキャッシング

Travis CI と GitHub Actions を使用すると、後で再利用できるように依存関係を手動でキャッシュできます。

これらの例は、各システムのキャッシュ構文を示しています。

### キャッシュの Travis CI 構文

```yaml
language: node_js
cache: npm
```

### キャッシュのGitHub Actions構文

```yaml
- name: Cache node modules
  uses: actions/cache@v4
  with:
    path: ~/.npm
    key: v1-npm-deps-${{ hashFiles('**/package-lock.json') }}
    restore-keys: v1-npm-deps-
```

## 一般的なタスクの例

このセクションでは、 GitHub Actions と Travis CI が一般的なタスクを実行する方法を比較します。

### 環境変数の設定

GitHub Actions ジョブでカスタム環境変数を作成できます。

#### 環境変数の Travis CI 構文

```yaml
env:
  - MAVEN_PATH="/usr/local/maven"
```

#### GitHub Actions 環境変数を含むワークフロー

```yaml
jobs:
  maven-build:
    env:
      MAVEN_PATH: '/usr/local/maven'
```

### Node.jsでのビルド

#### Node.js でのビルドのための Travis CI

```yaml
install:
  - npm install
script:
  - npm run build
  - npm test
```

#### GitHub Actions Node.js を使用して構築するためのワークフロー

```yaml
name: Node.js CI
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - name: Use Node.js
        uses: actions/setup-node@v7
        with:
          node-version: '16.x'
      - run: npm install
      - run: npm run build
      - run: npm test
```

## 次のステップ

GitHub Actionsの主な機能については、[ワークフローの書き込み](/ja/actions/how-tos/write-workflows) を参照してください。