環境変数でアニメーションを無効化できる `ONCE_REDUCED_MOTION` オプションを追加
ONCE_REDUCED_MOTION=true を指定することで、初回起動時のスターフィールド・ロゴアニメーションを抑制できるようになりました。スクリプトによる自動インストールや、アニメーションが問題となる環境への対応が容易になります。
背景
once は初回起動時にアニメーション付きのロゴと背景を表示します。この演出は通常の対話的な利用では問題ありませんが、一部の環境では動作に支障をきたしたり、視覚的に煩わしいと感じるケースがありました。このPRは、そうした状況を環境変数ひとつで制御できるようにするものです。
合わせて、既存の ONCE_INTERACTIVE=false を含むツールの環境変数が README に初めてドキュメント化されました。
技術的な変更
変更の核心は internal/ui/install.go の showLogo() メソッドへの条件追加です。
変更前:
func (m Install) showLogo() bool {
return len(m.namespace.Applications()) == 0
}
変更後:
func (m Install) showLogo() bool {
return len(m.namespace.Applications()) == 0 && os.Getenv("ONCE_REDUCED_MOTION") != "true"
}
元々 showLogo() は「アプリケーションが1件も登録されていない場合(=初回起動時)にロゴを表示する」というロジックでした。今回の変更では、この条件に && で ONCE_REDUCED_MOTION の確認を追加しています。既存のアプリ存在チェックのロジックは一切変わらず、環境変数が "true" のときだけ表示を抑制するという最小限の修正です。
テストは internal/ui/install_test.go の TestInstall_ShowLogo として追加されました。t.Setenv を使って環境変数の有無・アプリの有無の4つの組み合わせをすべて検証しており、環境変数を設定するとアプリの有無にかかわらず showLogo() が false を返すことが確認されています。
設計判断
環境変数での制御 という方式が採用されています。
アニメーション抑制のような「実行環境への適応」は、CLIフラグよりも環境変数のほうが自動化スクリプトや CI/CD パイプラインとの親和性が高く、コマンドラインのインターフェースを変えずに挙動を変更できます。値の判定を != "true" とすることで、"false" や未設定の場合はすべてデフォルト動作(アニメーションあり)となるため、既存の利用者への影響がありません。
また、ONCE_INTERACTIVE(非対話インストール)と ONCE_REDUCED_MOTION(アニメーション抑制)という命名は、ONCE_ プレフィックスで統一されており、ツール固有の環境変数として識別しやすい設計です。今回 README にまとめてドキュメント化されたことで、他の環境変数の追加にも一貫したガイドラインが示されました。
まとめ
showLogo() への1行の条件追加という最小限の変更で、アニメーションが問題となる環境向けの逃げ道を提供しています。ONCE_ プレフィックスによる命名規則の確立とドキュメント化も同時に行われており、今後の環境変数追加の土台となる変更です。