Swiftのオープンソース化、Swift 3.0のロードマップ

Swiftのオープンソース化

ついに!Swiftがオープンソースとして公開されました。ライセンスはApache License 2.0です。Swiftコードだけでなく、パッケージマネージャまでも含まれていたのは良い意味で驚きでした。オープンになって誰でも修正してコンパイルを試みることができます(余談ですが、RealmもApache License 2.0です)このようなビッグプロジェクトがオープンソースで公開されることは非常にエキサイティングであることは疑いようがありません。🎉

アップルはまた、swift.orgをオープンし、詳細を公開しました。当初、このサイトはアクセスする人があまりに多かったのでしばらく接続できなくなっていました。Swiftは単にコードのみが公開されたわけではなく、Swiftが一つの生態系として成長していくためのすべての情報とガイドラインまでもがよく整理されてサイトに掲載されています。

参考までに、これまでのSwiftのWebサイトはhttps://developer.apple.com/swift/でした。

Swiftの歴史の振り返り

SwiftはLLVMのメイン開発者であるChris Lattnerが開発しました(もちろん、現在は、Appleの従業員です)。公開されたSwiftのGitHubリポジトリのコミットを辿れば、Chris Lattnerがその最初のコミットをしたことを見ることができます。日づけは2010年7月18日であり、内容はMakefileですね。AppleはSwiftのリポジトリをすべてのコミットの歴史をそのまま残した形でGitHubに公開しました。そのため、私たちはコミットを辿ってその進化の過程をすべて見ることができます。今の時点でコミットの総数は28,673コミットです。コントリビュータの第1位はもちろん、Chris Lattnerです。

記事の更新情報を受け取る

また、もう一つ興味深い事実がGitHubから浮かび上がってきます。Contributors ページのコミット状況のグラフを見てください。プロジェクトの開始は2010年でしたが、2013年半ばから開発が活発になっていったことを見ることができますね。全コントリビュータは54人ですが、コア開発者は8人程度です。Chrisは自分のホームページで、「自分が言語の基本的な構造を組んで、2011年後半に数人が参加するようになり、2013年7月にあったApple Developer Tools groupで大きな関心を引き出すことができた」としています。

パッケージマネージャとLinux版について

まず、最も印象的だったのは、パッケージマネージャです。一つの言語が生態系として動作するために必要不可欠な部分です。GitHubに公開されたswift-package-manageの主な開発者は、みなさんよくご存知のHomebrewの開発者のMax Howellです。

Linux版について、Swift blogの記事「The Swift Linux Port」によると、移植はまだ完璧ではないですが、Ubuntuで利用できるバイナリを提供しているとのことです(現在はx86_64のみ使用可能)。Linux版は、Objective-Cにはまったく依存しておらず、コンパイラと標準ライブラリを提供し、Glibc Moduleを介して、ほとんどのLinux C標準ライブラリ関数を提供しています。また、Appleが使っていたようにSwift Coreライブラリを書くことができるように移植されており、LLDB デバッガでデバッグをしたり、インタラクティブShellのREPLも使用することができます。Linuxのサポートには、まだ足りない部分もあるのでブログの本文をご覧ください。

Swift 3.0!?

Swiftが今後どのように変化するかについての手がかりは、同じくGitHub上のSwift Evolutionリポジトリから知ることができます。来年の春に出てくるSwift 2.2は不具合の修正、エラーメッセージと診断ツールの改善、コンパイル時間の短縮、パフォーマンスの向上など、実装の品質の向上に集中するとあります。いくつかSwift 2.0で導入された機能が変更されるかもしれませんが、互換性が壊れることは最小限に抑えられそうです。

今までSwiftは多くの下位互換性を放棄しながら迅速に進化してきましたが、今回も下位互換性を諦めて、多くの部分を大きく変更していく様子です。例えば、++演算子と--演算子を削除しようという提案が現在受け入れられています。開発者としては、あらかじめその演算子を使わないようにしておけば後で楽ができるかもしれません。

SwiftのオープンソースはAppleのクリスマスプレゼント🎁?

今回のSwiftのオープンソース化は開発者のためのアップルのクリスマスプレゼントでしょうか?開発者たちはすでにこのプロジェクトを親しみを覚え始めています。SwiftのライセンスをGPLv3に変更しようとするジョークPull Requestが挙がってきて、多くのコメントが寄せられ、このPRが冗談ではないという意見もありますね(ご存知ない方のために、AppleとGPLv3は相性が悪いです)。

Swiftオープンソースに貢献するための方法は、Contributingドキュメントにわかりやすく記述されています。もちろん、Pull Requestを受け付けており、メーリングリスト、バグレポート、CI、コミットメッセージガイドライン、コードレビュー、テストなどの方法が丁寧に案内されています。Swiftの発展の方向性に関与できる方法も案内されています。Proposalを提出して、それをレビューする形式です。

アップルは今回、Swiftをオープンソース化し、Linuxのサポートも強化し、さらにパッケージマネージャまでも一緒に公開しただけでなく、開発者に親しまれているGitHubを使い、Webサイトと素晴らしい文書も公開し、そしてApache 2.0という使いやすいオープンソースのライセンスで公開しました。何一つ指摘する必要のない、完全なオープンソースとしての公開にみんな興奮しています。アップル、クール!

Swiftのオープンソース化とRealm

RealmではSwiftが公開された当初から、SLUG(サンフランシスコのSwiftユーザーグループ)でディスカッションをしたり、Realm Swiftjazzy、そしてSwiftLintにおける改善について調査を開始しています。今やSwiftはオープンソースになりました。我々はSwiftとエコシステムを改善するためにこれからも力を注いでいきます。こちらが、まず最初に関連しそうだと考えているものです:

  1. Swiftの動的ディスパッチをObjective-Cランタイムから切り離す このことによってRealm Swiftにおいて今よりもっと単純にモデルクラスを記述できるようになります。RealmOptionalというカスタムタイプが不要になり、オプショナルなプロパティは通常のプロパティと同様に単にdynamic varとして定義できるようになります。
  2. 実行時のリフレクションの安定性の改善 現在のSwiftのMirror(reflecting:)の実装には、クラッシュを引き起こす不具合が存在します。また、インスタンス化せずにリフレクションを適用できるように機能を拡張することができれば、もっと柔軟なモデルクラスの記述がRealm Swiftで可能になります。 例えば、モデルに別のイニシャライザを実装したり、デフォルト値を書かずにNon NULLのプロパティを定義できるようになる、などです。
  3. jazzyとSwiftLintを公式の開発ツールに統合する 現在のSourceKitをリバースエンジニアリングする方法に比べて、より簡単に安定して使える環境が提供できます。また、現在はSourceKitがAPIを公開していないためにできないことも、もっと簡単に実現できるようになります。

上記のリストは、我々の構想における氷山のほんの一角に過ぎません!これから開発コミュニティの一員として、Swiftの改善に関わっていくこと、そして皆さんが、それに加わるということがが楽しみで仕方ありません。


Swiftがオープンソース化されてから初の大規模カンファンレンスtry! Swiftが日本で開催されます。お申し込みはお早めに! http://www.tryswiftconf.com/#tickets


Minwoo Park