KEIS BLOGは株式会社ケイズ・ソフトウェアが運営しています。

KEIS BLOG

KEIS BLOG

セマンティックバージョニング

Go言語プロジェクトでのセマンティックバージョニングの採用とそのメリット

はじめに

前回はGo言語プロジェクトでのChangelogの管理について、特にコンベンショナルコミットとの連携を中心に解説しました。今回はその続きとして、セマンティックバージョニングについて解説します。

セマンティックバージョニングとは

セマンティックバージョニングは、ソフトウェアのバージョンを明示的かつ一貫性を持って管理する方法論です。基本の形は MAJOR.MINOR.PATCH となっており、それぞれの数字が特定の意味を持っています。

各バージョン番号の意味

  • MAJOR: 互換性がないAPIの変更がある場合にインクリメント
  • MINOR: 互換性があり、新機能が追加された場合にインクリメント
  • PATCH: 互換性があり、バグが修正された場合にインクリメント

Go言語でのセマンティックバージョニング

Go言語はモジュールの管理にもセマンティックバージョニングが広く採用されています。Goのパッケージ管理ツールであるgo modでも、このバージョニング方法がフルサポートされています。

具体的な実例: Goプロジェクトにおけるバージョン変更

Go言語において以下のような変更があったとしましょう。

変更前のGoコード(v1.0.0)


package main

func Add(a int, b int) int {
  return a + b
}

func main() {
  result := Add(3, 4)
  println(result)
}

新機能を追加(MINORバージョンアップ: v1.1.0)


package main

// この関数は新機能です。
func Multiply(a int, b int) int {
  return a * b
}

func Add(a int, b int) int {
  return a + b
}

func main() {
  result := Add(3, 4)
  println(result)

  newResult := Multiply(3, 4)
  println(newResult)
}

バグ修正(PATCHバージョンアップ: v1.1.1)


package main

func Multiply(a int, b int) int {
  return a * b
}

// この関数はバグ修正がされました。
func Add(a int, b int) int {
  if a < 0 || b < 0 {
    return 0
  }
  return a + b
}

func main() {
  result := Add(3, 4)
  println(result)

  newResult := Multiply(3, 4)
  println(newResult)
}

破壊的変更(MAJORバージョンアップ: v2.0.0)


package main

func Multiply(a int, b int) int {
  return a * b
}

// この関数は破壊的変更がされました。
func Add(a, b, c int) int {
  return a + b + c
}

func main() {
  result := Add(3, 4, 5)
  println(result)

  newResult := Multiply(3, 4)
  println(newResult)
}

短い例で機能追加と破壊的変更の例を作るのが難しくて、ちょっと無理やり感ありますが、雰囲気で理解していただくとして・・・。破壊的変更が無い限り、いくら機能追加してもメジャーバージョンは上がらないよというのが原則ですね。

go-semantic-releaseの活用

前回の記事で紹介したgo-semantic-releaseを用いると、セマンティックバージョニングに基づいたリリースとChangelogの生成が自動化できます。


# バージョンを自動でインクリメントしてタグを付ける
go-semantic-release -ghr

セマンティックバージョニングのメリット

  • 明確性: バージョン番号だけで、そのバージョンで何が変わったのかが一目でわかる。
  • 自動化の容易性: バージョン管理とChangelog生成を一元的に自動化できる。

参考リンク

まとめ

セマンティックバージョニングは、Go言語プロジェクトにおいても多くのメリットをもたらします。特に、コンベンショナルコミットとの連携により、バージョン管理とChangelog生成を効率よく行うことが可能です。

エンジニア募集中!

採用情報はこちら

CATEGORY

技術情報

思考

便利サービス

社内イベント

採用担当の戦い

その他

メンバー

LATEST ENTRY

2026.07.08

見慣れないIPアドレスの正体を調べる4つの方法

技術情報

2026.07.08

「providerを固定したのになぜ直らない?」Terraform初心者がハマる落とし穴

技術情報

2026.07.08

【KEISのメンバー #1】入社2年目・若手エンジニアに聞く、未経験からの1年と「続けられるエンジニア」

メンバー

2026.06.21

{% partial %} 文法リファレンス ― 名前・属性・型解決・スコープの全仕様

技術情報

2026.06.21

Liquid に自作タグを足す ― partial タグで見る作り方

技術情報

TAG