GitHubActionsの使用イメージのメモ

# はじめに
GitHub Actionsというものについて使用イメージを備忘記録で記載しました。

# 使用目的
以下のような使用目的になります。
Github Actionsはテスト、デプロイを自動化するツール。
何かをトリガーで自動で動かすこと。
テスト自体は言語によるもの(node.jsならjest、laravelならduskとか)で作成する。

# 使用方法
GitHub Actionsを使用してテストを自動化することが可能です。
GitHub Actionsは、リポジトリ内のコード変更に応じてワークフローを自動的に実行するCI/CD（継続的インテグレーションおよび継続的デリバリー）ツールです。この機能を利用することで、コードのプッシュやプルリクエストが行われた際に自動的にテストを実行し、その結果を確認することができます。

GitHub Actionsでテストを自動化する基本的な手順は以下の通りです：

1. **ワークフローファイルの作成**: リポジトリのルートに `.github/workflows` ディレクトリを作成し、その中にワークフロー定義ファイル（通常はYAML形式）を作成します。

2. **トリガーの設定**: ワークフローをトリガーするイベント（例えば、`push`、`pull_request`）を指定します。

3. **ジョブの定義**: ワークフロー内で実行する一連のステップを定義します。これには、依存関係のインストール、テストスクリプトの実行などが含まれます。

4. **実行環境の選択**: テストを実行する環境（Ubuntu、Windows、MacOSなど）を選択します。

5. **テストコマンドの実行**: 実際のテストコマンド（例えば、`npm test` または `python -m unittest`）を実行するステップを定義します。

6. **結果の確認**: テストの実行後、結果を確認し、必要に応じてアクションを取ります（例えば、テストが失敗した場合に通知を送るなど）。

GitHub Actionsを使うことで、開発プロセスをより効率的かつ信頼性高く進めることができ、品質の維持に役立ちます。

# コード例
## コード例1
GitHub Actionsを使用して、簡単なNode.jsプロジェクトの自動テストの例をご紹介します。この例では、プロジェクトがGitHubにプッシュされるたびに、ユニットテストを自動的に実行します。

### 前提条件
- Node.jsプロジェクトがGitHubリポジトリにあること。
- テストスクリプトが`package.json`に定義されていること（通常は`npm test`で実行されます）。

### ステップ1: ワークフローファイルの作成
1. GitHubリポジトリのルートに`.github/workflows`ディレクトリを作成します。
2. そのディレクトリ内に新しいYAMLファイル（例えば`nodejs.yml`）を作成します。

### ステップ2: ワークフロー定義
以下は`nodejs.yml`の基本的な内容です。このワークフローは、`main`ブランチにプッシュされるたびにトリガーされ、最新のNode.js環境でテストを実行します。

```yaml
name: Node.js CI

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:

    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [16.x]

    steps:
    - uses: actions/checkout@v2
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v2
      with:
        node-version: ${{ matrix.node-version }}
    - run: npm ci
    - run: npm test
```

### 説明
- `name`: ワークフローの名前。
- `on`: ワークフローをトリガーするイベント。ここでは`main`ブランチへの`push`と`pull_request`イベント。
- `jobs`: 実行するジョブ。ここでは`build`という名前のジョブ。
- `runs-on`: ジョブが実行される仮想環境。この例では`ubuntu-latest`。
- `strategy`: テストを実行するNode.jsのバージョンを指定。
- `steps`: 実行するステップ。コードのチェックアウト、Node.jsのセットアップ、依存関係のインストール、テストの実行。

このファイルをリポジトリにコミットし、`main`ブランチにプッシュすると、GitHub Actionsが自動的にテストを実行します。テストの結果はGitHubのActionsタブで確認できます。


## コード例2
LaravelプロジェクトでGitHub Actionsを利用してDuskテストを自動化するための基本的なワークフローの例になります。

```yaml
name: Laravel CI

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  test:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2

    - name: Set up PHP
      uses: shivammathur/setup-php@v2
      with:
        php-version: '8.0'
        extensions: mbstring, xml, ctype, json, bcmath, mysql

    - name: Install Composer dependencies
      run: composer install --prefer-dist --no-progress --no-suggest

    - name: Generate application key
      run: php artisan key:generate

    - name: Run Laravel Dusk tests
      run: php artisan dusk
```

この例では、LaravelプロジェクトのCIプロセスを設定しています。ここでは、PHPのセットアップ、Composer依存関係のインストール、アプリケーションキーの生成、そして最終的にLaravel Duskテストの実行が含まれます。このワークフローは、`main`ブランチに対するプッシュまたはプルリクエスト時にトリガーされます。


## コード例3
gitへのpushではなくスケジュールに基づきテスト例です。
GitHub Actionsでは、スケジュールに基づいたトリガーを設定することが可能です。以下にそのための基本的なワークフローの例を示します：

```yaml
name: Scheduled CI

on:
  schedule:
    # 毎日午前3時（UTC）に実行
    - cron:  '0 3 * * *'

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2

    # 以下にビルドやテストを実行するためのステップを追加
    - name: Run tests
      run: ./run-tests.sh
```

この例では、`cron`スケジュール式を使って毎日特定の時間にビルドを実行するように設定しています。このようにして、リポジトリへのプッシュやプルリクエスト以外のトリガーでCIワークフローを自動実行することができます。


## デプロイメント例
以下は、GitHub Actionsを使用してデプロイメントを行う基本的なワークフローの例です。この例では、ビルドとテストが成功した後に、特定の環境へのデプロイを実行します。

```yaml
name: Build and Deploy

on:
  push:
    branches: [ main ]

jobs:
  build-and-test:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Build
      run: make build
    - name: Test
      run: make test

  deploy:
    needs: build-and-test
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Deploy to Production
      run: ./deploy-prod.sh
    env:
      ENV_VAR: ${{ secrets.ENV_VAR }}
```

このワークフローでは、`main`ブランチへのプッシュ時にビルドとテストが行われ、それらが成功すると`deploy`ジョブが実行されます。`deploy`ジョブでは、デプロイメントスクリプト（この例では`deploy-prod.sh`）が実行されます。また、環境変数やシークレットを使って、必要な設定を行うことができます。


## 参考記事
https://docs.github.com/ja/actions/learn-github-actions/understanding-github-actions

https://www.kagoya.jp/howto/it-glossary/develop/githubactions/