この記事の要点
- Swift 5.1 の目標・リリースプロセス・想定スケジュールを示した記事です。
- Swift 5.1 の主目標は、言語が module stability を達成することです。
- Apple プラットフォームでは ABI が安定化済みのため、Swift 5.1 は Swift 5.0 とバイナリ互換であり、今後の Swift リリースともバイナリ互換になります。一方、Linux などの非 Apple プラットフォームでは、より入念な検証のため ABI はまだ完全には安定していません。
- ソース互換性は高く保たれ、Swift 5.0 コンパイラでビルドできたソースの大半は Swift 5.1 コンパイラでもコンパイルできる見込みです。ただし Swift 5.1 のバグ修正により、これまで検出されなかったエラーが検出される可能性はあります。
- Swift 5.0 は ABI への永続的な影響をすべて評価する必要があり、収束まで通常以上の集中を要しました。その反省から、Swift 5.1 は従来より大幅に短い開発期間が設定され、破壊的な変更の締め切りも厳格化されています。
masterからswift-5.1-branchへの最終マージは 2019 年 3 月 18 日で、それ以降は厳選された重要な修正のみがリリースに入ります。
リリース計画の概要
Swift 5.1 の位置づけ
Swift 5.1 の主たる目標は、言語が module stability を達成することです。module stability は、異なるコンパイラでビルドされたモジュールを安定して利用できるようにするための取り組みで、Swift 5.0 で達成された ABI 安定化に続く重要なステップとなります。
バイナリ互換性
Apple プラットフォームでは、ABI が既に安定化されているため、Swift 5.1 は Swift 5.0 とバイナリ互換であり、今後の Swift リリースともバイナリ互換になります。バイナリ互換性とは、異なる Swift コンパイラでコンパイルされた Swift コードが互いにリンクし、ランタイムレベルで相互運用できることを指します。
一方、Linux などの非 Apple プラットフォームでは、より入念な検証(vetting)を可能にするため、ABI はまだ完全には安定していません。特に、Linux ベースの新しいプラットフォームでこうした検証が必要とされています。
ソース互換性
Swift 5.0 と同様、Swift 5.0 コンパイラでビルドできたソースの大半は、Swift 5.1 コンパイラでもコンパイルできるはずです。ただし、Swift 5.1 のバグ修正によって、これまで検出されていなかったコードのエラーが検出されるようになる可能性はあります。
スナップショットによる提供
Swift 5.1 リリースブランチのダウンロード可能なスナップショットは、継続的インテグレーション(CI)テストの一部として定期的に公開されます。Swift 5.1 のリリース後は、スナップショットに加えて公式の最終ビルドも公開されます。
スケジュールとブランチ運用
Swift 5.0 は、ABI への永続的な影響をすべて評価しながら進める必要があり、収束に至るまで通常以上の集中と注意を要しました。その結果、Swift 5.1 は従来のリリースより大幅に短い開発期間が設定されています。これは、成熟して安定した 5.1 リリースを確実に届けるためで、破壊的な変更の締め切りもより厳格に定められています。
swift-5.1-branch には Swift 5.1 でリリースされる変更が含まれ、次のように運用されます。
- 直近:
swift-5.1-branchがmasterから最初に分岐済みです。 - 最終ブランチ作成日まで、定期的に
masterがswift-5.1-branchにマージされます。 - 2019 年 3 月 18 日(最終ブランチ作成):
masterからswift-5.1-branchへの最後のマージが行われます。それ以降は「bake(熟成)」期間として、厳選された重要な修正のみがプルリクエストを通じてリリースに入ります。
この計画には注目すべき例外があります。indexstore-db・sourcekit-lsp・swift-corelibs-foundation・swift-corelibs-libdispatch・swift-corelibs-xctest・swift-llbuild・swift-package-manager・swift-stress-tester は master から swift-5.1-branch へ毎日マージされ、これらの最終締め切りは 3 月 18 日より後になります。一部のプロジェクトの締め切りは次のとおりです。
| プロジェクト | 締め切り |
|---|---|
| swift | 2019 年 3 月 18 日 |
| swift-llbuild | 2019 年 4 月 10 日 |
| swift-package-manager | 2019 年 4 月 10 日 |
Swift 5.1 のブランチ運用は複数のリポジトリにまたがり、indexstore-db・sourcekit-lsp・swift・swift-clang・swift-cmark・swift-compiler-rt・swift-corelibs-foundation・swift-corelibs-libdispatch・swift-corelibs-xctest・swift-integration-tests・swift-llbuild・swift-lldb・swift-llvm・swift-package-manager・swift-stress-tester・swift-syntax・swift-xcode-playground-support が swift-5.1-branch を持ちます。
リリースマネージャ
リリース全体は次の担当者が統括し、リリースが収束するにつれて変更管理が厳格化される時点を告知します。
- Ted Kremenek: Swift 5.1 全体のリリースマネージャ
- Duncan Exon Smith: swift-llvm・swift-clang・swift-compiler-rt・swift-clang-tools-extra・swift-libcxx のリリースマネージャ
- Fred Riss: swift-lldb のリリースマネージャ
- Ben Cohen: Swift 標準ライブラリのリリースマネージャ
- Tony Parker: swift-corelibs-foundation のリリースマネージャ
- Pierre Habouzit: swift-corelibs-libdispatch のリリースマネージャ
- Brian Croom: swift-corelibs-xctest のリリースマネージャ
- Rick Ballard: swift-package-manager のリリースマネージャ
- Daniel Dunbar: swift-llbuild のリリースマネージャ
- Argyrios Kyrtzidis: sourcekit-lsp・indexstore-db・swift-stress-tester のリリースマネージャ
リリース管理プロセスについての質問は、Swift Forums への投稿や Ted Kremenek への連絡が案内されました。
参加・確認すべきポイント
Swift 5.1 に変更を取り込む流れ
- すべての言語・API の変更は Swift Evolution プロセスを経ます。Swift 5.1 への反映を狙う Proposal は、ブランチ作成日までに完了することを目指すのが望ましいとされました。例外は個別に判断され、特にリリースの中核目標と結びつく場合に考慮されます。
- それ以外の変更(バグ修正、診断の改善、SourceKit のインターフェイス改善など)は、リスクと影響に基づいて受け入れられます。
- リリースの品質確認に役立つ場合は、リスクの低いテストの微調整もリリースブランチに遅い段階で受け入れられます。
- リリースが収束するにつれて、取り込み基準は徐々に厳しくなります。
プルリクエストに添える情報
最終再ブランチ後にリリースブランチへの取り込みを提案するプルリクエストには、次の情報を含めます。
- Explanation(説明): 修正する問題や行う拡張の説明。簡潔でよいが明確であること。
- Scope(影響範囲): 変更の影響・重要度の評価。たとえばソース互換性を壊す言語変更かどうかなど。
- SR Issue: 対応する bugs.swift.org の SR 番号(該当する場合)。
- Risk(リスク): その変更を取り込むことでリリースに生じる具体的なリスク。
- Testing(テスト): 影響を検証するために実施済み、または必要なテスト。
- Reviewer(レビュアー): 影響を受けるコンポーネントのコードオーナーによるレビュー。
master から自動的にマージされる変更を除き、swift-5.1-branch に入るすべての変更は、対応するリリースマネージャが受け入れるプルリクエストを経る必要があります。