feat: golangci-lint v2 設定ファイルを追加(unused / revive / gosec を有効化)#276
feat: golangci-lint v2 設定ファイルを追加(unused / revive / gosec を有効化)#276taminororo wants to merge 1 commit intodevelopfrom
Conversation
- 既存の placeholder 設定を v2 schema に置き換え - gosec で SSRF / 弱暗号 / エラー無視等を検出(G104 はノイズ抑制のため除外) - gosec G201/G202 は SeeFT の変数経由 SQL 連結パターンを検出しない gosec の既知の限界あり、SQL injection 防止は AGENTS.md + CodeRabbit に依存 - CI 化は別 issue で対応予定 refs #274
📝 WalkthroughWalkthroughSwitches Changes
Estimated code review effort🎯 1 (Trivial) | ⏱️ ~5 minutes Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
コマンド実行したら4つしか違反が検出されなかったけど大丈夫そうかな? |
対応Issue
resolve #274
概要
.golangci.ymlを golangci-lint v2 の schema で書き直し、unused/revive/gosecを有効化しました。CI 化は別 issue で対応します。なぜ
.golangci.ymlは placeholder(issues.exclude-use-default: falseのみ)で実質未設定だった設定内容
設計判断:
default: none+ 明示enablerevive.severity: warninggosec:(空設定)run.timeout: 5mFinanSu の
.golangci.ymlを起点に、SeeFT 用に gosec を追加。ローカル実行結果(v2.11.4 / 2026-05-02)
検出された違反 7 件:
api/lib/externals/db/db.goc.db.Close()のエラー未処理api/lib/externals/server/server.goe.Start(":1234")のエラー未処理api/lib/usecase/mail_auth_usecase.gosessionRep.DeleteByUserID(...)のエラー未処理api/lib/usecase/rescue_unified_usecase.goapi/lib/usecase/rescue_unified_usecase.goapi/lib/usecase/user_usecase.goburearRepis unusedapi/lib/usecase/user_usecase.gotaskRepis unused→ いずれも 本 PR のスコープ外。個別 PR で対応。
補足: gosec の SQL injection 検出限界(実験で確定)
gosecの G201/G202(SQL 文字列連結)は*sql.DB型の識別子を介していない呼び出しを SQL 実行関数として認識できない。db.QueryContext(ctx, "..."+id))q := "..."+id; db.QueryContext(ctx, q))q := "..."+id; crud.UpdateDB(ctx, q))b.client.DB().QueryRowContext(ctx, q))db := b.client.DB(); db.QueryRowContext(ctx, q))SeeFT の repository 層は ラッパー関数経由(
b.crud.UpdateDB(c, query)等) および メソッドチェーン直結(b.client.DB().QueryRowContext(...)) の両パターンを使用しているため、grep で確認した SQL 文字列連結 41 件は gosec では 0 件報告。→ SQL injection 防止策は AGENTS.md (#269) のプレースホルダ規約 + CodeRabbit (#273) + 人間レビュー に依存する方針。gosec は SSRF・弱暗号などの補完的検出として活用。
画面スクリーンショット等
設定ファイル追加のため画面なし。
テスト項目
.golangci.ymlがリポジトリルートに配置されているcd api && golangci-lint run --config=../.golangci.yml ./...で上記 7 件が検出されるgolangci-lint config verify --config=.golangci.ymlで設定が validate される備考
本 PR のスコープ外(別タスク)
rescue_unified_usecase.go)user_usecase.go)参考
.golangci.ymlおよび.github/workflows/golangci-lint.yml