Open8

dotenv-validator を CLI 化した dryenv (仮) というツールを作ってみる

snakasnaka

https://github.com/duffn/dotenv-validator

これを CLI 化して、ファイル出力機能などを追加したい

ほしいもの

  • MUST: アプリケーション起動前に必要な環境変数が揃っていることが確認できる
  • MUST: 現在の環境変数を読み取り、.env 形式で標準出力/ファイルに出力できる
  • MAY: ローカル環境やCI/CD環境でも動いてほしい
  • MAY: 型のチェックができると良い
  • MAY: Markdown 形式でドキュメントを出力できる
snakasnaka
snakasnaka

依存関係の管理のためモジュールの初期化が必要

$ go mod init github.com/snaka/dryenv
go: creating new go.mod: module github.com/snaka/dryenv
snakasnaka

モジュール取得

$ go get github.com/duffn/dotenv-validator
go: downloading github.com/duffn/dotenv-validator v0.1.0
go: added github.com/duffn/dotenv-validator v0.1.0
snakasnaka

main.go を書く

main.go
package main

import (
	"fmt"

	validator "github.com/duffn/dotenv-validator"
)

func main() {
	err := validator.Validate()
	fmt.Println(err)
}
snakasnaka

.env.example を用意する

VAR1=bob # required
VAR2=lobloaw # required,format=str
VAR3=1.3415 # format=float
VAR4=ABCDEF # format=[A-Z]+
VAR5=notrequired
snakasnaka

実行してみる

$ go run main.go

these variables are missing in the envionment (VAR1,VAR2)
these variables have invalid formats (VAR3,VAR4)
  • 環境変数が未設定であったらエラーメッセージを出す
  • 値が期待したフォーマットと異なるとエラーを出す

が実現できているが、終了コードは「正常」のままなので、そこの修正は必要。

snakasnaka

とりあえず使えるレベルにする

以下に対応できれば最低限使えるレベルに達する

  • バリデーションに適合しない場合に終了コードを 0 以外にする
  • 読み込むファイルをオプションで指定できる
  • 先頭が # の行は無視する
  • .env 形式で出力する