Swift Digest
Blog | Swift.org Blog

近日公開: Swift API の大変革

It’s Coming: the Great Swift API Transformation

このダイジェストはClaude Opus 4.7 / 4.8によって生成されたものです(License)。原文はこちら

この記事の要点

背景: Cocoa と標準ライブラリの「流儀の違い」

Swift がリリースされる前から、Cocoa のインターフェイスと標準ライブラリの API の間にはスタイルの差がありました。多くのものが、しばしば必然性もなく、互いに 違って 見えていました。これは単なる見た目の問題ではありません。一貫性や予測可能性が欠けていると、開発・デバッグ・保守のすべてが難しくなります。

それでも Swift 開発者は優れたコードを数多く生み出し、その過程で「Swift らしいコードとはどういうものか」という感覚が育っていきました。その経験を踏まえて改めて API を見直すと、改善の余地があることがわかります。

そこで Apple は、両者を統一された設計方針へ収束させるべく、まず従来の前提をすべて問い直すところから始めました。既存のガイドラインは優れていたものの、その多くは Objective-C 向けで、デフォルト引数のような Swift 固有の機能を扱っておらず、何より育ちつつあった「Swiftiness」を反映していなかったためです。

変換のイメージ

新しいガイドラインを実際に標準ライブラリ・Cocoa・サンプルプロジェクトに適用し、結果を評価しては改良するという反復を重ねてきました。たとえば、変換前のコードは次のように見えます。

class UIBezierPath : NSObject, NSCopying, NSCoding { ... }
...
path.addLineToPoint(CGPoint(x: 100, y: 0))
path.fillWithBlendMode(kCGBlendModeMultiply, alpha: 0.7)

変換後はこうなります。

class UIBezierPath : Object, Copying, Coding { ... }
...
path.addLineTo(CGPoint(x: 100, y: 0))
path.fillWith(kCGBlendModeMultiply, alpha: 0.7)

冗長な接頭辞や、第 1 引数に押し込まれていた情報が整理され、より簡潔で Swift らしい呼び出しになります。さらにレビュー参加者からの提案も取り込まれており、たとえば次の呼び出しを、

path.addArcWithCenter(
  origin, radius: 20.0,
  startAngle: 0.0, endAngle: CGFloat(M_PI) * 2.0, clockwise: true)

第 1 引数に明示的な center: ラベルを与える形へ変える案が検討されました。

path.addArc(
  center: origin, radius: 20.0,
  startAngle: 0.0, endAngle: CGFloat(M_PI) * 2.0, clockwise: true)

このような個々の判断はレビューを通じて決まっていきます。

公開レビューにかけられた3つのProposal

この変革は、互いに連動する 3 つの Proposal として公開レビューに付されました。

オープンソース化以前であれば、こうした作業はすべて非公開で進められ、次のリリースで結果だけが示されていました。しかし Swift がオープンソースになったことで、検討途中の段階から世界に公開し、コミュニティとともに形づくれるようになりました。

関連リンク