モジュールの開発と公開

関連するパッケージをモジュールにまとめ、他の開発者が使用できるようにモジュールを公開できます。このトピックでは、モジュールの開発と公開の概要を説明します。

モジュールの開発、公開、および使用をサポートするために、以下を使用します。

こちらも参照

モジュールの開発と公開のワークフロー

他のユーザーにモジュールを公開する場合、モジュールを使いやすくするためのいくつかの規則を採用します。

次の高レベルのステップは、「モジュールのリリースとバージョン管理のワークフロー」で詳しく説明されています。

  1. モジュールに含めるパッケージを設計およびコーディングします。
  2. Goツールを使用して他のユーザーが利用できるようにする規則を使用して、コードをリポジトリにコミットします。
  3. モジュールを公開して、開発者が発見できるようにします。
  4. 時間の経過とともに、各バージョンの安定性と下位互換性を示すバージョン番号付け規則を使用してモジュールを改訂します。

設計と開発

モジュールの関数とパッケージがまとまりのある全体を形成している場合、開発者はモジュールを見つけて使用しやすくなります。モジュールの公開APIを設計するときは、その機能を焦点を絞って個別に保つようにしてください。

また、下位互換性を念頭に置いてモジュールを設計および開発すると、ユーザーはコードの変更を最小限に抑えながらアップグレードできます。コード内の特定の手法を使用して、下位互換性を損なうバージョンをリリースすることを回避できます。これらの手法の詳細については、Goブログの「モジュールの互換性を維持する」を参照してください。

モジュールを公開する前に、replaceディレクティブを使用してローカルファイルシステムでモジュールを参照できます。これにより、モジュールがまだ開発中の間に、モジュール内の関数を呼び出すクライアントコードを簡単に記述できます。詳細については、「モジュールのリリースとバージョン管理のワークフロー」の「公開されていないモジュールに対するコーディング」を参照してください。

分散型公開

Goでは、他の開発者が使用できるように、リポジトリ内のコードにタグを付けることでモジュールを公開します。Goツールは、モジュールパス(スキームを省略したURL)を使用して見つけられるリポジトリから、またはプロキシサーバーから直接モジュールをダウンロードできるため、モジュールを集中型サービスにプッシュする必要はありません。

コードでパッケージをインポートした後、開発者はGoツール(go getコマンドを含む)を使用してモジュールのコードをダウンロードしてコンパイルします。このモデルをサポートするために、Goツール(他の開発者の代わりに)がリポジトリからモジュールのソースを取得できるようにする規則とベストプラクティスに従います。たとえば、Goツールは、指定したモジュールのモジュールパスと、リリース用にモジュールにタグを付けるために使用するモジュールバージョン番号を使用して、ユーザーのためにモジュールを特定してダウンロードします。

ソースと公開の規則とベストプラクティスについては、「モジュールソースの管理」を参照してください。

モジュールの公開に関するステップバイステップの説明については、「モジュールの公開」を参照してください。

パッケージの検出

モジュールを公開し、誰かがGoツールでフェッチした後、pkg.go.devのGoパッケージ検出サイトで表示されるようになります。そこで、開発者はサイトを検索して見つけ、ドキュメントを読むことができます。

モジュールの使用を開始するには、開発者はモジュールからパッケージをインポートし、go getコマンドを実行して、コンパイルするソースコードをダウンロードします。

開発者がモジュールを見つけて使用する方法の詳細については、「依存関係の管理」を参照してください。

バージョン管理

時間の経過とともにモジュールを改訂および改善する際に、各バージョンの安定性と下位互換性を示すように設計されたバージョン番号(セマンティックバージョニングモデルに基づいています)を割り当てます。これにより、モジュールを使用している開発者は、モジュールが安定しているかどうか、およびアップグレードに動作の大きな変更が含まれる可能性があるかどうかを判断できます。リポジトリ内のモジュールのソースに番号でタグ付けすることにより、モジュールのバージョン番号を示します。

メジャーバージョンアップデートの開発の詳細については、「メジャーバージョンアップデートの開発」を参照してください。

Goモジュールでセマンティックバージョニングモデルを使用する方法の詳細については、「モジュールのバージョン番号付け」を参照してください。