BLOG

ブログ

2025/09/22 技術系

GitHub Actionsをローカルでテスト!「act」でワークフロー開発を効率化する方法

この記事を書いた人 Rt.S
画像1

こんにちは、Rt.Sです!

最近では開発において、CI/CDの自動化ツールであるGitHub Actionsを使うことがほぼ標準になっています。しかし、ワークフローを編集して動作を確認するには、基本的にpushするかPRを作成して実行する必要があります。

開発をしていると、こんな経験ありませんか?

  • 小さな修正のたびにpushしてCIを待つ…
  • CIで失敗してしまい、修正してまたpush…
  • ローカルでは動くのにCIで失敗する…

ちょっとした修正でも「push → CI実行を待つ」の繰り返しは手間がかかりますよね。
そこで今回は、ローカルで簡単に GitHub Actions のワークフローをデバッグできるツール「act」を紹介します。

実行環境

  • Apple M1 Macbook Air(macOS 15.5)
  • Homebrew 4.5.13
  • Docker version 28.3.2
  • act version 0.2.79
  • go1.24.5 darwin/arm64

act について

actとは?

nektos/actは、GitHub Actionsのワークフローをローカルで実行できるCLIツールです。

特徴としては、

  • .github/workflows以下のワークフローを そのままローカルで実行可能
  • DockerコンテナでGitHub-hosted runner とほぼ同等の環境を再現
  • イベント指定やジョブ単位の実行が可能

CI環境と近い条件でローカル実行できるので、デバッグ効率が大幅に向上します。

インストール方法

私は、Mac環境なので、Homebrewを使用してインストールします。

Mac (Homebrew)

brew install act

Linux

curl --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/nektos/act/master/install.sh | sudo bash

Windows (scoop)

scoop install act

インストールできたら以下のコマンドでバージョン確認

act --version

その他インストール方法はInstallationをご覧ください。

基本操作

基本的な使い方はUsage guideに詳しく載っています。
ここでは実際にデモを見ながら解説します。

デモ:Go言語の簡単なテストをローカルで実行してみる

今回は、プルリクエスト時にGitHub Actionsでテストを実行することを想定したGo言語プロジェクトを用意します。
最小構成の処理とテストをactで動かしてみましょう。

.
├── .git /
├── .github
│   └── workflows
│       └── test.yml
├── go.mod
├── main_test.go
└── main.go

Goコードとテストを用意

まず、ディレクトリを作成して移動します。

mkdir act-demo
cd act-demo

go.mod

Goのモジュールを初期化します。

go mod init act-demo

main.go

package main

func Add(a, b int) int {
    return a + b
}

main_test.go

package main

import "testing"

func TestAdd(t *testing.T) {
    if Add(2, 3) != 5 {
        t.Errorf("expected 5 but got %d", Add(2, 3))
    }
}

ワークフローを作成

.github/workflows/test.ymlを作成します。
(コードの詳細な説明は割愛します)

name: act demo Go Test

on:
  push:
  pull_request:

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - name: Set up Go
        uses: actions/setup-go@v5
        with:
          go-version: 1.24.5

      - name: Install dependencies
        run: go mod tidy

      - name: Test
        run: go test ./...

gitリポジトリを初期化

actは、Gitのコンテキストがないと警告が出てしまうため、リポジトリを初期化しておきます。

git init
git add .
git commit -m "Initial commit"

actを実行

以下のコマンドを実行して、ワークフローを実行します。

Apple Silicon搭載のMacの場合、--container-architectureactオプションを指定しないと使用するDockerイメージがamd64専用の場合に警告が出てしまいます。

# M1 Macでの実行例
act --container-architecture linux/amd64

テストが実行され、以下のようなログが出力されます。

| ok    act-demo        0.027s
[act action demo/test]   ✅  Success - Main Test [25.445749209s]

テストが実行され、成功したことが確認できます!
その他も各stepsの実行結果が確認できます。

失敗パターンを試してみる

main.goをわざとバグらせます。

package main

func Add(a, b int) int {
    return a + b + 1 // バグ
}

再度 act を実行すると、テストが失敗するのが確認できます。

| --- FAIL: TestAdd (0.00s)
|     main_test.go:7: Add(2, 3) = 6; want 5
| FAIL
| FAIL  act-demo        0.028s
| FAIL
[act action demo/test]   ❌  Failure - Main Test [19.378577958s]

このように、失敗のデバッグもローカルですぐ試せるのがactの大きなメリットですね!

まとめ

今回はテストを想定してデモを行いましたが、その他、静的解析やDockerビルド、AWSデプロイの検証などもローカルで手軽に試すことができます。

  • GitHub Actionsの動作確認にいちいちpushするのは手間
  • actを使えばローカルでワークフローを実行可能
  • DockerでCI環境を再現できるので、push前のデバッグに最適

actを導入するとワークフロー開発の試行回数を増やせるので、CI/CDの改善に取り組むならぜひ使ってみてください!


株式会社ウイングドアは福岡のシステム開発会社です。
現在、私達と一緒に"楽しく仕事が出来る仲間"として、新卒・中途採用を絶賛募集しています!
ウイングドアの仲間達となら楽しく仕事できるかも?と興味をもった方、
お気軽にお問い合わせ下さい!

アーカイブ