【Git】リリース自動化ツール 〜 semantic-release / 入門編 〜

◾️はじめに

https://dk521123.hatenablog.com/entry/2025/10/11/152333

の続き。

今回は、semantic-release に関して設定してみる
思ったより、簡単にできた、、、

目次

【1】Semantic Release (semantic-release)
【2】semantic-releaseの導入
 Step1:プロジェクトの準備と依存関係のインストール
 Step2:semantic-releaseの設定ファイル作成
 Step3:GitHubトークンの設定(GitHub Secrets)
 Step4:GitHub Actionsワークフローの作成
【3】使い方
 1)【任意】v0.X.Xから始めたい場合
 2)Releaseをしてみる

【1】Semantic Release (semantic-release)

* まず、復習。。。

https://dk521123.hatenablog.com/entry/2025/10/11/152333

より抜粋

* Conventional Commits に基づいてリリースを完全自動化
 + 例: feat: 新機能追加, fix: バグ修正
* npx semantic-release でリリース処理を実行
* 自動で:
 + バージョン番号決定
 + Gitタグ作成
 + リリースノート生成
 + npm/pypiなどへの公開(任意)

https://github.com/semantic-release/semantic-release

【2】semantic-releaseの導入

* 対象のGithubプロジェクトに対して以下を行う

Step1:プロジェクトの準備と依存関係のインストール

# 以下を実行
npm install --save-dev semantic-release @semantic-release/github @semantic-release/git @semantic-release/changelog @semantic-release/commit-analyzer @semantic-release/release-notes-generator

.gitignore

# Ignore node_modules 
node_modules/

Step2:semantic-releaseの設定ファイル作成

{
  "branches": [
    "main",
    "master"
  ],
  "plugins": [
    "@semantic-release/commit-analyzer",
    "@semantic-release/release-notes-generator",
    [
      "@semantic-release/changelog",
      {
        "changelogFile": "CHANGELOG.md"
      }
    ],
    [
      "@semantic-release/git",
      {
        "assets": ["package.json", "CHANGELOG.md"],
        "message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
      }
    ],
    "@semantic-release/github"
  ]
}
Items Explanations
branches リリースをトリガーするブランチを指定(例: mainやmaster)
plugins 実行するプラグインとその順序を設定。@semantic-release/gitは、生成されたCHANGELOG.mdをコミットするために使用され、[skip ci]を含むことで無限ループを防ぐ

Step3:GitHubトークンの設定(GitHub Secrets)

[1] GitHubリポジトリの「Settings」に移動
[2] 「Secrets and variables」から「Actions」を選択
[3] 「Repository secrets」または「Environment secrets」セクションで、
  GITHUB_TOKEN(または任意の名前、例: GH_TOKEN)というシークレットを設定

Step4:GitHub Actionsワークフローの作成

.github/workflows/

name: Release

on:
  push:
    branches:
      - main # または master

jobs:
  release:
    name: Release
    runs-on: ubuntu-latest
    # ⚠️ ここで権限を設定することが重要
    permissions:
      contents: write # リリースとタグを作成するために必要
      issues: write    # リリースに関連するIssueにコメントするために必要 (オプション)
      pull-requests: write # リリースに関連するPRにコメントするために必要 (オプション)

    steps:
      - name: Checkout
        uses: actions/checkout@v6
        with:
          # semantic-releaseは過去のコミット履歴を分析するため、full historyを取得します
          fetch-depth: 0 
          # persist-credentials: false は、@semantic-release/gitプラグインで独自の認証を使用する場合に推奨されます
          persist-credentials: false 

      - name: Set up Node.js
        uses: actions/setup-node@v6
        with:
          node-version: '24' # 使用するNode.jsのバージョンを指定

      - name: Install dependencies
        run: npm ci

      - name: Run semantic-release
        run: npx semantic-release
        env:
          # GITHUB_TOKENはActionsによって自動的に提供されるSecretsを使用します
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 

【3】使い方

1)【任意】v0.X.Xから始めたい場合

# タグの作成
git tag v0.0.0

# Push
git push origin v0.0.0

2)Releaseをしてみる

* * mainブランチにPushするだけ
 => PushするとRelease・タグが更新されていく
* コメントは、Semantic Versioningに従う方がいい

Semantic Versioning / Conventional Commits
https://dk521123.hatenablog.com/entry/2025/03/31/153442

関連記事

Git ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2018/06/29/104028
Github ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2019/07/18/234652
リリース自動化ツール 〜 release-please / 入門編 〜
https://dk521123.hatenablog.com/entry/2025/10/11/152333
Semantic Versioning / Conventional Commits
https://dk521123.hatenablog.com/entry/2025/03/31/153442