# Go Quality

> Go バックエンドの品質チェック（golangci-lint + Swagger 生成）。「lint」「golangci-lint」「静的解析」「swagger」「OpenAPI」「ドキュメント生成」などのキーワードで自動適用。

- Skill: `no-problem-dev/go-quality` (Agent Skill)
- Install (CLI): `npx skillmds@latest add no-problem-dev/go-quality`
- Raw SKILL.md: https://api.skillmd.com/api/skills/no-problem-dev/go-quality/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools, DevOps & Infra
- Author: no-problem-dev (https://skillmd.com/u/no-problem-dev)
- Updated: 2026-09-10
- Page: https://skillmd.com/skills/no-problem-dev/go-quality

---


# Go 品質チェック（lint + Swagger）

Go バックエンドの静的解析と API ドキュメント生成。

## プロジェクト検出

以下の優先順位で Go プロジェクトを検出:

1. 環境変数 `GO_BACKEND_DIR`（go.mod の存在を確認）
2. カレントディレクトリの `go.mod`
3. サブディレクトリ（`backend/`, `server/`, `api/`, `go/`）
4. 再帰検索（深さ2まで）

## 静的解析（golangci-lint）

### 実行

```bash
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` を配置してカスタマイズ可能:

```yaml
linters:
  enable:
    - errcheck
    - gosimple
    - govet
    - ineffassign
    - staticcheck
    - unused

linters-settings:
  errcheck:
    check-type-assertions: true
```

## Swagger / OpenAPI 生成

### 実行

```bash
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
```

**対処:**
```bash
brew install golangci-lint
# または
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
```

### swag が見つからない

```
swag: command not found
```

**対処:**
```bash
go install github.com/swaggo/swag/cmd/swag@latest
```

