設定管理

1 件の記事

Contents

Avoid hard-coding values. Place frequently changing values in configuration; rarely changing values may be declared as package-level constants. (値をハードコーディングしない。頻繁に変わる値は設定に配置し、稀にしか変わらない値はパッケージレベルの定数として宣言してもよい)

解説

ハードコードされた値は、環境ごとの違いや将来的な変更に対応できず、コードの修正とデプロイを強制します。頻繁に変更される値は設定ファイルや環境変数に外部化し、変更時にコードの再コンパイルを不要にすべきです。定数として宣言すべき値と設定として外部化すべき値を適切に判断することで、保守性の高いコードベースが実現されます。

具体例

// 悪い例(ハードコーディング)
func ProcessPayment(amount float64) error {
    tax := amount * 0.1  // 税率がハードコード
    total := amount + tax

    if total > 10000 {  // 閾値がハードコード
        return errors.New("amount too large")
    }

    apiURL := "https://api.payment.com/v1/charge"  // URLがハードコード
    return callAPI(apiURL, total)
}

// 良い例(定数と設定の適切な使用)
const (
    TaxRate = 0.1  // 法律で定められた税率(稀に変更)
)

type PaymentConfig struct {
    MaxAmount float64
    APIBaseURL string
}

type PaymentService struct {
    config PaymentConfig
}

func NewPaymentService(config PaymentConfig) *PaymentService {
    return &PaymentService{config: config}
}

func (s *PaymentService) ProcessPayment(amount float64) error {
    tax := amount * TaxRate
    total := amount + tax

    if total > s.config.MaxAmount {
        return errors.New("amount too large")
    }

    apiURL := s.config.APIBaseURL + "/v1/charge"
    return callAPI(apiURL, total)
}

参考リンク