メジャーバージョンアップデートに関する考慮事項
新しいメジャーバージョンへのアップデートは、絶対に必要な場合にのみ行うべきです。メジャーバージョンのアップデートは、あなたとモジュールのユーザーの両方にとって重要な変更を意味します。メジャーバージョンのアップデートを検討する際には、以下の点を考慮してください:
- 新しいメジャーバージョンのリリースが、以前のメジャーバージョンのサポートに何を意味するのか、ユーザーに明確に伝えてください。
以前のバージョンは非推奨ですか?以前と同様にサポートされていますか?バグ修正を含め、以前のバージョンを維持しますか? - 古いバージョンと新しいバージョンの2つのバージョンのメンテナンスを引き受ける準備をしてください。たとえば、1つのバージョンでバグを修正した場合、その修正をもう1つのバージョンに移植することがよくあります。
- 新しいメジャーバージョンは、依存関係管理の観点から見ると新しいモジュールです。リリース後に新しいモジュールを使用するためには、ユーザーはアップグレードするのではなく、更新する必要があります。
新しいメジャーバージョンは、前のメジャーバージョンとは異なるモジュールパスを持つためです。たとえば、モジュールパスが example.com/mymodule のモジュールの場合、v2 バージョンは example.com/mymodule/v2 というモジュールパスを持ちます。 - 新しいメジャーバージョンを開発する際には、新しいモジュールからパッケージをインポートするコードのインポートパスも更新する必要があります。モジュールのユーザーも、新しいメジャーバージョンにアップグレードしたい場合は、インポートパスを更新する必要があります。
メジャーリリースのためのブランチ作成
新しいメジャーバージョンを開発する準備をする際にソースを扱う最も簡単な方法は、前のメジャーバージョンの最新バージョンでリポジトリをブランチすることです。
たとえば、コマンドプロンプトでモジュールのルートディレクトリに移動し、そこで新しい v2 ブランチを作成することができます。
$ cd mymodule
$ git checkout -b v2
Switched to a new branch "v2"
ソースをブランチしたら、新しいバージョンのソースに次の変更を加える必要があります:
- 新しいバージョンの go.mod ファイルで、モジュールパスに新しいメジャーバージョン番号を追加します。以下の例のように:
- 既存のバージョン:
example.com/mymodule
- 新しいバージョン:
example.com/mymodule/v2
- 既存のバージョン:
- Go コード内で、モジュールからパッケージをインポートするすべてのインポートパスを更新し、モジュールパス部分にメジャーバージョン番号を追加します。
- 古いインポート文:
import "example.com/mymodule/package1"
- 新しいインポート文:
import "example.com/mymodule/v2/package1"
- 古いインポート文:
公開手順については、モジュールの公開を参照してください。