リリース機能
1. リリース機能の本質
GitHubにおけるリリースは、単なるタグ付けを超えた、パッケージ化されたソフトウェア配布の仕組みです。Gitタグをベースとしながら、以下の要素を統合的に管理できます。
- リリースノート(変更内容の記述)
- バイナリファイル(コンパイル済みプログラムなど)
- コントリビューターの記録
- 自動生成されたアーカイブ(ZIP/tarball)
リポジトリへの読み取り権限があれば誰でもリリースを閲覧・比較できますが、管理には書き込み権限が必要です。
2. リリースのライフサイクル
2.1. リリース作成の基本手順
-
リポジトリのReleasesセクションにアクセス
- リポジトリのメインページで「Releases」リンクをクリック
-
新規リリースのドラフト作成
- 「Draft a new release」をクリック
- タグの選択または新規作成
- ターゲットブランチの指定
-
リリース情報の入力
- タイトル設定
- リリースノートの記述(または自動生成)
- バイナリファイルの添付(オプション)
- 前回リリースタグの指定(オプション)
-
公開設定
- プレリリースの指定(不安定版の場合)
- 最新リリースとしての設定
- ディスカッションの作成(オプション)
-
公開またはドラフト保存
- Immutableリリースが有効な場合は、ドラフトで全アセットを添付してから公開を推奨
2.2. リリースの編集
公開後のリリースも編集可能です。Releasesページで対象リリースの鉛筆アイコンをクリックし、フォームで詳細を編集後「Update release」をクリックします。
説明文で@メンションを追加または削除すると、リリースのコントリビューターセクションに反映されます。
注意: Immutableリリースが有効な場合、公開後はタイトルとリリースノートのみ編集可能です。
2.3. リリースの削除
Releasesページで対象リリースのゴミ箱アイコンをクリックし、「Delete this release」で削除できます。
3. リリースノートの自動生成
手動でのリリースノート作成は時間がかかります。自動生成機能を使うと、以下の情報が自動的に整理されます。
- マージされたプルリクエスト一覧
- コントリビューター一覧
- 完全な変更履歴へのリンク
3.1. 自動生成の基本的な使い方
リリース作成画面で「Generate release notes」ボタンをクリックするだけで、前回のリリースからの変更内容が自動的に抽出されます。生成されたノートを確認し、必要に応じて調整してください。
3.2. 高度なカスタマイズ設定
.github/release.ymlファイルを作成することで、自動生成の動作を細かく制御できます。
設定可能なパラメータ
| パラメータ | 説明 |
|---|---|
changelog.exclude.labels |
リリースノートから除外するラベルのリスト |
changelog.exclude.authors |
除外するユーザー/Botのログイン名 |
changelog.categories[*].title |
変更カテゴリのタイトル(必須) |
changelog.categories[*].labels |
カテゴリに含めるラベル(必須) |
changelog.categories[*].exclude.labels |
カテゴリから除外するラベル |
changelog.categories[*].exclude.authors |
カテゴリから除外するユーザー |
セマンティックバージョニングを使用する例
# .github/release.yml
changelog:
exclude:
labels:
- ignore-for-release
authors:
- 山田太郎
categories:
- title: 破壊的変更
labels:
- Semver-Major
- breaking-change
- title: 新機能
labels:
- Semver-Minor
- enhancement
- title: その他の変更
labels:
- "*"
Dependabot更新を分離する例
ラベル付けをしていないリポジトリでも、Dependabotの自動更新を別カテゴリとして表示できます。
# .github/release.yml
changelog:
categories:
- title: 機能追加
labels:
- '*'
exclude:
labels:
- dependencies
- title: 依存関係の更新
labels:
- dependencies
注意: labels: '*'は、他のカテゴリに該当しないすべてのプルリクエストを含めるキャッチオール指定です。この設定は必須です。
4. リリースの検索機能
大規模なプロジェクトでは、過去のリリースを効率的に見つける必要があります。Releasesページの「Find a release」フィールドで以下の修飾子を使用できます。
4.1. 検索構文
| 修飾子 | 例 | 説明 |
|---|---|---|
draft:true |
draft:true |
ドラフトリリースのみ検索 |
draft:false |
draft:false |
公開済みリリースのみ検索 |
prerelease:true |
prerelease:true |
プレリリースのみ検索 |
prerelease:false |
prerelease:false |
正式リリースのみ検索 |
tag:TAG |
tag:v1 |
特定のタグで検索(v1.0、v1.2.5なども含む) |
created:DATE |
created:2024 |
作成日で検索(範囲指定可能) |
これらの修飾子は、タイトル、本文、タグとも組み合わせて使用できます。
5. リリースの閲覧
5.1. リリース一覧の表示
リポジトリのメインページで「Releases」をクリックし、ページ上部の「Releases」タブを選択すると、リリース一覧が表示されます。
5.2. タグ一覧の表示
Releasesページ上部の「Tags」タブをクリックすると、タグ一覧が表示されます。
5.3. GitHub CLIでの閲覧
コマンドラインからgh release viewコマンドでリリースを閲覧することもできます。
6. リリースへのリンク共有
各リリースには固有のURLが割り当てられます。
6.1. 最新リリースへのリンク
リポジトリURLの末尾に/releases/latestを追加すると、常に最新リリースにアクセスできます。
https://github.com/組織名/リポジトリ名/releases/latest
最新リリースのアセットに直接リンクする場合:
https://github.com/組織名/リポジトリ名/releases/latest/download/ファイル名.zip
6.2. 特定リリースへのリンク
Releasesページで対象リリースのタイトルを右クリックし、URLをコピーできます。
7. リリースの比較
異なるバージョン間の変更内容を視覚的に確認できます。
- Releasesページで基準となるリリースの「Compare」ドロップダウンメニューを選択
- 比較対象のタグを選択
- 差分が表示されます
8. クエリパラメータによる自動化
URLにクエリパラメータを追加することで、リリースフォームを事前入力できます。これにより、定型的なリリース作成作業を効率化できます。
8.1. サポートされているパラメータ
| パラメータ | 例 | 説明 |
|---|---|---|
tag |
?tag=v1.0.1 |
指定されたタグに基づくリリースを作成 |
target |
?target=release-1.0.1 |
指定されたブランチの最新コミットに基づいて作成 |
title |
?title=バージョン1.0.1 |
リリース名を事前入力 |
body |
?body=ウィジェット対応追加 |
リリース本文を事前入力 |
prerelease |
?prerelease=1 |
プレリリースとしてマーク |
8.2. 実用例
https://github.com/組織名/リポジトリ名/releases/new?tag=v1.0.1&title=バージョン1.0.1&body=ウィジェット対応を追加しました
このURLにアクセスすると、指定された情報が入力済みのリリースフォームが開きます。適切な権限が必要で、無効なURLや権限不足の場合は404エラーが表示されます。
9. 技術的な制約と仕様
9.1. ストレージとファイルサイズ
- 1リリースあたりのアセット数: 最大1,000個
- 個別ファイルサイズ: 2GB未満
- リリース全体のサイズ: 制限なし
- 帯域幅使用量: 制限なし
9.2. Git LFSオブジェクトの扱い
リポジトリの管理者権限を持つユーザーは、自動生成されるZIPファイルやtarballにGit LFS(Large File Storage)オブジェクトを含めるかどうかを選択できます。
9.3. Immutableリリース
Immutableリリースを有効にすると、公開後のリリースは変更できなくなります(タイトルとリリースノートを除く)。この設定が有効な場合は、以下の運用を推奨します。
- まずドラフトとしてリリースを作成
- すべてのアセットを添付
- 内容を確認後、公開
10. 関連機能との統合
10.1. GitHub Marketplaceへの公開
特定のリリースからアクションをGitHub Marketplaceに公開できます。
10.2. セキュリティアドバイザリ
リリースが脆弱性を修正する場合、セキュリティアドバイザリを公開することを推奨します。GitHubは公開されたアドバイザリをレビューし、影響を受けるリポジトリにDependabotアラートを送信する可能性があります。
10.3. 依存関係グラフ
リポジトリの「Dependents」タブで、どのリポジトリやパッケージがあなたのコードに依存しているかを確認できます。新しいリリースが他のプロジェクトに与える影響を把握するのに役立ちます。
10.4. Releases API
REST APIを使用すると、以下のような操作が可能です。
- リリースの作成、編集、削除
- リリース情報の取得
- リリースアセットのダウンロード数取得
これにより、CI/CDパイプラインへの統合や、リリース管理の自動化が可能になります。
10.5. 通知の設定
リポジトリの新しいリリースだけを通知するように設定できます。他の更新(コミット、イシューなど)の通知は受け取らず、リリース時のみ通知を受ける運用が可能です。
11. まとめ
GitHubのリリース機能は、バージョン管理の基本であるタグ付けを起点に、配布、ドキュメント化、通知までを統合したシステムです。自動生成機能やカスタマイズ可能な設定により、プロジェクトの規模や運用方針に合わせた柔軟な管理が実現できます。
特に自動生成されるリリースノートと.github/release.ymlによるカスタマイズは、継続的なリリースを行うプロジェクトにおいて、ドキュメント作成の負担を大幅に軽減します。
適切に設定されたリリース管理は、ユーザーへの情報提供を改善し、開発チームの作業効率を向上させます。まずは基本的なリリース作成から始め、必要に応じて自動化やカスタマイズを導入することをお勧めします。