この記事の要点
- Swift 3.1 の目標・リリースプロセス・想定スケジュールを示した記事です。Swift 3.1 は 2017 年春のリリースが見込まれていました。
- Swift 3.1 は Swift 3.0 とソース互換であることを強い目標とするマイナーリリースです。中核言語へのわずかな追加的拡張に加え、Swift Package Manager・Linux 上の Swift・コンパイラと標準ライブラリの品質改善を含みます。
- これまでのリリースで使われていた不定期な「Developer Preview」に代わり、Swift 3.1 ではリリースブランチの日次スナップショットを提供します。継続的インテグレーション(CI)でテストが通れば毎日公開されるため、より高頻度かつ細かい粒度で新機能やバグ修正を試せます。
- 2017 年初頭には焦点を Swift 4 の開発へ移す方針のため、Swift 3.1 はスコープを限定します。
masterへの変更が Swift 3.1 に入るのは 1 月 16 日までで、それ以降は厳選された重要な修正のみがswift-3.1-branchに入ります。
リリース計画の概要
Swift 3.1 の位置づけ
Swift 3.1 は Swift 3.0 とソース互換であることを強い目標とするマイナーリリースです。Swift 3.0 コンパイラでビルドできたソースの大半が Swift 3.1 コンパイラでもビルドできることを重視します。例外は、本来受け入れるべきでなかったコードを拒否するようになるコンパイラのバグ修正に限られ、実際にそうしたケースは比較的まれとされました。
中身としては、中核言語へのわずかな追加的拡張に加え、Swift Package Manager、Linux 上の Swift、コンパイラと標準ライブラリ全般の品質改善が含まれます。
Swift 3.0 から Swift 3.1 で予期せずビルドできなくなるコードに遭遇した場合は、bugs.swift.org にバグ報告することが推奨されました。
スナップショットによる提供
これまでのリリースには「Preview 1」「Preview 2」といった、収束していくリリースの安定版スナップショットを表す「Developer Preview」がありました。しかし Developer Preview は間隔が不規則で、収束していくリリースで新機能を試したりバグ修正を確認したりするには粒度が粗いこともありました。
Swift 3.1 では、これに代わってリリースブランチの日次スナップショットを提供します。
- スナップショットは継続的インテグレーション(CI)テストの一部として生成され、テストが通っていれば毎日公開されます。Developer Preview よりも高頻度かつ細かい粒度になります。
- Swift 3.1 のリリース後は、スナップショットに加えて公式の最終ビルドも公開されます。
スケジュールとブランチ運用
2017 年初頭には焦点を Swift 4 の開発へ移す方針のため、Swift 3.1 はスコープを限定します。master での開発が Swift 3.1 に入るのは 1 月 16 日までで、それ以降は「bake(熟成)」期間として、厳選された重要な修正のみが swift-3.1-branch に入り、master は Swift 4 の開発へ移ります。
- master: swift-llvm・swift-clang を除き、Swift 3.1 の開発は
masterで行われます。1 月 16 日までmasterに入る変更はすべて最終的な Swift 3.1 リリースに含まれ、その時点からmasterは Swift 4 の開発を追います。 - swift-3.1-branch: Swift 3.1 のリリース管理は
swift-3.1-branchで行われます。すべての Swift 3.1 スナップショットはこのブランチからビルドされ、Swift 3.1 もこのブランチから GM(Golden Master)になります。
運用上は、1 月 16 日までおおよそ 2 週間ごとに master が swift-3.1-branch に定期マージされます。2 週間の間隔は、活発に開発される master と、整理されたリリースブランチとの間のバッファになります。マージとマージの間には、プルリクエストによる cherry-pick で swift-3.1-branch に変更を取り込むこともできます。この計画の例外は swift-package-manager で、こちらは master から swift-3.1-branch へ毎日マージされます。
Swift 3.1 のブランチ運用は複数のリポジトリにまたがり、swift・swift-lldb・swift-cmark・swift-llbuild・swift-package-manager・swift-corelibs-libdispatch・swift-corelibs-foundation・swift-corelibs-xctest・swift-llvm・swift-clang が swift-3.1-branch を持ちます。なお swift-llvm・swift-clang は既に master から swift-3.1-branch を分岐済みで、再分岐はしません。
リリースマネージャ
リリース全体は次の担当者が統括し、リリースが収束するにつれて変更管理が厳格化される時点を告知します。
- Ted Kremenek: Swift 3.1 全体のリリースマネージャ
- Frédéric Riss: swift-llvm・swift-clang のリリースマネージャ
- Jason Gosnell: swift-lldb のリリースマネージャ
- Tony Parker: swift-corelibs-foundation のリリースマネージャ
- Daniel Steffen: swift-corelibs-libdispatch のリリースマネージャ
- Brian Croom: swift-corelibs-xctest のリリースマネージャ
- Rick Ballard: swift-package-manager のリリースマネージャ
なお、当時案内されていた Swift メーリングリストは現在は閉鎖・アーカイブされ、Swift Forums に置き換えられています。
参加・確認すべきポイント
Swift 3.1 に変更を取り込む流れ
- Swift 3.0 とのソース互換性が最優先されます。
- Swift 3.1 が収束するにつれて、リリースの中核的な目標に沿う変更だけが検討されるようになります。
- すべての言語・API の変更は Swift Evolution プロセスを経ます。
- Swift 3.1 向けの主要な作業は 1 月 16 日を目安に進めるべきですが、それ以降もリリースマネージャの判断で変更が 3.1 に入ることはあります。リリースが収束するにつれて、3.1 への取り込み基準は徐々に厳しくなります。
プルリクエストに添える情報
リリースブランチへの取り込みを提案するプルリクエストには、次の情報を含めます。
- Explanation(説明): 修正する問題や行う拡張の説明。簡潔でよいが明確であること。
- Scope(影響範囲): 変更の影響・重要度の評価。たとえばソース互換性を壊す言語変更かどうかなど。
- SR Issue: 対応する bugs.swift.org の SR 番号(該当する場合)。
- Risk(リスク): その変更を取り込むことでリリースに生じる具体的なリスク。
- Testing(テスト): 影響を検証するために実施済み、または必要なテスト。
影響を受けるコンポーネントのコードオーナーがレビューを行います。技術レビューはコードオーナーが委任することも、必要に応じて依頼することもできます。master から自動的にマージされる変更を除き、swift-3.1-branch に入るすべての変更は、対応するリリースマネージャが受け入れるプルリクエストを経る必要があります。