[Go] Dagger でテストを呼び出す
2025-07-05
Dagger は CI/CD をポータブルにするツール。 スクリプトを Docker コンテナに閉じ込めることで、どこでも実行できるようになります。 気になったのでサンプルアプリを作ってみました。

公式サイト
インストール
Mac では Homebrew でインストールできます。
</>
$ brew install dagger/tap/dagger
$ dagger version
dagger v0.18.12 (docker-image://registry.dagger.io/engine:v0.18.12) darwin/arm64
サンプルアプリ
Go でサンプルアプリを作りました。 ディレクトリ構造は次の通りです。
</>
$ tree -a -L 2
.
├── .dagger
│ ├── dagger.gen.go
│ ├── go.mod
│ ├── internal
│ └── main.go // Dagger のスクリプト
├── .gitignore
├── dagger.json // Dagger の設定ファイル
├── db
├── docker-compose.yml
├── Dockerfile // Dockerfile
├── go.mod
└── main.go
.dagger/main.go に Dagger のスクリプトを記述します。
コード
</>
メモ
アプリのコンテナです Dagger ではベースイメージを指定してゼロから組み立てるケースが多いですが、私は Dockerfile ベースにしました
MySQL のコンテナです。テストで使います
リント
`dagger call lint` で呼び出せます
テスト
`dagger call test` で呼び出せます
テストする前に、マグレーションをします
テストを呼び出す
`dagger call test` で呼び出せます
</>
$ dagger call test
▶ connect 0.2s
▶ load module: . 2.3s
● app: App! 0.0s
▶ .test: String! 34.1s
● parsing command line arguments 0.0s
=== RUN TestGetTasksHandler
--- PASS: TestGetTasksHandler (0.00s)
PASS
ok github.com/enuesaa/lab/data/dagger-go-echo 0.003s
? github.com/enuesaa/lab/data/dagger-go-echo/db [no test files]

GitHub Actions
Actions で dagger call するには `dagger/dagger-for-github` を使います。
</>
name: ci
on:
push:
branches:
- '**'
workflow_dispatch:
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dagger/[email protected]
with:
call: lint
- uses: dagger/[email protected]
with:
call: test
感想
往々にして、テストのセットアップ処理やコマンドは長くなりがちであり、それらが CI に散らばるのを課題に感じてました。 その意味で、Dagger を使えば DRY になります。 一方で、何をどこまで Dagger 経由にするかは考える必要がありそうで、 例えば `go fmt ./...` は、ふつうに直接呼び出したほうが楽でした。