【セマンティックリリース】

semantic-release とは?

💡 「次のバージョンは何番?」をコミット履歴が自動で教えてくれる
📌 このページのポイント
semantic-release:リリースの全自動化 1. コミット解析 feat: 新機能追加 fix: バグ修正 docs: ドキュメント更新 2. バージョン決定 v1.2.3 v1.3.0 3. リリース実行 - Gitタグ作成 - CHANGELOG生成 - GitHubリリース - npm publish CI/CDパイプライン(GitHub Actions等)で自動実行 バージョン決定ルール(semver) MAJOR(破壊的変更) BREAKING CHANGE 1.0.0 → 2.0.0 MINOR(新機能) feat: 1.2.0 → 1.3.0 PATCH(修正) fix: 1.2.0 → 1.2.1
semantic-releaseのイメージ
ひよこ ひよこ

semantic-releaseって何を自動化してくれるの?

ペンギン先生 ペンギン先生

ソフトウェアリリース作業をまるごと自動化してくれるツールだよ。バージョン番号を決めて、CHANGELOGを作って、Gitタグを打って、パッケージを公開する…この一連の作業を全部コミットメッセージから自動で判断してくれるんだ

ひよこ ひよこ

バージョン番号を自動で決めるってどういうこと?

ペンギン先生 ペンギン先生

たとえば「feat: 新機能追加」というコミットがあればマイナーバージョンが上がる(1.2.0→1.3.0)。「fix: バグ修正」ならパッチバージョン(1.2.0→1.2.1)。「BREAKING CHANGE」があればメジャーバージョン(1.2.0→2.0.0)。コミットメッセージのルールさえ守れば、バージョン番号で悩むことがなくなるんだ

ひよこ ひよこ

それってCI/CDの中で動くの?

ペンギン先生 ペンギン先生

そのとおり!GitHub ActionsなどのCIパイプラインの中で動かすのが基本だよ。mainブランチマージされたら自動でsemantic-releaseが走って、新しいバージョンがリリースされる流れだね

ひよこ ひよこ

npm以外のプロジェクトでも使えるの?

ペンギン先生 ペンギン先生

使えるよ。プラグインシステムが充実していて、Dockerイメージのpushやpypiへの公開、Slackへのリリース通知なんかもプラグインで対応できる。逆にnpmへの公開が不要な場合はそのステップをスキップする設定もできるよ

ひよこ ひよこ

commitlintとセットで使うのが定番なのかな?

ペンギン先生 ペンギン先生

そのとおり!commitlintでコミットメッセージの形式を強制して、semantic-releaseがその形式を読み取ってリリースする、という組み合わせが鉄板だよ。ちなみにsemantic-releaseは「リリースブランチ」の概念もサポートしていて、mainだけでなくbetaやnextブランチからのプレリリース配信もできる。大規模OSSではこの機能を使ってアルファ版やベータ版を自動配信しているんだ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「semantic-release」って出てきたら「コミット履歴からバージョンとリリースを全自動化するツール」と思えればだいたいOK!
📖 おまけ:英語の意味
「semantic-release」 = 意味のあるリリース
💬 semantic(意味論的)はセマンティックバージョニングのsemantic。「コミットの意味を読み取ってリリースする」というコンセプトだよ
← 用語集にもどる