encore-go-bucket について
Encore Goプロジェクトでオブジェクトストレージを扱うためのスキルです。ストリーミング操作、署名付きURL、権限を限定したバケット参照の使い方を案内します。
主な機能
- 01非公開または公開バケットの宣言
- 02ファイルのストリーミングアップロードとダウンロード
- 03一時的な署名付きURLの生成
- 04権限を限定したバケット参照の作成
活用シーン
- 01署名付きURLを使ったブラウザーからのファイル送受信
- 02ライブラリーコードへの制限付きバケットアクセスの受け渡し
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ encoredev/ skills --skill encore-go-bucketインストール後、Claude Code で/encore-go-bucketを入力して読み込まれたか確認します。
詳細
Encore Go オブジェクトストレージ
手順
Bucket はファイルの論理的なストアです。Encore は基盤となるオブジェクトストレージ(AWS では S3、GCP では GCS、ローカルではインメモリ)をプロビジョニングします。バケットはパッケージレベルの変数として宣言します。
package uploads
import "encore.dev/storage/objects"
// Private bucket (default)
var Uploads = objects.NewBucket("user-uploads", objects.BucketConfig{})
// Public bucket — files accessible via public URL
var PublicAssets = objects.NewBucket("public-assets", objects.BucketConfig{
Public: true,
})
操作
import (
"fmt"
"io"
)
// Upload (streaming pattern)
writer := Uploads.Upload(ctx, "path/to/file.jpg")
_, err := io.Copy(writer, dataReader)
if err != nil {
writer.Abort()
return err
}
err = writer.Close()
// Download
reader := Uploads.Download(ctx, "path/to/file.jpg")
if err := reader.Err(); err != nil {
return err
}
defer reader.Close()
data, _ := io.ReadAll(reader)
// Existence check
exists, err := Uploads.Exists(ctx, "path/to/file.jpg")
// Attributes (size, content type, ETag)
attrs, err := Uploads.Attrs(ctx, "path/to/file.jpg")
// List
for err, entry := range Uploads.List(ctx, &objects.Query{}) {
if err != nil {
return err
}
fmt.Println(entry.Key, entry.Size)
}
// Delete
err := Uploads.Remove(ctx, "path/to/file.jpg")
// Public URL (only for public buckets)
url := PublicAssets.PublicURL("image.jpg")
署名付き URL
クライアントがサービスを経由せずに直接アップロード/ダウンロードできるよう、一時的な URL を生成します。
import "time"
// Signed upload URL (expires in 2 hours)
url, err := Uploads.SignedUploadURL(ctx, "user-uploads/avatar.jpg",
objects.WithTTL(time.Duration(7200)*time.Second))
// Signed download URL
url, err := Uploads.SignedDownloadURL(ctx, "documents/report.pdf",
objects.WithTTL(time.Duration(7200)*time.Second))
バケット参照
特定の権限セットを持つバケットアクセスをライブラリコードに渡します。
// Create a reference with download permission only
ref := objects.BucketRef[objects.Downloader](Uploads)
// Combine permissions via an interface
type myPerms interface {
objects.Downloader
objects.Uploader
}
ref := objects.BucketRef[myPerms](Uploads)
// Permission types: Downloader, Uploader, Lister, Attrser, Remover,
// SignedDownloader, SignedUploader, ReadWriter
ガイドライン
- バケットはパッケージレベルの変数として宣言します。
- デフォルトではプライベートバケットを使用し、認証不要のダウンロードを目的としたアセットにのみ
Public: trueを指定します。 - サービスを経由してストリーミングするのではなく、ブラウザからのアップロード/ダウンロードには署名付き URL を使用します。
- ヘルパーにアクセスを渡す際にはバケット参照を使用します。これにより、権限の契約が型システムで表現されます。
コメント
Markdown 対応