この記事の要点
- Swift 4.1 の目標・リリースプロセス・想定スケジュールを示した記事です。Swift 4.1 は 2018 年前半のリリースが見込まれていました。
- Swift 4.1 は Swift 4.0 とソース互換なアップデートです。中核言語へのわずかな追加的拡張に加え、Swift Package Manager・Linux 上の Swift・コンパイラと標準ライブラリ全般の品質改善を含みます。
- Swift 4.1 は Swift 4.0 とはバイナリ互換ではありません。Swift 5 での Swift ABI の安定化に向けた、さまざまな内部的な変更が含まれます。
- これまでのリリースと同様、リリースブランチの日次スナップショットを提供します。
masterへの変更が Swift 4.1 に入るのは最終ブランチ作成日(2017 年 12 月 4 日)まで、それ以降は厳選された重要な修正のみがswift-4.1-branchに入ります。
リリース計画の概要
Swift 4.1 の位置づけ
Swift 4.1 は Swift 4.0 とソース互換なアップデートです。中核言語へのわずかな追加的拡張に加え、Swift Package Manager、Linux 上の Swift、コンパイラと標準ライブラリ全般の品質改善が含まれます。
一方で Swift 4.1 は Swift 4.0 とバイナリ互換ではありません。Swift 5 で Swift ABI を安定化させる取り組みの一環として、さまざまな内部的(under-the-hood)な変更が含まれるためです。
Swift 4.1 は 2018 年前半のリリースが見込まれていました。
ソース互換性
Swift 4.0 コンパイラ(Swift 3 互換モードを使うものを含む)でビルドできたソースの大半は、Swift 4.1 コンパイラでもビルドできるはずです。ただし、絶対的な保証ができない例外もあります。コンパイラの不正な挙動に対する修正や、長く待たれていたジェネリクス機能の導入によって対処されるようになったジェネリクスのコーナーケースなどが該当します。とはいえ、大半のプロジェクトはソースを変更せずにそのままビルドできることが見込まれていました。
スナップショットによる提供
これまでのリリースと同様、Swift 4.1 でもリリースブランチの日次スナップショットを提供します。スナップショットは継続的インテグレーション(CI)テストの一部として定期的に公開されます。Swift 4.1 のリリース後は、スナップショットに加えて公式の最終ビルドも公開されます。
スケジュールとブランチ運用
swift-4.1-branch には Swift 4.1 でリリースされる変更が含まれ、次のように運用されます。
- 2017 年 10 月 18 日(初期ブランチ作成):
swift-4.1-branchがmasterから最初に分岐されます。 - 最終ブランチ作成日までおおよそ 2 週間ごとに、
masterがswift-4.1-branchにマージされます。 - 2017 年 12 月 4 日(最終ブランチ作成):
masterからswift-4.1-branchへの最後のマージが行われます。最終ブランチ作成日以降は「bake(熟成)」期間として、厳選された重要な修正のみがプルリクエストを通じてリリースに入ります。
この計画には 4 つの注目すべき例外があります。swift-package-manager・swift-llbuild・swift-corelibs-foundation・swift-corelibs-libdispatch は master から swift-4.1-branch へ毎日マージされ、これらの変更の最終締め切りは 12 月 4 日より後になり、後日告知されるとされました。
Swift 4.1 のブランチ運用は複数のリポジトリにまたがり、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-xcode-playground-support が swift-4.1-branch を持ちます。なお swift-llvm・swift-clang・swift-compiler-rt・swift-lldb は既に master から swift-4.1-branch を分岐済みで、再分岐はしません。
リリースマネージャ
リリース全体は次の担当者が統括し、リリースが収束するにつれて変更管理が厳格化される時点を告知します。
- Ted Kremenek: Swift 4.1 全体のリリースマネージャ
- Frédéric Riss: swift-llvm・swift-clang・swift-compiler-rt のリリースマネージャ
- Ben Cohen: Swift 標準ライブラリのリリースマネージャ
- Tony Parker: swift-corelibs-foundation のリリースマネージャ
- Daniel Steffen: swift-corelibs-libdispatch のリリースマネージャ
- Brian Croom: swift-corelibs-xctest のリリースマネージャ
- Rick Ballard: swift-package-manager のリリースマネージャ
- Daniel Dunbar: swift-llbuild のリリースマネージャ
なお、当時案内されていた Swift メーリングリストは現在は閉鎖・アーカイブされ、Swift Forums に置き換えられています。
参加・確認すべきポイント
Swift 4.1 に変更を取り込む流れ
- すべての言語・API の変更は Swift Evolution プロセスを経ます。どの変更がリリースのスコープに入るかの基準もそこに文書化されます。
- それ以外の変更(バグ修正、診断の改善、SourceKit のインターフェイス改善など)は、リスクと影響に基づいて受け入れられます。
- リリースの品質確認に役立つ場合は、リスクの低いテストの微調整もリリースブランチに遅い段階で受け入れられます。
- リリースが収束するにつれて、取り込み基準は徐々に厳しくなります。
プルリクエストに添える情報
リリースブランチへの取り込みを提案するプルリクエストには、次の情報を含めます。
- Explanation(説明): 修正する問題や行う拡張の説明。簡潔でよいが明確であること。
- Scope(影響範囲): 変更の影響・重要度の評価。たとえばソース互換性を壊す言語変更かどうかなど。
- SR Issue: 対応する bugs.swift.org の SR 番号(該当する場合)。
- Risk(リスク): その変更を取り込むことでリリースに生じる具体的なリスク。
- Testing(テスト): 影響を検証するために実施済み、または必要なテスト。
影響を受けるコンポーネントのコードオーナーがレビューを行います。技術レビューはコードオーナーが委任することも、必要に応じて依頼することもできます。master から自動的にマージされる変更を除き、swift-4.1-branch に入るすべての変更は、対応するリリースマネージャが受け入れるプルリクエストを経る必要があります。