🔖

git tag をセマンティックバージョニングでソートする方法

に公開

はじめに

Gitのタグは、特定のコミットに名前を付けるための仕組みであり、特にリリースポイントを示すためによく利用されます。しかし、git tagコマンドのデフォルトのソート順は辞書順であるため、セマンティックバージョニング(SemVer)を採用しているプロジェクトでは、タグが期待通りに並ばないことがあります。

例えば、v1.10.0v1.2.0よりも前に来てしまう問題が発生します。

$ git tag
v0.1.0
v1.0.0
v1.0.0-alpha
v1.0.0-beta
v1.10.0
v1.2.0
v2.0.0

これでは、最新のバージョンを把握するのが困難です。本記事では、git tagの出力をセマンティックバージョニングで正しくソートする方法を紹介します。

sort コマンドを利用する方法

git tag の出力をパイプで sort コマンドに渡すことで、セマンティックバージョニングに基づいたソートが可能です。sort コマンドに -V または --version-sort オプションを指定すると、バージョン番号として解釈してソートしてくれます。

$ git tag | sort -V
v0.1.0
v1.0.0-alpha
v1.0.0-beta
v1.0.0
v1.2.0
v1.10.0
v2.0.0

このように、-V オプションを使うことで、v1.10.0v1.2.0よりも後に表示され、期待通りの順序でタグが並び替えられます。

git tag--sort オプションを利用する方法

Git 2.4.0からは、git tag コマンド自体に --sort オプションが追加されました。このオプションを使うことで、外部コマンドに頼ることなく、Gitだけで完結できます。

セマンティックバージョニングでソートするには、--sort=v:refname を指定します。

$ git tag --sort=v:refname
v0.1.0
v1.0.0-alpha
v1.0.0-beta
v1.0.0
v1.2.0
v1.10.0
v2.0.0

v:refnameversion:refname の略で、タグ名をバージョンとして解釈してソートするという意味です。

逆順(降順)でソートしたい場合は、先頭に - を付けます。

$ git tag --sort=-v:refname
v2.0.0
v1.10.0
v1.2.0
v1.0.0
v1.0.0-beta
v1.0.0-alpha
v0.1.0

これにより、最新のバージョンが一番上に表示されるため、最新のリリースをすぐに確認できます。

まとめ

本記事では、git tag の出力をセマンティックバージョニングでソートする2つの方法を紹介しました。

  • sort -V を利用する方法
  • git tag --sort=v:refname を利用する方法

Gitのバージョンが古い環境でなければ、--sort オプションを利用するのが最も手軽で直感的な方法でしょう。日々の開発で git tag を利用する際に、ぜひ活用してみてください。

Discussion