この記事の要点
- リリース以前から、Cocoa のインターフェイスと Swift 標準ライブラリの API には流儀の違い(style gap)がありました。見た目や命名がばらばらだと、コーディングからデバッグ、保守まであらゆる作業がしにくくなります。Apple はこのズレを解消し、Cocoa と標準ライブラリを統一された設計方針に収束させる取り組みを進めてきました。
- その方針として、Swift 固有の機能(デフォルト引数など)や、開発者の間に育ってきた「Swift らしさ(Swiftiness)」を踏まえた API 設計ガイドラインを新たに策定し、それを標準ライブラリ・Cocoa 全体・サンプルプロジェクトに適用しながら反復的に磨いてきました。
- この記事の主眼は、その成果を 公開レビューにかけた告知 です。互いに連動する 3 つの Proposal が Swift evolution に提出され、レビュー期間は 2 月 5 日(金)まで 延長されました。読者は議論に参加して、言語とフレームワークの将来を形づくることができます。
背景: Cocoa と標準ライブラリの「流儀の違い」
Swift がリリースされる前から、Cocoa のインターフェイスと標準ライブラリの API の間にはスタイルの差がありました。多くのものが、しばしば必然性もなく、互いに 違って 見えていました。これは単なる見た目の問題ではありません。一貫性や予測可能性が欠けていると、開発・デバッグ・保守のすべてが難しくなります。
それでも Swift 開発者は優れたコードを数多く生み出し、その過程で「Swift らしいコードとはどういうものか」という感覚が育っていきました。その経験を踏まえて改めて API を見直すと、改善の余地があることがわかります。
- コンパイラが Objective-C API を取り込む(import する)際の結果が、Swift にしっくり馴染んでいない
- 標準ライブラリには、Cocoa の利用者が期待するような規則性・一貫性が足りていない
そこで 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 として公開レビューに付されました。
- Objective-C APIのSwiftへの変換を改善する(SE-0005) — Cocoa(Objective-C API)の取り込み方をどう変えるか
- 標準ライブラリにAPIガイドラインを適用する(SE-0006) — 標準ライブラリの表層をどう整えるか
- API設計ガイドライン(SE-0023) — これらを束ねる設計ガイドラインそのもの
オープンソース化以前であれば、こうした作業はすべて非公開で進められ、次のリリースで結果だけが示されていました。しかし Swift がオープンソースになったことで、検討途中の段階から世界に公開し、コミュニティとともに形づくれるようになりました。
関連リンク
- この取り組み全体の背景は Swift 3 のAPI設計ガイドライン でまとめています。
- Objective-C APIのSwiftへの変換を改善する(SE-0005)
- 標準ライブラリにAPIガイドラインを適用する(SE-0006)
- API設計ガイドライン(SE-0023)
- Swift API Design Guidelines — 完成版の設計ガイドライン