Zenn
🐈‍⬛

GitHubActions 入門【HelloworldとRails TestによるCI/CD】

2025/03/23に公開

実行環境

  • OS: Linux(Ubuntu)【WSL/Docker/AWS EC2】などお好みで
  • 言語: Ruby 3.2.3
  • WebAPPフレームワーク: Ruby on Rails 8

前提

  • Gitインストール
  • GitHubアカウント作成
  • Githubが提供する、GitHub-Hosted Runnersを使用する(Self-Hosted-Runnersは使わない)

対象読者

  • 初めてGitHubActionsを作成する方
  • とりあえず簡単なサンプルを作って動かしたい方

Helloworldなハンズオン

環境構築

GitHub CLIコマンドのインストール

sudo apt update
sudo apt install gh -y

インストールされたか確認

gh --version

自分のアカウントをghコマンドで認証する

gh auth login
  • GitHub.comを選択
  • HTTPSを選択
  • Login with a web browserを選択
  • 「XXXX-XXXX」形式のコードをコピーする
  • エンターを押してブラウザで認証

リポジトリ一覧表示

gh repo list

リポジトリの作成

パブリックリポジトリを作成する

gh repo create my-gh-test --public --clone --add-readme

--public: パブリックリポジトリを作成
--clone: リポジトリ作成時にクローンする
--add-readme: READMEを作成

ワークフローファイルの作成

先ほど作成したリポジトリがクローンされたフォルダに移動

cd my-gh-test

ワークフローフォルダとファイルを作成

mkdir -p .github/workflows
touch .github/workflows/hello.yml

VSCodeのツリー上の表記

ファイルを記述
.github/workflows/hello.yml

name: Hello # workflowの名前
on: push # イベント、この場合push時workflow実行
jobs: # ここにジョブを記載
  hello: # ジョブ名
    runs-on: ubuntu-latest # 実行OS、他にもMacやWindowsがあるがUbuntuが一番低コスト
    steps:
      - run: echo "Hello, workd" # runにシェルのコマンドを記載する
      - uses: actions/checkout@v4 # ワークフロー内でチェックアウトactionを実行
        with:
          ref: main # actionを実行する際の引数、mainブランチを指定

ワークフローを実行するためにgit push

git add .
git commit -m "add hello.yml"
git push

ブラウザで実行ログの確認

対象のリポジトリにて

  • Actionsタブクリック
  • Helloサイドメニュークリック
  • add hello.ymlのコミットのワークフローをクリック
  • helloをクリック

ymlファイルで設定したシェルやcheckoutアクションが実行されたことを確認可能
無事Helloworld完了!

Ruby on Railsのテストを使ったハンズオン

環境構築

RubyとRailsのインストール

sudo apt update
sudo apt install curl gnupg2 build-essential libssl-dev libreadline-dev zlib1g-dev libffi-dev libyaml-dev

# rbenvのインストール
curl -fsSL https://github.com/rbenv/rbenv-installer/raw/main/bin/rbenv-installer | bash

# rbenvの設定
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
source ~/.bashrc

# ruby-buildのインストール
rbenv install --list

rbenv install 3.2.3
rbenv global 3.2.3
gem install bundler
gem install rails
rbenv rehash
rails -v

これから使用するサンプルリポジトリについて

  • railsアプリを新規作成した状態
  • 簡単な被テスト関数とテストが作成済み
    被テスト対象ファイル
    /home/yuya/rails-test/app/helpers/application_helper.rb
    テスト対象関数(簡単な引数を足し算して返す関数)
module ApplicationHelper
    def add_numbers(a, b)
        a + b
    end
end

テストファイル
/home/yuya/rails-test/test/helpers/application_helper_test.rb
テストコード(足し算の結果を想定した簡単なテスト)

require 'test_helper'

class ApplicationHelperTest < ActionView::TestCase
  test "add numbers test" do
    assert_equal add_numbers(1, 2), 2
  end
end
  • 今回使用するymlファイル
    /home/yuya/rails-test/.github/workflows/ci.yml

今回はrailsのテストを実行するため、必要なパッケージのインストールが必要になるのでそこに注目!

name: CI  # ワークフローの名前(CI: 継続的インテグレーション)

on:  # ワークフローの実行トリガー
  pull_request:  # プルリクエストが作成または更新されたときに実行
  push:  # ブランチにプッシュされたときに実行
    branches: [ main ]  # `main` ブランチへのプッシュ時のみ実行

jobs:  # ジョブ(ワークフロー内の処理)の定義
  test:  # ジョブID
    runs-on: ubuntu-latest  # Ubuntuの最新バージョンで実行

    steps:  # ジョブ内で実行するステップのリスト
      - name: Install packages  # 必要なパッケージをインストール
        run: sudo apt-get update && sudo apt-get install --no-install-recommends -y build-essential git libyaml-dev pkg-config google-chrome-stable  

      - name: Checkout code  # リポジトリのコードをチェックアウト
        uses: actions/checkout@v4  

      - name: Set up Ruby  # Ruby のセットアップ
        uses: ruby/setup-ruby@v1  
        with:
          ruby-version: .ruby-version  # `.ruby-version` ファイルに指定されたバージョンを使用
          bundler-cache: true  # Bundlerのキャッシュを有効にし、インストール時間を短縮

      - name: Run tests  # テストを実行
        env:
          RAILS_ENV: test  # Railsのテスト環境を設定
        run: bin/rails test  # `bin/rails test` を実行してテストを実行

Ruby on railsサンプルリポジトリをクローンして自分のリポジトリにpushする

# サンプルクローン
git clone https://github.com/blossom54321/rails-test.git
cd rails-test
# サンプルの.gitフォルダは削除
sudo rm -r .git
# 新しく.git作成
git init
# 自分のリポジトリ作成
gh repo create rails-test --public --source=.
# 自分のリポジトリにpushする
git push --set-upstream origin master

フォルダを移動してbundle installを実行

cd rails-test
bundle install

試しにrails testを実行

rails test

テスト結果【特にエラーなく成功することを確認】


Run options: --seed 51280

# Running:

.

Finished in 0.015116s, 66.1569 runs/s, 66.1569 assertions/s.
1 runs, 1 assertions, 0 failures, 0 errors, 0 skips

プルリクエストを作成して成功確認

ブランチを作成してpush

git checkout -b newbranch
naon README.md
# なんでもいいので編集してCtrl + xして保存
git add .
git commit -m "成功"
git push --set-upstream origin newbranch

GitHubのリポジトリ画面から、新しいプルリクエストを作成


しばらく待つとプルリクエスト内にCIの結果が表示される


プルリクエストを作成して失敗確認

ブランチを作成してわざとテスト失敗するように修正してpush

git checkout -b newbranch-fail
nano test/helpers/application_helper_test.rb
# assert部分でテストを失敗させるためにわざと予測結果を3から2に変更する
assert_equal add_numbers(1, 2), 2 # 3を2に変更
git add .
git commit -m "失敗"
git push --set-upstream origin newbranch-fail

先ほどと同じようにプルリクエスト作成

少し待って結果が表示されたら、失敗したことを確認する

テストに失敗してエラーになっていることが確認できる

まとめ

  • 簡単なHelloworldを実行するために、「.github/workflows/」配下にymlファイルを作成することで動作確認ができた
  • 実践的なハンズオンを実施するために、Ruby on Railsアプリケーションのtestを使ってプルリクエスト時のCIを作成して、動作確認した
  • この記事を完了した方は書籍や公式ドキュメントなどで細かい周辺知識を埋めることをおすすめします

Discussion

ログインするとコメントできます