開発と運用

バージョン管理・パッケージツール

バージョンと依存関係の疑問はエコシステムをまたいで発生します。公開予定のバージョンがnpmの範囲指定に一致するか、package.jsonのexportsがバンドラーの期待どおり解決されるか。このページはsemverやPEP 440などのバージョンと範囲のツール、package.jsonのエディタをまとめています。

Semver計算機はバージョン比較とnpmの範囲テストを直接行え、PEP 440バージョン比較はPythonの独自体系を扱うので両者は同じではありません。package.jsonのexports可視化はサブパスをimportとrequire両方で検証し、普通のJSONビューアでは見えない不一致を発見できます。

8個のツール

Versioning & Packagesツールに関するFAQ

npmのバージョン範囲が想定外のバージョンに一致するのはなぜですか。

^1.2.3や~1.2.3のような範囲指定はどの部分の変更を許すかがsemverの規則で細かく決まっており、キャレット範囲が0.xと1.xで扱いを変える点は誤解しやすいところです。Semver計算機はバージョンと範囲の一致を直接テストできるので、手計算で推測せず確認できます。

1.0.0rc1のようなPythonバージョンは有効ですか、並び順はどうなりますか。

PEP 440ではプレリリースとして有効で、正式版の1.0.0より前に並びます。PEP 440バージョン比較はPythonバージョンの一覧を正規化して並べ替え、制約文字列との一致も確認でき、単純な文字列比較より信頼できます。

package.jsonのexportsがimportでは動くのにrequireでは動かない、あるいはその逆が起きるのはなぜですか。

exportsフィールドはimport条件とrequire条件で別のファイルを割り当てられ、CommonJS専用のファイルをimport条件に割り当てるような不一致があると片方だけ解決に失敗します。package.jsonのexports可視化は公開前に両方の条件でサブパス解決をテストしこれを発見できます。