大コンテナ時代を生きのこるための
JSON Schema + α
id:aereal
aereal
世は大コンテナ時代……
The Twelve-Factor App
The Twelve-Factor App
Config
コンフィギュレーション今昔
コンフィギュレーション今昔
😇
PORT=... HOST=... \
FOO_API_KEY=... BAR_API_KEY=... \
FOO_DEBUG=1 BAR_DEBUG=0 \
docker run ...
環境変数はあまりに貧弱
JSON Schema
JSON Schema
JSON?
{� "definitions": {},� "$schema": "http://json-schema.org/draft-07/schema#",� "type": "object",� "title": "configuration",� "properties": {� "LISTEN_ADDR": {� "type": "string"� },� "DSN": {� "type": "string",� "minLength": 1� }� }�}
type config struct {� Addr string `json:"LISTEN_ADDR"`�}��func run() error {� // LISTEN_ADDR=localhost:8000�� loader, err := loader.New(gojsonschema.NewReferenceLoader("file://./config-schema.json"))� if err != nil {� return err� }� cfg := config{}� if err := loader.Load(&cfg); err != nil {� return err� }� // cfg.Addr // => "localhost:8000"�� return nil�}
JSON Schemaを使う優位性
今後
PR: aereal/go-http-replay
PR「npmという次世代CPANパッケージマネージャー」という話を明日LTします
完