0Pricing
Go Academy · レッスン

CLIツールの配布

クロスコンパイル、goreleaser、Homebrew tap

「CLIツールの配布」はCoddyKit上の無料Go Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはGo Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Go Academyコースには全4レッスンが含まれています。

ローカル配布のための go install

go install github.com/user/tool@latest はバイナリをコンパイルし、$GOPATH/bin にインストールします。ユーザー側に Go のインストールが必要です。

クロスコンパイル

Go は標準でクロスコンパイルに対応しています。GOOS と GOARCH を設定して、異なるオペレーティングシステムを対象にします:

GOOS=linux  GOARCH=amd64 go build -o myapp-linux-amd64
GOOS=darwin GOARCH=arm64 go build -o myapp-darwin-arm64
GOOS=windows GOARCH=amd64 go build -o myapp-windows-amd64.exe

リリース用のビルドフラグ

デバッグ情報を削除し、CGO を無効にして、より小さな静的バイナリを作成します:

CGO_ENABLED=0 go build -ldflags="-s -w" -o myapp

バージョン情報の埋め込み

ldflags を使って、ビルド時の情報を注入します:

var version = "dev"
var commit  = "none"
// Build: go build -ldflags="-X main.version=1.2.3 -X main.commit=abc1234"

GoReleaser

GoReleaser は、クロスコンパイル、パッケージ化(tar.gz、.zip)、チェックサムの生成、GitHub へのリリースのアップロードを自動化します。.goreleaser.yaml で設定します。

# .goreleaser.yaml
builds:
  - env: [CGO_ENABLED=0]
    goos: [linux, darwin, windows]
    goarch: [amd64, arm64]

Homebrew tap

Homebrew の formula を公開すると、macOS/Linux ユーザーは brew install でインストールできます。GoReleaser で formula を自動生成することもできます。

GitHub Actions CI/CD

GitHub Action を使って、タグが push されるたびにビルドとリリースを行います。GoReleaser には公式の GitHub Action があります。

- name: Run GoReleaser
  uses: goreleaser/goreleaser-action@v5
  with: { version: latest, args: release --clean }
  env: { GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" }

Docker による配布

コンテナを好むユーザー向けに、CLI を Docker イメージとしてパッケージ化します。マルチステージビルドを使って、最終イメージを最小限に抑えます。

FROM golang:1.22 AS build
WORKDIR /app
COPY . .
RUN CGO_ENABLED=0 go build -o myapp

FROM scratch
COPY --from=build /app/myapp /myapp
ENTRYPOINT ["/myapp"]

アセット用の go:embed

//go:embed を使って静的ファイル(テンプレート、構成スキーマ)をバイナリに埋め込み、バイナリを完全に自己完結させます。

//go:embed templates/*
var templates embed.FS

バージョン付きモジュール

Go モジュールのバージョニングに従って CLI モジュールを公開します。v2 以降では、インポートパスに /v2 を含め、go.mod の module パスも一致させる必要があります。

後方互換性

semver に従ってください。マイナーリリースではフラグを追加できますが、既存のフラグを削除または名前変更してはいけません。互換性を壊す変更にはメジャーバージョンの更新が必要です。

クイックチェック

macOS のマシン上で Linux 用の静的 Go バイナリをビルドするには、どうすればよいですか

振り返り: CLI ツールの配布

要点:

  • GOOS/GOARCH でクロスコンパイルし、静的バイナリには CGO_ENABLED=0 を使用します
  • リリースパイプラインの自動化には GoReleaser を使用します
  • -ldflags "-X main.version=..." でバージョンを注入します
  • go:embed でアセットを埋め込み、自己完結型バイナリを作成します

よくある質問

「CLIツールの配布」レッスンは無料ですか?

はい。「CLIツールの配布」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Go Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Go Academyコースには全4レッスンが含まれています。

「CLIツールの配布」で何を学びますか?

クロスコンパイル、goreleaser、Homebrew tap ブラウザで直接実行するハンズオンコードでGo Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Go Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのGo Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「CLIツールの配布」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このGo Academyレッスンでコードを書いて実行できますか?

はい。すべてのGo Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Cobraの基本
  2. フラグと永続フラグ
  3. サブコマンドとコマンドグループ
  4. CLIツールの配布
← Go Academyに戻る