Open1

aqua gr の version_overrides のスタイルの変更

Shunsuke SuzukiShunsuke Suzuki

現在

# 最新の設定
version_constraint: semver(">= 6.5.0")
version_overrides:
  - version_constraint: semver(">= 6.3.0")
    # 古いバージョンの設定の、最新の設定との差分

# override されない共通の設定
version_constraint: "false"
version_overrides:
  # 古い順
  - version_constraint: semver("< 0.1.0")
  # ...
  - version_constraint: "true"
  # 最新の設定

現在のスタイルの良い点

  • 直感的で分かりやすい
  • 各 override では差分だけ書けば良いので DRY に書ける

現在のスタイルの課題

  • 最新設定と差分をマージしないと設定が分からず、分かりづらい
  • 最新設定が変わると差分の設定も修正しないといけない
  • 最新設定が変わったときの修正が難しく、一から書き直す必要がある
    • 自分はいつも scaffold しなおしている

課題をいくつか挙げたが、これらは全て「最新の設定と差分をマージする」というアプローチを取っていることから生じている。
差分をマージするのではなく、全ての override で必要な設定を全部書くようにすればこの問題は解決する。
これの欠点は DRY に設定を記述できず冗長になることであるが、コードを自動生成すればあまりこれは問題ではなくなる(設定ファイルが肥大化すると将来的に aqua のパフォーマンスに影響が出かねないが、それは別の方法で解決策を模索すべきだろう)
また最新の設定が変わって version override を追加しなければならなくなったとき、最新の version override だけ修正すれば良いので修正が容易であり、一から書き直す必要はなくなるだろう。
将来的には自動修正もできるかもしれない。
自動修正の難易度もだいぶ下がるだろう。

既存のコードのマイグレーションは難しいが、一気にマイグレーションしなくても一つ一つ必要に応じて直せば良い。

まずは aqua gr によって生成されるコードを修正する必要がある。