Gitrend
🚀

Go製コンテナ操作ライブラリ爆誕!🚀

Go 2026/2/22
Summary
コンテナレジストリとの連携、いつもCLI叩いてませんか? もうGoコードから直接触れます! これがめっちゃ便利で感動したんですよ!

概要:なにこれ凄い?

皆さん、聞いてくださいよ!コンテナイメージの操作って、これまでDocker CLIとかskopeoとか、外部ツールに頼るか、Goでやるなら低レイヤーのAPIをゴリゴリ書くしかなかったですよね?でも、このgoogle/go-containerregistryがまさにその課題を解決してくれたんですよ!

GoネイティブでOCIイメージのpush/pull、マニフェスト操作、レイヤーの追加まで、全部できちゃうんです!これのおかげで、僕はGo製のコンテナツール開発が爆速になると確信しました!うおおおお、まさに求めてたやつが来た!これは絶対使うべきライブラリだ!

ここが推し!

サクッと試そう(使用例)

package main

import (
	"context"
	"fmt"
	"log"

	"github.com/google/go-containerregistry/pkg/crane"
	"github.com/google/go-containerregistry/pkg/name"
	v1 "github.com/google/go-containerregistry/pkg/v1"
)

func main() {
	ctx := context.Background()
	// とりあえずAlpineの最新イメージを引っ張ってくるぞ!
	ref, err := name.ParseReference("alpine:latest")
	if err != nil {
		log.Fatalf("Error parsing reference: %v", err)
	}

	// crane.Pullでイメージを取得、これだけでv1.Imageオブジェクトになるんだ!
	img, err := crane.Pull(ref.String(), crane.WithContext(ctx))
	if err != nil {
		log.Fatalf("Error pulling image: %v", err)
	}

	// マニフェストとか、色々見れちゃうんだよね
	manifest, err := img.Manifest()
	if err != nil {
		log.Fatalf("Error getting manifest: %v", err)
	}

	fmt.Printf("Pulled image: %s\n", ref.String())
	fmt.Printf("Config Digest: %s\n", manifest.Config.Digest)
	fmt.Printf("Layers:\n")
	for _, layer := range manifest.Layers {
		fmt.Printf("  - Digest: %s, Size: %d\n", layer.Digest, layer.Size)
	}

	// 自分でイメージ作ってPushもできるんだぜ!
	// (ここはコメントアウトしとくけど、このライブラリで全部できるからね!)
	// newImage, err := mutate.AppendLayers(...)
	// if err := crane.Push(newImage, "your/repo/new-image:latest"); err != nil { ... }
}

ぶっちゃけ誰向け?

まとめ

いやー、本当にすごいライブラリが出てきたな、ってのが率直な感想です。Go製ツールを愛する僕としては、これでコンテナエコシステムにさらに深く切り込んでいける未来が見えました!既存のGoアプリケーションにコンテナ操作機能を組み込むのも、これならめちゃくちゃ楽になるはず!

まだ触ったことない人は、ぜひこの機会に試してみてほしい!これからの開発が楽しみだね!