何のためにバージョンロックをするか
外部ライブラリに依存する時に、どのようにバージョンロックをすべきかどうかという話。僕個人のスタンスです。
- 開発しているのがライブラリであれば依存ライブラリをバージョンロックをするべきではない
- 最低バージョンの指定に留めるべき(これは寧ろ積極的にやって良い)
- 依存ツリーが大変なことになってコンフリクトが避けられないため
- 実運用しているサービスやアプリケーション的なソフトウェアであればバージョンロックした方がいい
- これは「ある時点のビルドやリリースの再現性」のためが一番大きいと思っている
- 古いバージョンにとどまって良いというわけではない
基本的には、開発しているものがライブラリであれアプリケーションであれ、 とにかく依存先の最新についていく のが前提で、その前提に立った場合に、上のような考え方になるかな、と思っている。
特にライブラリ作者は依存ライブラリに非互換変更が入って動かなくなったら、頑張って追随するか、依存を切るかをする。これは、ライブラリを公開している上での責務であり、そこで低いバージョンにロックしてしまうのは悪手。(「責務」って書いちゃうと大変な感じしちゃうけど、まあそのへんはベストエフォートで…)
バージョンロックした場合の落とし穴として、古いライブラリに依存し続けるという問題が起きがち。そこは、依存ライブラリを最新に上げても動かせるかどうかのチェックは随時行ったほうがいい。例えばnightly buildなど。
これは理想の話をしていて、なかなか現実思い通りにはいかないものですけれどもね。現実は厳しい。