コンテンツにスキップ

ディレクトリ構成

golang-standards/project-layout に準拠。

.
├── build/
│   └── package/
│       └── build.sh              # Lambda バイナリのビルドスクリプト
├── cmd/
│   ├── lambda/
│   │   └── main.go               # Lambda エントリポイント
│   └── server/
│       └── main.go               # ローカル開発用 HTTP サーバー(:8080)
├── deployments/
│   └── Dockerfile                # Lambda コンテナイメージビルド定義
├── docs/                         # ドキュメントサブモジュール
├── internal/
│   ├── handler/
│   │   └── upload.go             # リクエスト解析・バリデーション・S3 保存呼び出し
│   └── storage/
│       └── s3.go                 # S3 PutObject ラッパー
├── api/                          # swaggo 生成ファイル(自動生成・直接編集不可)
├── go.mod
├── go.sum
└── Makefile

各ディレクトリの役割

ディレクトリ 役割
build/package/ Lambda 向けクロスコンパイルスクリプト
cmd/lambda/ Lambda エントリポイント。依存の組み立てのみを行い、ロジックは持たない
cmd/server/ ローカル開発用エントリポイント。Echo を直接 :8080 で起動する
deployments/ Lambda コンテナイメージの Dockerfile
docs/ プロジェクトドキュメント(サブモジュール)
internal/handler/ アップロードリクエストの解析・バリデーション・レスポンス生成
internal/storage/ S3 操作の抽象化(Storer インターフェース経由で handler から利用)
api/ swaggo が生成する OpenAPI 仕様・Swagger UI 用データ(自動生成、直接編集不可)

依存関係

cmd/lambda  ──┐
              ├──▶ internal/handler ──▶ internal/storage
cmd/server  ──┘

internal/handler は Storer インターフェースを通じて internal/storage を利用する。cmd 層でインターフェースの実装を注入し、テスト時はモック実装に差し替えられる。