Qiskit SDKバージョン戦略
Qiskitのバージョン番号はセマンティックバージョニングに従います。
バージョン番号は、メジャー、マイナー、パッチバージョンの3つの主要コンポーネントで
構成されます。例えば、バージョン番号X.Y.Zでは、Xはメジャーバージョン、
Yはマイナーバージョン、Zはパッチバージョンです。
破壊的なAPI変更はメジャーバージョンリリースのために予約されています。メジャー バージョンリリース間の最小期間は1年です。マイナーバージョンはAPIの互換性を 壊すことなく新機能とバグ修正を導入し、現在のメジャーバージョンに対してのみ 定期的に(現在は3ヶ月ごとに)公開されます。パッチバージョンは、アクティブに サポートされている各リリースシリーズ(つまり、メジャーバージョン)の最新マイナー バージョンで特定されたバグの修正を提供します。同時にサポートされるリリース シリーズは最大2つであり、これは新しいメジャーバージョンリリース後の重複期間中 にのみ発生します(詳細は以下で説明します)。
リリーススケジュール
暫定的なリリーススケジュールは以下の通りです:
最新のリリーススケジュールについては、Qiskit GitHubプロジェクトのマイルストーンリストを参照してください。こちらには常に最新のリリース計画が含まれています。
新しいメジャーバージョンのリリースに伴い、前のメジャーバージョンはバグ修正に 対して少なくとも6ヶ月間、セキュリティ修正に対して1年間サポートされます。この 期間中、このメジャーバージョンに対してはパッチリリースのみが公開されます。 サポートが終了する際に最終パッチバージョンが公開され、そのリリースはその メジャーバージョンシリーズのサポート終了も文書化します。下流の Qiskit利用者とそのユーザーがコードを移行する機会を与えるため、前のメジャー バージョンにはより長いサポート期間が必要です。 Qiskitに依存する下流ライブラリは、ライブラリのユーザーベースが新しいAPI変更に 移行する時間が必要なため、新しいメジャーバージョンのリリース直後に最低必要 Qiskitバージョンを引き上げるべきではありません。前のメジャーQiskitバージョンの サポート期間を延長することで、下流プロジェクトは次のメジャーバージョンとの 互換性を確保する時間を得ることができます。下流プロジェクトは、ユーザーに 移行パスを提供するために、同時に2つのリリースシリーズをサポートすることが できます。
セマンティックバージョニングの目的において、Qiskitの公開APIとは、プライベート
としてマークされていない(アンダースコア_プレフィックスなし)すべての文書化
されたモジュール、クラス、関数、またはメソッドと見なされます。ただし、特定の
文書化されたAPIに対して明示的な例外が設けられる場合があります。そのような場合、
これらのAPIは安定したインターフェースとしてはまだ考慮されていないことが明確に
文書化され、これらの不安定なインターフェースの使用に対してユーザーに見える警告
がアクティブに出されます。さらに、一部の状況では、プライベートとしてマークされた
インターフェースが公開APIの一部と見なされることがあります。通常、これは2つの
ケースでのみ発生します:インターフェースの実装を定義する際にサブクラスが
プライベートメソッドをオーバーライド/実装することが意図されている抽象
インターフェース定義、または安定したインターフェースを持つが安全に使用する
ことが推奨されない上級者向けの低レベルメソッド(クラス/安全性不変条件を
自分で維持する責任がユーザーにある場合。この典型的な例は
QuantumCircuit._appendメソッドです)。
サポートされるPythonバージョン、最小サポートRustバージョン(ソースからQiskitを ビルドする場合)、およびQiskitが使用するPythonパッケージの依存関係(依存関係の 最小サポートバージョンを含む)は、後方互換性の保証の一部ではなく、いかなる リリースでも変更される可能性があります。マイナーまたはメジャーバージョンリリース のみが、Qiskitの使用またはビルドのための最小要件を引き上げます(新しい依存関係の 追加を含む)が、パッチ修正にはPythonまたはその他の依存関係の新しいバージョンの サポートが含まれる場合があります。通常、依存関係の 最小バージョンは、古い依存関係 バージョンのサポートが終了した場合、または最新の依存関係リリースと古いバージョン との互換性を維持できない場合にのみ引き上げられます。
アップグレード戦略
新しいメジャーバージョンがリリースされた場合、推奨されるアップグレードパスは、
まず前のメジャーバージョンの最新マイナーバージョンにアップグレードすることです。
新しいメジャーバージョンの直前に、最終マイナーバージョンが公開されます。この
最終マイナーバージョンリリースX.Y+1.0.0はX.Y.0と同等ですが、新しいメジャー
バージョンシリーズで行われたAPI変更に対する警告と非推奨が含まれています。
例えば、1.0.0リリースの直前に、0.46.0リリースが公開されます。0.46.0リリースは 0.45.0リリースと同等ですが、1.0.0リリースの一部として行われたAPI変更を文書化する 追加の非推奨警告が含まれています。このパターンは、将来のメジャーバージョン リリースにも使用されます。
Qiskitユーザーはまずこの最終マイナーバージョンにアップグレードして非推奨警告を
確認し、潜在的に破壊的なリリースを試す前にQiskitの使用方法を調整する必要が
あります。前のメジャーバージョンはアップグレードに十分な時間を提供するために
少なくとも6ヶ月間サポートされます。これを管理する典型的なパターンは、互換性が
確認されるまで次のメジャーリリースシリーズの 使用を避けるために最大バージョンを
固定することです。例えば、現在のメジャーQiskitバージョンが1の場合、要件ファイル
にqiskit<2を指定すると、破壊的なAPI変更のないQiskitのバージョンを使用する
ことが保証されます。
次のメジャーバージョン未満にバージョンを制限することで、
メジャーバージョンリリース前に非推奨警告を確認できます。
この制限がなければ、pipはデフォルトで
利用可能な最新バージョンをインストールします。
QPYシリアライゼーション形式は後方互換性があるため、新しいQiskitリリースは常に以前のQiskitリリースで生成されたQPYファイルを読み込むことができます。ただし、この形式は前方互換性がないため、原則として、新しいバージョンのQiskitで生成されたQPYファイルを古いリリースで読み込むことはできません。メジャーバージョンリリース間のユーザー移行を容易にするため、qiskit.qpy.dump()関数は、X.0.0とX-1.Y.0リリース(Yはそのシリーズの最後のマイナーバージョン)の間で少なくとも1つの重複バージョンを常にサポートします。パラメータqiskit.qpy.dump(..., version=...)を使用すると、新しいリリースから両方のメジャーバージョンで読み込めるQPY形式ファイルを保存できます。詳細はRFC 0020を参照してください。
プレリリース
各マイナーおよびメジャーバージョンリリースについて、Qiskitは
PEP440に準拠したプレリリースを公開します。
通常、これらはX.Y.0rc1の形式のリリース候補です。rcリリースは確定したAPI
サーフェスを持ち、予定されているリリースのテストに使用されます。
PEP440のプレリリースサフィックス(a、b、またはpreなど)が
公開された場合、それはrcリリースと同じ保証を持たず、プレビュー
リリースにすぎないことに注意してください。APIはこれらのプレリリースと
同じバージョン番号の最終リリースの間で変更される可能性があります。
例えば、1.0.0pre1は1.0.0とは異なる最終APIを持つ可能性があります。
ポストリリース
リリースのパッケージングに問題がある場合、それを修正するために
ポストリリースが発行されることがあります。これらはX.Y.Z.1の形式で、
4番目の整数がX.Y.Zリリースの最初のポストリリースであることを示します。
例えば、qiskit-terra(Qiskitの旧パッケージ名)の0.25.2リリースには
sdistパッケージの公開に関する問題があり、この問題を修正したポストリリース
0.25.2.1が公開されました。コードは同一であり、0.25.2.1はリリースの
パッ ケージングの問題のみを修正しました。
貢献者が非推奨をマークする方法
ソースコードに非推奨を追加する手順については、Qiskit SDKリポジトリの非推奨ガイドを参照してください。