概要
oneshot_task_generatorというgemにプルリクエストを送りました🚀 github.com 本稿はその際についうっかりやらかした部分とどうすると良いのか?を自分なりにメモした記録になります。
oneshot_task_generatorについて
その場限りのスクリプトをrakeタスクとして専用のディレクトリ配下に生成して管理するためのrakeタスクジェネレータです📝
例えば管理画面で実行しづらい処理をスクリプトに書いて、本番で実行しなければならない運用対応などの履歴を管理する際に有用なgemだと思っています。
今回修正した内容
generatorコマンドで生成されるrakeタスクのファイル名とrakeを実行する際に指定するタスク名が微妙に異なるのでその部分を揃えました🔧
修正前
生成されるrakeタスクのファイル名: 20200530_foo_bar.rake
$ bin/rails generate oneshot foo_bar Running via Spring preloader in process 93693 create lib/tasks/oneshot/20200530_foo_bar.rake
実行時のタスク名: foo_bar_20200530
$ bin/rake oneshot:foo_bar_20200530
修正後
生成されるrakeタスクのファイル名: foo_bar_20200530.rake
$ bin/rails generate oneshot foo_bar Running via Spring preloader in process 93857 create lib/tasks/oneshot/foo_bar_20200530.rake
実行時のタスク名: foo_bar_20200530
$ bin/rake oneshot:foo_bar_20200530
今回ダメだった部分
- ただ単に生成されるファイル名と実行時のタスク名を揃える修正だけをしたこと
rakeタスクの実行時にオプションを追加して既存の名前解決は行えるようにした上で今回の修正を入れるのならば、古いバージョンと挙動を変えずに変えたい人のみ挙動を変えることが出来ます。
しかし、今回はオプションで切り替えるようにしたとかではなく根本的に修正してしまったので破壊的な変更となります。
破壊的な変更を入れると発生する問題
後方互換性がないことについては、今回の場合はそもそも既存の生成されるファイル名とタスク名が違う挙動にものすごく違和感があったので、ある程度しょうがないかなと思ってスルーしていました。
しかし、2つ目のメジャーバージョンアップを強いる件は完全に考慮してなかったので、第三者に指摘されてナルホド!となりました😇
ちなみに私は過去にも破壊的な修正をmongoidというgemに対して行ったのですが、無事マージされたので今回もカジュアルに修正プルリクを送ってしまいました...
この辺りは次回以降はちゃんと考えた方が良さそうですね🙈
まとめ
ライブラリに破壊的な変更を入れたい時、例えば今回のようなgeneratorの場合はオプションで挙動を変えられるようにするとマナーが良い🌟 そして、破壊的な変更はライブラリー側にメジャーバージョンアップを強いるので、メンテナの心象的にマージしづらいという事実を理解すること📝
その他
今回参考になったご指摘📝
ファイル名が日付順に並ばなくなるのは大きな変更なので、デフォルトの挙動を維持したまま、オプションで切り替えられるようにしたら良いかも?とPR見て思いました。
— 神速 (@sinsoku_listy) 2020年5月30日
追記:2020.05/31
無事にマージされました🙏