Skip to content

bool/stringslice: 想定外入力のサイレントなフォールバックを改善 (#18)#27

Merged
ieee0824 merged 1 commit into
masterfrom
fix/bool-stringslice-semantics
Jun 17, 2026
Merged

bool/stringslice: 想定外入力のサイレントなフォールバックを改善 (#18)#27
ieee0824 merged 1 commit into
masterfrom
fix/bool-stringslice-semantics

Conversation

@ieee0824

Copy link
Copy Markdown
Owner

概要

Bool / StringSlice が想定外入力に対してサイレントにフォールバックする挙動を改善します。

Closes #18

背景(監査検出)

  • Bool: {true,t,1} 以外を全て false に潰し、Bool("X", true) でも値がセットされていれば誤綴り(on 等)で無音 false 化。def を無視するフットガン
  • StringSlice: env が空文字列のとき strings.Split("",",")[""](長さ1)を返し、unset 時の [](長さ0)と非対称。"a," の末尾空要素も残る

変更点(方針: 許容値拡張 + 未知はデフォルト維持 / 空は[]・trim・空要素除去)

Bool

  • truthy に yes/on/y、falsy に no/off/n/false/f/0 を追加、前後空白 trim・大文字小文字無視
  • convertStringToBoolean(値, 認識可否) に変更し、認識できない値はデフォルト値を維持(+ log 警告)。def=truemaybe を渡しても無音 false に潰れない
  • 明示的な falsy/truthy はデフォルトを上書き(off→false、yes→true)
  • ログに生値は出さない(Int*: パースエラー時に生のenv値をログ出力しない #20 と一貫、キーのみ)

StringSlice

  • 空文字列の env を unset と同等に扱う(デフォルトがあればデフォルト、無ければ空スライス)
  • 非空は分割後に各要素を TrimSpace し空要素を除去(" a , b , ,c,"["a","b","c"])

ドキュメント: README(en/jp)に両者のセマンティクスを明記

後方互換 / 挙動変更

  • 既存の正しく綴られた値(true/false 等)の結果は不変
  • 変わる例: Bool("X", true)X=garbage → 従来 false / 変更後 true(デフォルト維持)。X=yes → 従来 false / 変更後 true。StringSlice の空文字 env → 従来 [""] / 変更後 [](or デフォルト)
  • いずれも「より直感的で安全な」方向への変更。方針はオーナー確認済み

テスト

  • bool_test.go / string_test.go を新挙動に合わせ更新・ケース追加(空値・trim・空要素除去・未知値フォールバック・生値非出力)
  • go build / go vet / go test / go test -race すべて ✅、変更ファイルは gofmt クリーン

🤖 Generated with Claude Code

## 理由
Bool は {true,t,1} 以外を全て false に潰し、def=true でも誤綴りの値で無音 false 化
していた。StringSlice は空文字列の env に対し [""] を返し、unset 時の [] と非対称
だった(#18)。下流のサイレントな設定不具合を防ぐため、許容値を広げ未知入力を
可視化し、空値の扱いを揃える。

## 修正点
- Bool: truthy に yes/on/y、falsy に no/off/n/false/f/0 を追加し、前後空白 trim・
  大文字小文字無視。convertStringToBoolean を (値, 認識可否) に変更し、認識できない
  値はデフォルト値を維持して log 警告(生値は出さない)
- StringSlice: 空文字列の env を unset と同等に扱い(デフォルト or 空スライス)、
  非空は分割後に各要素を TrimSpace し空要素を除去("a, b," -> ["a","b"])
- bool_test.go / string_test.go を新挙動に合わせ更新・ケース追加
- README(en/jp)に Bool / StringSlice のセマンティクスを明記
@ieee0824 ieee0824 merged commit f76769c into master Jun 17, 2026
1 check passed
@ieee0824 ieee0824 deleted the fix/bool-stringslice-semantics branch June 17, 2026 07:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bool/StringSlice: 想定外入力のサイレントなフォールバック挙動

1 participant