Go 品質チェック(lint + Swagger)
Go バックエンドの静的解析と API ドキュメント生成。
プロジェクト検出
以下の優先順位で Go プロジェクトを検出:
- 環境変数
GO_BACKEND_DIR(go.mod の存在を確認) - カレントディレクトリの
go.mod - サブディレクトリ(
backend/,server/,api/,go/) - 再帰検索(深さ2まで)
静的解析(golangci-lint)
実行
cd <backend_dir>
# golangci-lint の存在確認
command -v golangci-lint || {
echo "golangci-lint がインストールされていません"
echo "インストール: brew install golangci-lint"
echo "または: go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest"
}
# Lint 実行
golangci-lint run ./...
Lint 設定
プロジェクトルートに .golangci.yml を配置してカスタマイズ可能:
linters:
enable:
- errcheck
- gosimple
- govet
- ineffassign
- staticcheck
- unused
linters-settings:
errcheck:
check-type-assertions: true
Swagger / OpenAPI 生成
実行
cd <backend_dir>
# swag の存在確認(未インストール時は自動インストール)
command -v swag || [[ -f "$HOME/go/bin/swag" ]] || {
echo "swag をインストール中..."
go install github.com/swaggo/swag/cmd/swag@latest
}
# swag コマンドパス
SWAG_CMD=$(command -v swag 2>/dev/null || echo "$HOME/go/bin/swag")
# main.go の検出(GO_MAIN_PATH > cmd/server/main.go > cmd/api/main.go > main.go)
MAIN_PATH="${GO_MAIN_PATH:-}"
if [[ -z "$MAIN_PATH" ]]; then
for p in cmd/server/main.go cmd/api/main.go cmd/main.go main.go; do
[[ -f "$p" ]] && MAIN_PATH="$p" && break
done
fi
# Swagger 生成
$SWAG_CMD init -g "$MAIN_PATH" -o docs --parseDependency --parseInternal
出力
生成されるファイル:
docs/docs.go— Go コードdocs/swagger.json— JSON 仕様docs/swagger.yaml— YAML 仕様
よくあるエラー
golangci-lint が見つからない
golangci-lint: command not found
対処:
brew install golangci-lint
# または
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
swag が見つからない
swag: command not found
対処:
go install github.com/swaggo/swag/cmd/swag@latest