Gitrend
🐍

Goの設定、これ一つで解決!Viperがマジ神!

Go 2026/2/19
Summary
Goアプリケーションの設定管理、どうしてますか? 環境変数、ファイル、CLI引数...全部バラバラだと辛いよね。 そんな悩みを一瞬で吹き飛ばす「Viper」が、マジでヤバいんです!

概要:なにこれ凄い?

僕、GitHubトレンドパトロールが日課なんだけど、最近見つけちゃったんだよ、とんでもないやつを!それがこのspf13/viper!Goのアプリケーション開発で設定周りって、envrc、YAML、CLI引数、あちこちから読み込むこと多くない?正直、僕も毎回「あー、またこれか…」ってなりがちだったんだ。でもね、Viperはそんな煩雑な設定ソースを全部シームレスに統合してくれるんだよ!これにはマジで感動したね。もうね、僕らの設定管理の常識をひっくり返すレベルで便利なんだ!うおおお、これはすごい!

ここが推し!

サクッと試そう(使用例)

まず、config.yamlをこんな感じで用意してみて!

app_name: MyAwesomeApp
port: 8081
debug: true

次に、Goのコードはこれで動かしてみてよ!AKIRA_PORT=9000 go run main.goって感じで環境変数も試せるぞ!

package main

import (
	"fmt"
	"log"

	"github.com/spf13/viper"
)

type Config struct {
	AppName string `mapstructure:"app_name"`
	Port    int    `mapstructure:"port"`
	Debug   bool   `mapstructure:"debug"`
}

func main() {
	// デフォルト値を設定
	vip.SetDefault("app_name", "AkiraApp")
	vip.SetDefault("port", 8080)
	vip.SetDefault("debug", false)

	// 設定ファイルの場所と名前、タイプを指定
	vip.SetConfigName("config") // config.yaml, config.json など
	vip.SetConfigType("yaml")
	vip.AddConfigPath(".") // 現在のディレクトリ

	// 環境変数も読み込む
	vip.AutomaticEnv()
	vip.SetEnvPrefix("AKIRA") // 環境変数のプレフィックスを付けると、特定の環境変数のみ扱うことができて便利だよね!

	err := viper.ReadInConfig()
	if err != nil {
		if _, ok := err.(viper.ConfigFileNotFoundError); ok {
			fmt.Println("config.yamlが見つからなかったよ!デフォルト値と環境変数を使ってみるね。")
		} else {
			log.Fatalf("設定ファイルの読み込み中にエラーが発生しちゃった: %s", err)
		}
	}

	// 値の取得例
	fmt.Printf("AppName: %s\n", viper.GetString("app_name"))
	fmt.Printf("Port: %d\n", viper.GetInt("port"))
	fmt.Printf("Debug: %t\n", viper.GetBool("debug"))

	// 構造体にマッピング
	var appConfig Config
	if err := viper.Unmarshal(&appConfig); err != nil {
		log.Fatalf("設定を構造体にマッピングできなかった…: %s", err)
	}
	fmt.Printf("Config struct: %+v\n", appConfig)

	// 環境変数で上書き (例: AKIRA_PORT=9000 go run main.go)
	fmt.Printf("環境変数で上書きされたPort: %d (AKIRA_PORT=9000で試してみて!)\n", viper.GetInt("port"))
}

ぶっちゃけ誰向け?

まとめ

いや〜、spf13/viper、本当に感動しました!僕たちの開発を強力にサポートしてくれる、まさに「縁の下の力持ち」って感じのライブラリだよね!設定管理の複雑さから解放されて、もっと本質的な開発に時間を割けるようになるのは本当に嬉しい!これからのGo開発がもっと楽しく、もっとスマートになること間違いなし!みんなもぜひ試してみてくれよな!