メジャーバージョンアップデートに関する考慮事項

新しいメジャーバージョンへのアップデートは、絶対に必要な場合にのみ行うべきです。メジャーバージョンのアップデートは、あなたとモジュールのユーザーの両方にとって重要な変更を意味します。メジャーバージョンのアップデートを検討する際には、以下の点を考慮してください:

  • 新しいメジャーバージョンのリリースが、以前のメジャーバージョンのサポートに何を意味するのか、ユーザーに明確に伝えてください。
    以前のバージョンは非推奨ですか?以前と同様にサポートされていますか?バグ修正を含め、以前のバージョンを維持しますか?
  • 古いバージョンと新しいバージョンの2つのバージョンのメンテナンスを引き受ける準備をしてください。たとえば、1つのバージョンでバグを修正した場合、その修正をもう1つのバージョンに移植することがよくあります。
  • 新しいメジャーバージョンは、依存関係管理の観点から見ると新しいモジュールです。リリース後に新しいモジュールを使用するためには、ユーザーはアップグレードするのではなく、更新する必要があります。
    新しいメジャーバージョンは、前のメジャーバージョンとは異なるモジュールパスを持つためです。たとえば、モジュールパスが example.com/mymodule のモジュールの場合、v2 バージョンは example.com/mymodule/v2 というモジュールパスを持ちます。
  • 新しいメジャーバージョンを開発する際には、新しいモジュールからパッケージをインポートするコードのインポートパスも更新する必要があります。モジュールのユーザーも、新しいメジャーバージョンにアップグレードしたい場合は、インポートパスを更新する必要があります。

メジャーリリースのためのブランチ作成

新しいメジャーバージョンを開発する準備をする際にソースを扱う最も簡単な方法は、前のメジャーバージョンの最新バージョンでリポジトリをブランチすることです。

たとえば、コマンドプロンプトでモジュールのルートディレクトリに移動し、そこで新しい v2 ブランチを作成することができます。

  1. $ cd mymodule
  2. $ git checkout -b v2
  3. Switched to a new branch "v2"

マスターから v2 にブランチされたリポジトリを示す図

ソースをブランチしたら、新しいバージョンのソースに次の変更を加える必要があります:

  • 新しいバージョンの go.mod ファイルで、モジュールパスに新しいメジャーバージョン番号を追加します。以下の例のように:
    • 既存のバージョン: example.com/mymodule
    • 新しいバージョン: example.com/mymodule/v2
  • Go コード内で、モジュールからパッケージをインポートするすべてのインポートパスを更新し、モジュールパス部分にメジャーバージョン番号を追加します。
    • 古いインポート文: import "example.com/mymodule/package1"
    • 新しいインポート文: import "example.com/mymodule/v2/package1"

公開手順については、モジュールの公開を参照してください。