goreleaser について
GoReleaserでソフトウェアのビルドとリリースを設定するためのスキルです。ビルド、パッケージ化、署名、変更履歴、CIワークフローを扱います。
主な機能
- 01ビルドとターゲットの設定
- 02アーカイブとパッケージの設定
- 03Dockerイメージの公開
- 04署名と公証の設定
- 05変更履歴とCIのガイド
活用シーン
- 01GoReleaserのリリース設定
- 02公開前のローカルリリーステスト
- 03パッケージマネージャー経由のバイナリ公開
- 04release-pleaseとGoReleaserの連携
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ aaronflorey/ agent-skills --skill goreleaserインストール後、Claude Code で/goreleaserを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/archives.mdbuilds.mdchangelog.mdci.mddocker.mdexamples.mdhomebrew.mdnfpm.mdsigning.mdtemplates.md詳細
GoReleaser スキル
GoReleaser は、ソフトウェアプロジェクトのリリースプロセスを自動化します。バイナリのビルド、アーカイブの作成、パッケージマネージャーへの公開、Docker イメージのビルド、変更履歴の生成を行います。
クイックリファレンス
| タスク | リファレンスファイル |
|---|---|
| ビルド設定 | references/builds.md |
| アーカイブ(tar.gz、zip) | references/archives.md |
| Docker イメージ | references/docker.md |
| Linux パッケージ(deb/rpm) | references/nfpm.md |
| Homebrew/Scoop/AUR | references/homebrew.md |
| 署名と公証 | references/signing.md |
| 変更履歴の生成 | references/changelog.md |
| CI/CD 統合 | references/ci.md |
| release-please 統合 | ../release-please/references/release-please-goreleaser-unified-workflow.md |
| テンプレート変数 | references/templates.md |
| 完全な例 | references/examples.md |
基本的なコマンド
# Initialize new config
goreleaser init
# Validate configuration
goreleaser check
# Test build locally (no publish)
goreleaser release --snapshot --clean
# Create release (usually run in CI)
goreleaser release
設定ファイル
GoReleaser は .goreleaser.yaml(または .goreleaser.yml)を使用します。スキーマ検証を有効にします。
# yaml-language-server: $schema=https://goreleaser.com/static/schema.json
version: 2
# Project name (defaults to directory name)
project_name: myapp
Go の最小設定
# yaml-language-server: $schema=https://goreleaser.com/static/schema.json
version: 2
builds:
- main: ./cmd/myapp
binary: myapp
goos: [linux, darwin, windows]
goarch: [amd64, arm64]
ldflags:
- -s -w
- -X main.version={{.Version}}
archives:
- formats: [tar.gz]
format_overrides:
- goos: windows
formats: [zip]
changelog:
sort: asc
filters:
exclude:
- "^docs:"
- "^test:"
ビルドターゲット
Go(デフォルト)
builds:
- builder: go # optional, default
main: ./cmd/app
goos: [linux, darwin, windows]
goarch: [amd64, arm64]
goarm: ["6", "7"] # for ARM builds
Rust
builds:
- builder: rust
targets:
- x86_64-unknown-linux-gnu
- x86_64-apple-darwin
- aarch64-apple-darwin
Zig
builds:
- builder: zig
targets:
- x86_64-linux-gnu
- x86_64-macos
- aarch64-macos
ビルド済みバイナリ
builds:
- builder: prebuilt
prebuilt:
path: dist/myapp_{{ .Os }}_{{ .Arch }}/myapp{{ .Ext }}
よく使われるパターン
バージョンの埋め込み(Go)
builds:
- ldflags:
- -X main.version={{.Version}}
- -X main.commit={{.Commit}}
- -X main.date={{.Date}}
CGO の無効化
builds:
- env:
- CGO_ENABLED=0
複数のバイナリ
builds:
- id: cli
main: ./cmd/cli
binary: myapp
- id: server
main: ./cmd/server
binary: myapp-server
公開
Homebrew Tap
brews:
- repository:
owner: myorg
name: homebrew-tap
homepage: https://example.com
description: "My application"
Docker イメージ
dockers_v2:
- dockerfile: Dockerfile
images:
- "ghcr.io/myorg/myapp:{{ .Tag }}"
- "ghcr.io/myorg/myapp:latest"
GitHub リリース
release:
github:
owner: myorg
name: myrepo
draft: false
prerelease: auto
環境変数
| 変数 | 用途 |
|---|---|
GITHUB_TOKEN | GitHub API へのアクセス |
GITLAB_TOKEN | GitLab API へのアクセス |
GITEA_TOKEN | Gitea API へのアクセス |
GORELEASER_KEY | Pro ライセンスキー |
ワークフロー
- 初期化:
goreleaser initで.goreleaser.yamlを作成します - 設定:必要に応じて設定を編集します(リファレンスファイルを参照)
- 検証:
goreleaser checkで設定を検証します - テスト:
goreleaser release --snapshot --cleanでローカルテストを行います - リリース:タグを付けてプッシュすると、CI が
goreleaser releaseを実行します
release-please 統合ルール
プロジェクトで release-please と GoReleaser の両方を使用する場合は、別々の連鎖ワークフローではなく、必ず統合ワークフロー(同じワークフローファイル)で実装します。
標準の統合手順として ../release-please/references/release-please-goreleaser-unified-workflow.md を使用してください。
- 最初に
googleapis/release-please-action@v4を実行します。 - その出力(
release_created、tag_name)を使用して、GoReleaser を条件付きで実行します。 goreleaser release --cleanの前に、ref: ${{ needs.release-please.outputs.tag_name }}をチェックアウトします。GITHUB_TOKENを使用し、GoReleaser のトリガーだけを目的としたカスタム PAT の導入は避けます。
これにより、GitHub Actions のトークン再帰の問題を回避し、リリーストリガー用 PAT による回避策が不要になります。
リファレンスを読み込むタイミング
- ビルドの設定:ビルドオプションの全容については
references/builds.mdを読み込みます - Docker の設定:マルチアーキテクチャイメージについては
references/docker.mdを読み込みます - Linux パッケージ:deb/rpm/apk パッケージについては
references/nfpm.mdを読み込みます - パッケージマネージャー:Homebrew/Scoop/AUR などについては
references/homebrew.mdを読み込みます - CI の設定:GitHub Actions/GitLab CI については
references/ci.mdを読み込みます - release-please の統合:カスタム PAT を使わない統合ワークフローについては
../release-please/references/release-please-goreleaser-unified-workflow.mdを読み込みます - テンプレート構文:使用可能な変数については
references/templates.mdを読み込みます - 完全な例:コピーして使える設定については
references/examples.mdを読み込みます
コメント
Markdown 対応