【入門編】ローカルでGitHub Actionsをシミュレート!「act」を使ってCI/CDフィードバックループを爆速化する – バージョン管理・CI/CD活用バイブル

GitHubに修正をプッシュして、ブラウザでActionsのタブを開き、ぐるぐる回るインジケータを祈るように見つめる……。そして5分後、タイポ(打ち間違い)ひとつで無情にも赤バツ(❌)が表示され、また「fix typos」というコミットを積んでプッシュする。

誰もが一度は経験する、この「Push & Pray(プッシュして祈る)」のループ。これ、本当に時間がもったいないですよね。

こんにちは! 頼れる先輩エンジニアとして、今日も皆さんの開発効率を極限まで高めるお手伝いをします。

今回ご紹介するのは、GitHub Actionsのワークフローをあなたのローカル環境(PC上)で、プッシュすることなく爆速でシミュレート・実行できる魔法のツール「act」です。

この記事を読めば、CI/CDの試行錯誤にかかる時間が10分の1に激減し、コミットログを汚すことなく、手元でスマートにデバッグできるようになります。一緒にその強力な世界へ踏み出してみましょう!

—

1. なぜ「act」が必要なのか? その圧倒的な存在意義

通常、GitHub ActionsはGitHubが管理するクラウド上のサーバー(ランナー)で動作します。そのため、

  • 構文エラーがないか確かめたいだけ
  • 環境変数の設定が正しいか確認したいだけ
  • シェルスクリプトの1行をデバッグしたいだけ

といった小さな確認であっても、毎回 `git commit` して `git push` しなければなりませんでした。

「act」はこの常識を覆します。

actは、GitHub Actionsの定義ファイル(YAML)を読み込み、ローカルに立ち上げたDockerコンテナを使って、GitHub Actionsのランナー環境をそっくりそのまま再現します。

【従来のフロー】
コード修正 ➔ コミット ➔ プッシュ ➔ クラウドでの実行待ち(数分) ➔ 失敗 ➔ 再修正(絶望)

【act を導入したフロー】
コード修正 ➔ ローカルで「act」実行(数秒で結果判明) ➔ 修正・確認 ➔ 完璧な状態でプッシュ!

この「フィードバックループの高速化」こそが、一流のエンジニアが開発効率を爆発的に高めるための極意なのです。

—

2. 前提条件とインストール

actは、ローカルで仮想環境(コンテナ)を起動するためにDockerを使用します。まずは準備を整えましょう。

前提条件

お使いのPCに、以下のいずれかのDocker環境がインストールされ、起動している必要があります。

  • Docker Desktop(Windows / macOS)
  • OrbStack(macOS用の非常に軽量な代替品。先輩のイチオシです)
  • Rancher Desktop または Lima などのコンテナ環境

インストール手順

お使いのOSに合わせて、以下のコマンドをターミナル(またはコマンドプロンプト)で実行してください。

macOS (Homebrewを使用)

brew install act

Windows (Chocolatey または Scoop を使用)

Chocolateyの場合
choco install act-cli

Scoopの場合
scoop install act

Linux (インストールスクリプトを使用)

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

インストールが終わったら、正しく入ったか確認してみましょう。

act –version

バージョン情報が表示されれば、準備は完了です!

—

3. 精度100%の「Hello World」で動作確認!

では、実際にGitHub Actionsのワークフローを作成し、actで動かしてみましょう。

適当なテスト用のディレクトリを作成し、VS Codeなどのエディタで開いてください。

Step 1: ワークフローファイルの作成

GitHub Actionsのルールに従い、`.github/workflows` というフォルダを作成し、その中に `hello.yml` という名前でファイルを作ります。

.github/workflows/hello.yml
name: Local Test Workflow

トリガー(今回はGitHubへのpushイベントをシミュレートします)
on: [push]

jobs:
say-hello:
# 実行環境(actはこれを検知してDockerコンテナを起動します)
runs-on: ubuntu-latest

steps:
# Step 1: リポジトリのコードをチェックアウトする(お約束のアクション)

  • name: Checkout code

uses: actions/checkout@v4

# Step 2: 簡単なメッセージを出力する

  • name: Run a one-line script

run: echo “こんにちは!ローカルのGitHub Actionsへようこそ!”

# Step 3: 複数行のコマンドと環境変数のテスト

  • name: Run a multi-line script

env:
MY_VAR: “これはローカルの環境変数です”
run: |
echo “現在のステップを実行中…”
echo “設定された値: $MY_VAR”

Step 2: 運命のファーストラン!

ターミナルを開き、プロジェクトのルートディレクトリ(`.github` フォルダがある場所)で、ただ一言、こう打ち込んでください。

act

💡 初回実行時の重要な選択肢

初めて `act` を実行すると、ターミナルに以下のような「どのサイズのDockerイメージを使用しますか?」という質問が表示されます。

