WWDC 2015での約束通り、Appleがプログラミング言語Swiftをオープンソース化した。コードはAppleの新たに作られたGitHubリポジトリに、Apache licenseのもと公開されている。ソースコードはいくつかのリポジトリにわかれている。
- Swiftコンパイラとコアライブラリ。SourceKit(IDEに情報を提供するのに使われる)とともに提供され、その履歴は2010年7月までさかのぼる。
- Evolutionドキュメント。Swiftが将来どう進化するかを示しており、Swift 3.0に向けた今後の計画やステーブルなバイナリAPIも含まれている。
- Swift Foundationライブラリ (
import Foundation
)。Objective-Cアプリケーションが使っているFoundationフレームワークに対応する。 - Swift libdispatchライブラリ (
import Dispatch
)。SwiftのGCD関連機能を提供する。 - XCTestコアライブラリ (import XCTest)。Swiftベースのアプリケーションをテストするためのフックを提供する。
SwiftパッケージマネージャとSwiftビルドツールも別パッケージで提供され、これらを使ってSwiftコンパイラおよびSwift環境を構築することができる。パッケージマネージャには新しいパッケージマネージャのコミュニティ提案(オープンソースプロジェクトとして成功させようと、Appleがいかに熱心に取り組んでいるかがわかる)とともに詳しい情報がある。PackageDescription
モジュールは新しい型 Package
を導入する。これはバージョンや名前はもちろん、依存関係のリストに関するメタデータを表現する。依存関係がリモートGitリポジトリに対するソース依存関係として表現されている点において、実装はNPMに影響を受けているようだ。ビルド実行すると、依存関係のあるものがチェックアウトされ、静的リンクされたライブラリにコンパイルされ、アプリケーションに取り込まれる。パッケージは新しいswift build
コマンドで起動し、Package.swift
ファイルに定義された依存関係のあるものをダウンロードする。依存関係にはセマンティックバージョニング(今後強制されるかもしれない)が使われるが、厳密なパッケージバージョンあるいは単一バージョンを指定できるのかまだはっきりしない。ドキュメントの例は次のようになっている。
import PackageDescription
let package = Package(
name: "DeckOfPlayingCards",
targets: [],
dependencies: [
.Package(url: "https://github.com/apple/example-package-fisheryates.git",
majorVersion: 1),
.Package(url: "https://github.com/apple/example-package-playingcard.git",
majorVersion: 1),
]
)
SwiftはLLVMやClangといったツール上に構築されており、swift-llvm、swift-clang、swift-lldb、swift-cmark(Swiftソースファイルのドキュメント生成に使われる)のフォークがある。AppleにあるSVNの複製とは違ってGitにホストされているおかげで、今後のメンテナンスは非常に簡単になるだろう。
Swiftはコントリビューションを受け入れることで、コミュニティを作ろうとしている。新しいブログでは、Swiftの開発に関する情報を提供している。最終的に、これはAppleのメインウェブサイトにあるブログに取って代わるかもしれない。Community Code of Conduct(contributor-covenant.orgで定義されているものに基づく)とswift-devやswift-corelibs-devなど複数のメーリングリストも用意されている。プロジェクトが公開されてからまだ数時間しか経っていないにもかかわらず、すでに多数のプルリクエストがマージされている。
・Swiftライブラリは実行ファイルにコピーされるため、アプリケーションが帰属の提供なしに使えるよう、Apache Licenseにランタイムライブラリ例外が加えられている。
(参考訳)例外として、あなたが自分のソースコードをコンパイルするために本ソフトウェアを使い、結果として本ソフトウェアの一部がバイナリ製品に組み込まれる場合、ライセンスの条項4(a)、4(b)、4(d)により必要になるはずの帰属を提供することなく、あなたはその製品を再頒布することができます。
この文が標準のSwift Licenseの末尾に追加されている。このことは標準のApache Licenseに基づいているものの、法的再承認には検討が必要かもしれないことを意味している。こうしたランタイム例外という考え方は目新しいものではない。たとえばOracleはJavaをGPLでライセンスしているが、クラスパス例外が付いており、完全なGPLを使わずにコードをリンクすることを許している。
最後に、AppleによるSwiftのオープンソース化についてひとつ疑問がある。Swiftは他のOSで動くのだろうか。答えはイエスだ。Linuxポートがあり、Swift.orgのダウンロードページにはUbuntu用のプリビルドバイナリが置かれている。ただし、OSXポートほど機能はそろっていない。
Linux上のSwiftはObjective-Cランタイムに依存しておらず、それを含んでもいません。SwiftはObjective-Cが存在するときには密に連携するよう設計されましたが、Objective-Cランタムが存在しない環境でも動くように設計されました。
幸いにして、あなたはREPLを使ってSwiftアプリケーションをLinux上で実行、デバッグすることができ、LinuxとSwiftを簡単に始めることができる。ただし、欠けているものもいくつかある。たとえば、Objective-Cブリッジを必要とするもの(内部でNSStringの実装を使っている一部String APIや、@objc
のマーク付きのクラスなど)は、今のところLinuxでは動かない。またAPI可変引数のサポートなど一般的なC APIとの断絶や、GitHubプロジェクトで取り組み中のlibdispatch機能の制限もある。
SwiftがAppleエコシステムの外でも使えるようになった今、あなたはSwiftを学ぶことに興味はあるだろうか。