既存のシステムに新しいものを追加する時のプラクティス

既存のシステムがあり、そこになにかしらを追加する場合にどういった対処が良いのかという事に関して。 正直、結論は当たり前の事なので、初心者のメモ帳と思ってください。

結論

  • インターフェースは変更しない(利用者に変更があったことを意識させない)
  • 代わりにモデルやスキーマを変更する

あらまし

社内で運用しているシステムに対して、新しいツールを作成することになった。

しかし、今までも似たようなデータを取っており、その資産も利用したい。

今までの利用者は今までのもの、もしくはlogin時にupdateして利用する。

これから利用する人は新しいものを利用する。

最初にこのツールを利用するのが、今までのデータだけが対象だったため、私はツールに2つのインターフェースを用意しようと考えていた。

./do_something --use_old_data
./do_something --use_new_data

イメージとしてはこんな感じ。

だけど、この場合修正が多く、運用する上で適さないことを実感した。

というのも以下の点が途中から浮かんだから。

  • ほとんどのユーザの移行が終了したら、--user_old_dataは利用しない
    • ツールの追加作業の後、オプションの削除作業を行わなければならない
    • そのときに自分の書いたコードを安全にかつ確実に素早く削除できるかわからなかった(経験上、1日はかかると感じた)
  • このツールを利用する人は内部のデータ構造をよく知らない
    • オプションの違いを利用者に理解させる必要がある(私が周知を徹底させる必要がある)

内部データを知ってるから2つのオプションが存在する事もわかるけど、利用者はそんなんわからないし、半年後、一年後の自分がそれを思い出すまでにどれくらいかかるか、と考えるとこのまま進めたくはなかった。

そこで考えたのが、

という方法。 これの利点は、

  • 移行スクリプトは1度走らせるだけなので、運用する必要がない
  • オプションは必要ない(インターフェースがはっきりする)
  • ツールに最適化された情報がスキーマにあるので、探索が楽(速度向上)

などが期待できること。

書けば書くほど、単純な結論でしたw