? Please choose the image to use with force:

  • Micro (~110MB): Bare minimal image (no git, curl, etc.)
  • Medium (~500MB): Standard image with common tools (recommended)
  • Large (~17GB): Full GitHub runner image (heavy!)
  • 結論から言うと、まずは「Medium」を選択するのがベストです。
  • Micro は軽すぎることにより、`git` や `curl` すら入っていないため、多くのアクションが途中で失敗します。
  • Large は本家GitHub Actionsに最も近いですが、サイズが17GB以上あり、PCのストレージとダウンロード時間を激しく消費します。
  • Medium であれば、大半の軽量なテスト(テストコードの実行や静的解析など)は問題なく動作します。

矢印キーで `Medium` を選択し、Enterを押してください。

—

Step 3: 実行結果の確認

Dockerイメージのダウンロード(初回のみ数分かかります)が終わると、以下のようなログがターミナルに美しく流れるはずです。

[Local Test Workflow/say-hello] 🚀 Start image=catthehacker/ubuntu:act-latest
[Local Test Workflow/say-hello] 🐳 docker run image=catthehacker/ubuntu:act-latest mac_address=
[Local Test Workflow/say-hello] ☁ git clone/checkout clone_depth=0 filter=
[Local Test Workflow/say-hello] ⭐ Run Run a one-line script
[Local Test Workflow/say-hello] 🐳 docker exec cmd=[bash –noprofile –norc -e -o pipefail -c echo “こんにちは!ローカルのGitHub Actionsへようこそ!”] user=
| こんにちは!ローカルのGitHub Actionsへようこそ!
[Local Test Workflow/say-hello] ✅ Success – Run a one-line script
[Local Test Workflow/say-hello] ⭐ Run Run a multi-line script
[Local Test Workflow/say-hello] 🐳 docker exec cmd=[bash –noprofile –norc -e -o pipefail -c echo “現在のステップを実行中…”
echo “設定された値: $MY_VAR”
] user=
| 現在のステップを実行中…
| 設定された値: これはローカルの環境変数です
[Local Test Workflow/say-hello] ✅ Success – Run a multi-line script

緑色の文字で `Success` と表示されましたか?
おめでとうございます! これであなたは「手元でGitHub Actionsを完全制御する力」を手に入れました。

—

4. 現場で震えるほど役立つ!極限のデバッグフローとTips

基本ができたところで、実際のプロジェクトでactを「しゃぶり尽くす」ための実践的なテクニックを紹介します。ここからが本当のプロの領域です。

Tip 1: 特定のジョブだけを狙い撃ちして実行する

大きなプロジェクトになると、1つのファイルに多くのJob(ビルド、Lint、テスト、デプロイなど)が定義されます。全部動かすと時間がかかるので、テストジョブだけを動かしたいですよね。

そんな時は `-j` オプションを使います。

「test」というIDのジョブだけをピンポイントで実行
act -j test

Tip 2: ローカルで「シークレット(APIキーなど)」を安全に渡す

GitHub Actionsでは、外部サービスへの接続のために `secrets.GITHUB_TOKEN` や `secrets.SLACK_WEBHOOK_URL` などを利用します。

actでこれらを再現するには、プロジェクトのルートに `.secrets` というファイル(`.gitignore` に必ず追加してください!)を作成し、そこにキーと値を記述します。

.secrets ファイルの例
SLACK_WEBHOOK_URL=https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
MY_API_KEY=local_dummy_api_key

これを読み込ませて実行します。

シークレットファイルを指定して実行
act –secret-file .secrets

これで、ローカルでもAPI連携部分のロジックが安全にテストできます。

Tip 3: プラットフォーム(OS)の差異によるエラーを回避する

ワークフローに `runs-on: ubuntu-latest` と書いてあればactは自動でLinuxコンテナを起動しますが、たまに `runs-on: windows-latest` や `macos-latest` が指定されていると、actはデフォルトで処理できません。

その場合は、ローカルの実行環境を一時的にubuntuとしてマッピングしてあげると便利です。

windows-latest や macos-latest を、ローカルのUbuntuイメージに代替させて実行
act -P ubuntu-latest=catthehacker/ubuntu:act-latest \
-P macos-latest=catthehacker/ubuntu:act-latest

—

5. まとめ:毎日の作業が劇的に楽になる、あなたへのエール

最後にもう一度、今回手に入れた強力な武器を振り返ってみましょう。

1. 「act」は、GitHub ActionsをローカルのDocker上で完全再現する。
2. プッシュ不要で動作確認ができるため、開発のフィードバックループが劇的に速くなる。
3. シークレットや特定のジョブの指定など、実務に必要なデバッグ機能も網羅している。

これを導入するだけで、あなたのコミット履歴から「fix: test pipeline again」「try to fix actions」といった悲しいコミットが完全に消え去ります。常に一発で美しくパスする、洗練されたスマートなプルリクエストを作成できるようになるのです。

新しいツールを学ぶのは少し勇気が要りますが、一度覚えてしまえばこれからのエンジニア人生で何百時間もの節約になります。ぜひ、今日のプロジェクトから `act` を使ってみてくださいね。

もし分からないことがあれば、いつでも頼れる先輩としてサポートします。Happy Coding!

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