GitHub Actions 基本ビルドとテスト

GitBeginner
オンラインで実践に進む

はじめに

現代のソフトウェア開発において、継続的インテグレーション(CI: Continuous Integration)は極めて重要なプラクティスであり、開発者は頻繁にコードの変更を中央リポジトリにマージします。これらの変更を検証するために、自動化されたビルドとテストが実行されます。

GitHub Actions は、GitHub 内でビルド、テスト、デプロイメントパイプラインを直接自動化できる人気の CI/CD プラットフォームです。

この実験(Lab)では、Node.js プロジェクト用の基本的な GitHub Actions ワークフローを作成する方法を学びます。Node.js 環境の設定、依存関係のインストール、テストの実行といったステップを定義します。最後に、これらの変更をコミットし、GitHub リポジトリにプッシュします。

この実験は、以前の実験で作成したリポジトリを基盤とします。github-actions-demo リポジトリをクローンし、Node.js プロジェクト用の CI ワークフローを作成します。

この実験を終えるまでに、.yml ワークフローファイルの構造と、必須の CI ステップを構成する方法を理解するでしょう。

uses actions/setup-node@v4 を使用して Node.js のセットアップを追加する

このステップでは、リポジトリをクローンし、Node.js 環境セットアップを含むワークフローファイルを作成します。GitHub Actions ワークフローは、リポジトリの .github/workflows ディレクトリにある YAML ファイルで定義されます。

  1. github-actions-demo の GitHub リポジトリページで、緑色の Code ボタンをクリックします。
  2. HTTPS タブが選択されていることを確認し、URL をコピーします。URL は https://github.com/your-username/github-actions-demo.git のような形式になります。
  3. LabEx 環境でターミナルを開きます。デフォルトのパスは ~/project です。
  4. git clone コマンドを使用してリポジトリをダウンロードします。your-username はご自身の GitHub ユーザー名に置き換えてください。
cd ~/project
git clone https://github.com/your-username/github-actions-demo.git
  1. クローンしたリポジトリに移動します。
cd ~/project/github-actions-demo
  1. .github/workflows ディレクトリ内に node-ci.yml という名前の新しいファイルを作成します。
touch .github/workflows/node-ci.yml
  1. WebIDE で .github/workflows/node-ci.yml を開き、ワークフロー名とトリガーの追加から始めます。
name: Node.js CI

on: [push]
  1. jobs セクションを追加し、ランナーを指定してビルドジョブを定義します。
jobs:
  build:
    runs-on: ubuntu-latest
  1. steps セクションを追加します。まず、リポジトリのコードを取得するためのチェックアウトステップを追加します。
steps:
  - uses: actions/checkout@v4
  1. Node.js セットアップステップを追加します。
- name: Use Node.js
  uses: actions/setup-node@v4
  with:
    node-version: "20"

完成したファイルは次のようになります。

name: Node.js CI

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4
      - name: Use Node.js
        uses: actions/setup-node@v4
        with:
          node-version: "20"

解説

  • name: ワークフローの名前です。
  • on: [push]: コードがリポジトリにプッシュされるたびにワークフローをトリガーします。
  • jobs: ワークフロー内で実行されるすべてのタスクをグループ化します。
  • runs-on: ubuntu-latest: ジョブが、GitHub がホストする最新バージョンの Ubuntu を実行している仮想マシン上で実行されるように設定します。
  • steps: タスクのシーケンスです。
  • uses: actions/checkout@v4: ワークフローがアクセスできるようにリポジトリをチェックアウトします。
  • uses: actions/setup-node@v4: ランナーに Node.js をインストールするための公式アクションです。ここではバージョン '20' を指定しています。

run npm install で依存関係をインストールするステップを追加する

Node.js による環境設定が完了したので、CI パイプラインにおける次の論理的なステップは、プロジェクトの依存関係をインストールすることです。これにより、ビルドやテストの前に、アプリケーションが必要とするすべての外部ライブラリが利用可能になります。

.github/workflows/node-ci.yml を再度開き、依存関係をインストールするステップを追加します。

steps セクションの末尾に以下の行を追加します(インデントを維持するように注意してください):

- name: Install dependencies
  run: npm install

完全な .github/workflows/node-ci.yml は以下のようになるはずです:

name: Node.js CI

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4
      - name: Use Node.js
        uses: actions/setup-node@v4
        with:
          node-version: "20"
      - name: Install dependencies
        run: npm install

解説

  • run: npm install: これは、ランナーのシェルで npm install コマンドを実行します。このコマンドは package.json ファイル(後で作成します)を読み込み、リストされている依存関係をインストールします。

run npm test でテストを実行するステップを追加する

依存関係をインストールした後、継続的インテグレーション(CI)において最も重要な部分は、自動化されたテストを実行することです。これにより、新しい変更が既存の機能を壊していないことを保証します。

.github/workflows/node-ci.yml を開き、テストを実行するステップを追加します。

steps セクションの末尾に以下の行を追加します。

- name: Run tests
  run: npm test

最終的な .github/workflows/node-ci.yml は以下のようになります。

