← スキル一覧に戻る

project-structure
by IvanTorresEdge
⭐ 0🍴 1📅 2026年1月13日
SKILL.md
name: project-structure description: Standard Go project layouts and architecture patterns. Use when initializing projects or understanding codebase structure.
Project Structure Skill
This skill defines standard Go project layouts following community conventions.
When to Use
Use this skill when:
- Initializing new Go projects
- Organizing existing codebases
- Choosing project architecture
- Setting up build systems
Required Components (ALL Projects)
- Makefile - ALWAYS required for build automation
- bin/ directory - ALWAYS where binaries are built (gitignored)
- .gitignore - MUST include
bin/directory - go.mod - Module definition
- README.md - With build instructions using Make
Standard Layout (golang-standards/project-layout)
project/
├── cmd/ # Command entry points
│ └── myapp/
│ └── main.go
├── internal/ # Private application code
│ ├── handler/
│ ├── service/
│ └── repository/
├── pkg/ # Public libraries
│ └── util/
├── api/ # API specifications (OpenAPI, gRPC)
├── web/ # Web application assets
├── configs/ # Configuration files
├── scripts/ # Build and utility scripts
├── deployments/ # Deployment configs (Docker, K8s)
├── test/ # Integration and system tests
├── docs/ # Documentation
├── bin/ # Build output (REQUIRED, gitignored)
│ └── myapp
├── go.mod # Go module definition
├── go.sum # Dependency checksums
├── Makefile # Build automation (REQUIRED)
├── .gitignore # Must include bin/
├── Dockerfile
└── README.md
Directory Purposes
- cmd/ - Main applications for this project. Directory name matches binary name.
- internal/ - Private application and library code. Not importable by other projects.
- pkg/ - Library code that's ok to use by external applications.
- bin/ - Binary output (NEVER commit these)
- api/ - OpenAPI/Swagger specs, protocol buffer files
- web/ - Web application specific components
- configs/ - Configuration file templates or default configs
- test/ - Additional external test apps and test data
- docs/ - Design and user documents
- scripts/ - Scripts for build, install, analysis, etc.
- deployments/ - IaaS, PaaS, system and container orchestration deployment configurations
Alternative Architectures
Hexagonal/Clean Architecture
project/
├── cmd/
├── internal/
│ ├── domain/ # Business logic
│ ├── ports/ # Interfaces
│ ├── adapters/ # Implementations
│ └── app/ # Application layer
└── ...
Flat Structure (Simple Projects)
project/
├── main.go
├── handler.go
├── service.go
├── bin/
├── go.mod
├── Makefile
└── README.md
When to Use Each Structure
- Standard layout: Medium to large projects, multiple binaries
- Hexagonal: Complex domain logic, clear separation needed
- Flat: Small utilities, CLIs, simple tools
Build System Standards
Makefile (REQUIRED)
Every project MUST have a Makefile:
.PHONY: build test clean lint fmt run
# Build binary to ./bin directory
build:
\t@mkdir -p bin
\tgo build -o bin/myapp cmd/myapp/main.go
# Run the application
run: build
\t./bin/myapp
# Run tests
test:
\tgo test -v ./...
# Run tests with race detector
test-race:
\tgo test -v -race ./...
# Run tests with coverage
coverage:
\tgo test -coverprofile=coverage.out ./...
\tgo tool cover -html=coverage.out
# Format code
fmt:
\tgo fmt ./...
# Run linters
lint:
\tgolangci-lint run
# Clean build artifacts
clean:
\trm -rf bin/
\trm -f coverage.out
# Install dependencies
deps:
\tgo mod download
\tgo mod tidy
Build Rules
- Every project MUST have a Makefile
- Binaries MUST be built to
./bin/directory - Never build to project root
bin/directory MUST be in .gitignore- Use
make build, NEVERgo builddirectly
.gitignore Template
# Binaries
bin/
*.exe
*.exe~
*.dll
*.so
*.dylib
# Test binary
*.test
# Output of the go coverage tool
*.out
# Dependency directories
vendor/
# Go workspace file
go.work
# Environment files
.env
.env.local
# IDE
.vscode/
.idea/
*.swp
*.swo
*~
go.mod Best Practices
module github.com/username/project
go 1.21
require (
github.com/gin-gonic/gin v1.9.1
github.com/stretchr/testify v1.8.4
)
- Use Go 1.21 or later
- Run
go mod tidyregularly - Commit go.sum to version control
- Use
go mod vendorif needed for reproducible builds
README.md Template
# Project Name
Brief description of what this project does.
## Prerequisites
- Go >= 1.21
- make
## Installation
\`\`\`bash
git clone https://github.com/username/project
cd project
make deps
\`\`\`
## Building
\`\`\`bash
make build
\`\`\`
Binary will be in `./bin/`
## Running
\`\`\`bash
make run
\`\`\`
## Testing
\`\`\`bash
make test
make test-race
make coverage
\`\`\`
## Development
\`\`\`bash
make fmt # Format code
make lint # Run linters
make vet # Run go vet
\`\`\`
## License
MIT
Notes
- Follow the standard layout for new projects
- Keep directory structure flat until complexity requires organization
- Use
internal/to prevent external imports - Binary names should match directory names in
cmd/ - Makefile is non-negotiable
- Always build to
./bin/
スコア
総合スコア
60/100
リポジトリの品質指標に基づく評価
✓SKILL.md
SKILL.mdファイルが含まれている
+20
✓LICENSE
ライセンスが設定されている
+10
○説明文
100文字以上の説明がある
0/10
○人気
GitHub Stars 100以上
0/15
○最近の活動
3ヶ月以内に更新がある
0/10
○フォーク
10回以上フォークされている
0/5
✓Issue管理
オープンIssueが50未満
+5
✓言語
プログラミング言語が設定されている
+5
○タグ
1つ以上のタグが設定されている
0/5
レビュー
💬
レビュー機能は近日公開予定です