GitHub Actionsの導入方法をわかりやすく解説

その他

概要

GitHub Actionsを使って、ビルドやテスト、デプロイを自動化する方法を簡単にまとめてみました。

GitHub Actionsとは

GitHub Actionsは、コードのビルドやテスト、デプロイを自動化するためのCI/CDプラットフォームです。
.github/workflowsディレクトリに配置したYAMLファイルに従って、特定のイベント(pushpull_requestなど)が発生すると自動的にワークフローが実行されます。

YAMLファイルの基本

GitHub Actionsでワークフローを設定する際に必要なYAMLファイルについて、基本的な要素を解説します。

主な要素

  • name:ワークフローの名前を指定します。
  • on:どのイベントが発生した時にワークフローを実行するかを指定します。
  • jobs:実行するタスクの単位を設定します。
  • runs-on:ワークフローを実行する環境(OS)を指定します。
  • steps:ジョブ内で実行する各処理を定義します。
  • uses:GitHubやサードパーティが提供するアクションを利用します。
  • run:シェルコマンドを直接実行します。

イベントの指定(on)

どのイベントが発生したらワークフローを実行するかを指定します。以下は、mainブランチにpushされた際にワークフローを実行する設定例です。

YAML
on:
  push:
    branches:
      - main

設定できるイベントの例:

イベント名説明
pushpush時に実行
pull_requestpull request作成時
forkfork時に実行
schedule定期的に実行
workflow_dispatch手動で実行
workflow_run他のワークフロー完了時

ジョブの定義(jobs)

ジョブとは、ワークフロー内で実行するタスクの単位です。以下は、ジョブを定義する基本の書き方です。

YAML
jobs: 
  jobid:
    name: jobname
    runs-on: ubuntu-latest 
    steps: ...

実行環境の設定(runs-on)

ジョブを実行する環境(OS)を指定します。たとえば、Ubuntuを使う場合は以下のように記述します。

YAML
runs-on: ubuntu-latest 

ステップの定義(steps)

ジョブ内で実行する個々の処理を定義します。複数のステップを順番に実行することでワークフローを構成します。

YAML
steps:
  - name: Checkout code
    uses: actions/checkout@v2

  - name: Set up Ruby
    uses: ruby/setup-ruby@v1
    with:
      bundler-cache: true

  - name: Setup Node.js
    uses: actions/setup-node@v4
    with:
      node-version: "20"
      cache: npm

  - run: node --version

ステップの定義(steps)

ジョブ内で実行する個々の処理を定義します。複数のステップを順番に実行することでワークフローを構成します。

YAML
steps:
  - name: Checkout code
    uses: actions/checkout@v2

  - name: Set up Ruby
    uses: ruby/setup-ruby@v1
    with:
      bundler-cache: true

  - name: Setup Node.js
    uses: actions/setup-node@v4
    with:
      node-version: "20"
      cache: npm

  - run: node --version

他のアクションの利用(uses)

usesを使うことで、GitHubやサードパーティが提供しているアクションを簡単に利用できます。以下は、Node.jsをセットアップするアクションの例です。

YAML
- name: Setup Node.js
  uses: actions/setup-node@v4
  with:
    node-version: "20"
    cache: npm

コマンドの実行(run)

runを使うと、指定したコマンドを実行できます。以下の例では、Node.jsのバージョンを確認するコマンドを実行します。

YAML
- run: node --version

サンプルワークフロー(RubyのCI)

実際にRubyプロジェクトのテストとリンターを実行するためのCI設定の例です。実行環境に近い環境を用意し、データベースのセットアップからテスト実行まで行っています。

YAML
name: Run rspec & rubocop

on:
  push:

jobs:
  ci:
    runs-on: ubuntu-latest
    timeout-minutes: 10
    services:
      postgres:
        image: postgres
        ports:
          - 5432:5432
        env:
          RAILS_ENV: test
          POSTGRES_PASSWORD: password
          POSTGRES_USER: postgres
        options: >-
          --health-cmd pg_isready
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5

    steps:
      - name: Checkout code
        uses: actions/checkout@v2

      - name: Set up Ruby
        uses: ruby/setup-ruby@v1
        with:
          bundler-cache: true

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: "20"
          cache: npm

      - run: node --version

      - name: yarn install
        run: |
          npm install yarn
          yarn install

      - name: Bundler and gem install
        run: |
          gem install bundler
          bundle install --jobs 4 --retry 3 --path vendor/bundle

      - name: Database create and migrate
        run: |
          cp config/database.yml.ci config/database.yml
          bundle exec rails db:create RAILS_ENV=test
          bundle exec rails db:migrate RAILS_ENV=test

      - name: Run rspec
        run: bundle exec rspec
        
      - name: Run rubocop
        run: bundle exec rubocop

このサンプルでは、コードのチェックアウト、RubyとNode.jsのセットアップ、データベースのセットアップ、テストの実行まで一連の流れを定義しています。

まとめ

GitHub ActionsのYAMLファイルでは、どのイベントで実行するか、どの環境で実行するか、どのタスクを実行するかを詳細に設定できます。まずは基本の設定から始めて、プロジェクトに合わせて拡張していきましょう。

コメント

タイトルとURLをコピーしました