8
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Perl モジュールの標準的なバージョンナンバリング方法

Last updated at Posted at 2015-05-10

プログラムのバージョン番号の宣言方法について、深く考えたい人はそんなにいないと思いますが、Perl においては色々なやり方があり、やや複雑な事情があるようです。1
CPAN モジュールなどを見ていても、各々流儀が違っており、正に「道は1つではない」という Perl の思想が現れているようにも思えます。

そういう状況なので、初めて自分でライブラリモジュールを作るような場合、どのようにバージョン番号をつければいいか悩む人もいるだろうと思います。

というわけで、この文書では、いくつかの代表的・標準的なやり方を紹介することで、これから Perl プログラムを開発・保守する方の助けになれればと思います。

誤記などあればご指摘下さい。

主に以下の2文書を参考にしています。

CPAN 準拠の浮動小数点(X.YY)スタイル

10進数バージョンとも呼ばれています。
次のような宣言方法です。

our $VERSION = "1.12";

正しい CPAN バージョン番号は、小数点の後に少なくとも 2 桁の数字がある 浮動小数点数とのことです。

「ベータ」や「アルファ」のモジュールをリリースする場合、1.13_01 のように正規のバージョン番号の後に "_" を付け、続いて最低2桁の番号を付します。
こうする場合、以下のような宣言方法になります。

our $VERSION = "1.12_01";
our $XS_VERSION = $VERSION; # only needed if you have XS code
$VERSION = eval $VERSION;

ドット付き 10 進数バージョン(vX.Y.Z)

これは次のいずれかの宣言になります。

use version; our $VERSION = 'v0.12.1';
use version 0.77; our $VERSION = version->declare('v0.12.1');

後者が version.pm のドキュメントで紹介されている正式なスタイルですが、前者でも Perl 5.8 以降で正しく動くようです。23
従って、前者がより汎用的な書き方と言えそうです。

Semantic Versioning ライクな宣言ができますが、完全に準拠しているわけではなく、例えば 'v1.0.0-alpha' のような記法はできないようです。4

その他参考

脚注

  1. Version numbers should be boring | David Golden

  2. Tatsuhiko Miyagawa's blog — How to correctly use semantic version (vX.Y.Z) in perl modules

  3. 執筆時点の Carmel では use version; our $VERSION = version->declare('v0.1.22'); になっていました。

  4. 手元の version.pm (v0.9902) で version->parse('v1.0.0-alpha') を試したところ Invalid version format (non-numeric data) とエラーになってしまいました。

8
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?