name: Node.js CI

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4
      - name: Use Node.js
        uses: actions/setup-node@v4
        with:
          node-version: "20"
      - name: Install dependencies
        run: npm install
      - name: Run tests
        run: npm test

解説

  • run: npm test: これは package.json で定義されているテストスクリプトを実行します。テストが失敗した場合(ゼロ以外のコードで終了した場合)、GitHub Action ワークフローは失敗としてマークされます。

package.json とシンプルなテストファイルの作成

作成したワークフローを実際に機能させるためには、Node.js のプロジェクト構造が必要です。具体的には、npm install には package.json ファイルが必要であり、npm test にはテストスクリプトが定義されている必要があります。

  1. リポジトリのディレクトリにいることを確認します:
cd ~/project/github-actions-demo
  1. リポジトリのルートに package.json ファイルを作成します:
touch package.json
  1. package.json を開き、以下の内容を追加します。これにより、基本的なプロジェクトと、常に成功する(コード 0 で終了する)シンプルなテストスクリプトが定義されます。
{
  "name": "github-actions-demo",
  "version": "1.0.0",
  "description": "Demo project",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Running tests...\" && exit 0"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}
  1. 次に、アプリケーションコードを表すために index.js を更新します。
echo "console.log('Hello, GitHub Actions!');" > index.js

これで、定義したワークフローの要件を満たす最小限の Node.js プロジェクトが完成しました:

  1. npm install が実行されます(依存関係がなくても、package.json がチェックされます)。
  2. npm test がコマンド echo "Running tests..." && exit 0 を実行します。

コミット、プッシュ、およびワークフロー実行でのビルド/テストの検証

ワークフロー定義とプロジェクトファイルを作成したので、これらを GitHub にコミットしてプッシュする必要があります。これらのコミットをプッシュすると、Action ランナーがトリガーされ、定義したステップが実行されます。

  1. リポジトリのディレクトリにいることを確認します。
cd ~/project/github-actions-demo
  1. リポジトリのステータスを確認します。
git status
  1. すべてのファイルをステージングエリアに追加します。
git add .
  1. 説明的なメッセージを付けて変更をコミットします。
git commit -m "Add Node.js CI workflow and project files"
  1. 変更を GitHub 上のリモートリポジトリにプッシュします。
git push

認証に関する注意:
git push を実行すると、WebIDE は自動的に認証を求めます。以下の詳細な手順に従ってください。

  1. "The extension 'GitHub' wants to sign in using GitHub." というメッセージが表示されたポップアップが表示されます。「Allow」をクリックします。
  2. 新しい通知が表示されます。「Copy&Continue to GitHub」をクリックし、次のプロンプトで「Open」をクリックします。
  3. 開いたブラウザウィンドウで GitHub アカウントにログインし、コピーされた認証コードを入力します。認証を確認した後、ページは自動的に閉じます。
  4. 数秒待つと、ターミナルでプッシュ操作が正常に完了したことが表示されます。

プライバシーに関する注意: WebIDE は認証目的で GitHub アカウントへのフルアクセスを要求します。プライバシーの懸念については心配する必要はありません。現在の実験(lab)が完了すると、LabEx VM は直ちに破棄され、資格情報や認証情報は保持されません。

ワークフロー実行の検証

  1. Web ブラウザでリポジトリ(https://github.com/your-username/github-actions-demo)にアクセスします。
  2. リポジトリページの最上部にある Actions タブをクリックします。
  3. ワークフロー実行が一覧表示されているはずで、おそらく「Add Node.js CI workflow and project files」または「Node.js CI」という名前です。

注意: コードをプッシュすると、リポジトリ内に複数のワークフローファイルがある場合、複数の Action がトリガーされることがあります。左側のサイドバーのワークフロー名を確認するか、右側のワークフロー実行リストを使用して、正しいワークフロー実行を特定してください。

  1. ワークフロー実行のタイトルをクリックし、次に build ジョブをクリックして詳細なログを確認します。

各ステップを展開して、何が起こったかを確認できます。

  • Checkout code: リポジトリがチェックアウトされたことを示します。
  • Use Node.js: Node.js v20 がインストールされたことを示します。
  • Install dependencies: npm install が実行されたことを示します。
  • Run tests: npm test が実行され、Running tests... という出力が表示されるはずです。

すべてのステップが正常に完了した場合、CI ワークフローは正しく機能しています。

GitHub Actions logs

まとめ

この実験(Lab)では、GitHub Actions を使用して基本的な継続的インテグレーション(CI)ワークフローを正常に作成しました。以下の方法を学習しました。

  1. .github/workflows ディレクトリ内に .yml ワークフローファイルを作成する方法。
  2. push イベントでトリガーされるようにワークフローを設定する方法。
  3. actions/setup-node アクションを使用して Node.js 環境を設定する方法。
  4. 依存関係のインストール (npm install) とテストの実行 (npm test) のステップを追加する方法。
  5. ワークフローをサポートするための基本的な Node.js プロジェクト構造を設定する方法。

これらのスキルは、変更を加えるたびにコードの検証を自動化できる、現代の DevOps プラクティスの基礎を形成します。