環境変数でONCEの自動セルフアップデートを無効化できるようになった
環境変数 ONCE_NO_SELF_UPDATE を設定することで、ONCEの自動セルフアップデート機能を無効化できるようになりました。
背景
ONCEはバックグラウンドで自身のアップデートを定期的にチェックし、自動適用する仕組みを持っています。しかしCI環境や特定の運用シナリオでは、この自動更新を抑制したいケースがあります。これまでは自動セルフアップデートを止める手段が提供されておらず、環境変数による制御が本PRで追加されました。
技術的な変更
internal/background/runner.go の checkSelfUpdate 関数の先頭に、環境変数チェックが追加されました。
変更前:
func (r *Runner) checkSelfUpdate(ctx context.Context, ns *docker.Namespace, state *docker.State) bool {
if !state.SelfUpdateDue() {
return false
}
変更後:
func (r *Runner) checkSelfUpdate(ctx context.Context, ns *docker.Namespace, state *docker.State) bool {
if os.Getenv("ONCE_NO_SELF_UPDATE") != "" {
return false
}
if !state.SelfUpdateDue() {
return false
}
ONCE_NO_SELF_UPDATE に空文字列以外の任意の値がセットされていれば、state.SelfUpdateDue() の評価より先に false を返します。これにより、アップデート期日の判定やその後の処理がすべてスキップされます。
設計判断
環境変数の存在チェック(空文字列以外) という慣用的なUnixスタイルが採用されています。
値の内容を問わず「セットされているか否か」だけを判定するため、ONCE_NO_SELF_UPDATE=1 や ONCE_NO_SELF_UPDATE=true など任意の文字列で無効化できます。チェックは checkSelfUpdate の最上位に置かれており、アップデート期日の評価やDocker操作といった後続処理への到達を完全に遮断します。このアーリーリターンのパターンは、既存の !state.SelfUpdateDue() チェックと構造的に一貫しています。
まとめ
5行の追加という最小限の変更で、自動セルフアップデートの制御手段が追加されました。既存のアップデートロジックには一切手を加えず、環境変数による早期脱出を先頭に差し込む構造は、機能の無効化を安全かつ明快に実現するシンプルな設計判断です。