Build Insiderオピニオン:小野将之(3)
Swiftの開発体制、swift.org/Swift Evolutionリポジトリとは?
―― Swift 3へのロードマップ(後編) ――
次期Swiftに搭載予定の新機能といった最新情報はどこで入手できるのか。Swiftについての情報を常にキャッチアップするために見ておくべきサイトを紹介する。
前編ではSwift 3.0のリリース予定内容について紹介した。後編ではそれらの情報をどのように得るのかを紹介する。
Swift 3の開発がどのように進められているか
以前はSwiftの開発が内部的にどのように進められているかはアップルのコアメンバー以外にはほぼブラックボックスの状態になっていた。オープンソース化以降は開発に関するあらゆる情報が公開され、体系的にまとめられ、オープンかつ統制の取れた開発が行われるようになっている。「そうはいっても、どこをどう見ればよいの?」という疑問が生じるかもしれない。基本的にはswift.orgとSwift Evolutionリポジトリの2つに目を通せばよい。
そこで、今回はこの2つのサイト/リポジトリにどんな情報がまとめられているか、その開発体制はどんなものか、Swiftに貢献するにはどうしたらよいかを見てみよう。
swift.orgとは
swift.orgは、2015年12月3日のSwiftオープンソース化と同時に公開され、Swiftに関する情報のハブ的役割を担っている。
ここにはあらゆる情報が網羅されているが、特に重要なのは以下のページだ。これらのページにはまず概要が記載され、さらに詳しい内容については別ページへのリンクがあるという構造になっている(かっこ内はswift.org公式ページの左側にあるナビゲーションペーンの項目名)。
- 1Swiftとは(「ABOUT SWIFT」)
- 2Swiftブログ(「BLOG」)
- 3Swiftでの開発を始めるに当たって(「GETTING STARTED」)
- 4ドキュメント(「DOCUMENTATION」)
- 5コミュニティガイドライン(「COMMUNITY」)
- 6Swiftへのコントリビューションガイド(「CONTRIBUTING」)
それぞれの内容について簡単にまとめておこう。
「1Swiftとは」では「Swiftプロジェクトの目標は、システムプログラミングやモバイル/デスクトップアプリ、クラウドサービスなどあらゆる用途に使えるベストな言語を作ることである」と示されるとともに、「安全」「高速」「表現豊か」という3つの特徴と、ソースコードは全てGitHubリポジトリで管理されていることが述べられている。
「2Swiftブログ」ではSwiftの開発状況などが紹介されている。Swiftが発表された2014年6月からあった別ブログはアップデート情報(新機能紹介など)が中心だが、こちらは、よりコアな内容となっている。
「3Swiftでの開発を始めるに当たって」には、特にXcodeを使わずコマンドライン経由でビルド/実行する方法が詳しく記載されている。
「4ドキュメント」には各ドキュメントがまとめられているページへのリンクが掲載されている。ただし、言語仕様を体系的・網羅的に学びたいときには、iBooks Store経由で配布されている電子書籍に目を通すことをお勧めする。この他にもAPIデザインガイドラインへのリンクが掲載されている。
このAPIデザインガイドラインにはSwifty(Appleもセッションや文書で使用おり、Swiftらしいという意味)なコードを書くためのポイントが記載されている。前編で述べた通り、現在Swift 3に向けてSwift自身やコアライブラリがあらためてこれに順守するように刷新中であることからも、これは重要なガイドラインである。
「5コミュニティガイドライン」にはカテゴリごとに分けられたメーリングリストが紹介されている他(Swiftに関するコミュニケーションは主にメーリングリストを通して行うようになっている)、コミュニティの構造が説明されている。コミュニティの構造についての説明を大まかにまとめると次のようになる。
- アップルがプロジェクトリードかつ裁定者であり、プロジェクトの指揮を執る
- Swiftの開発を始めたChris Lattner氏がプロジェクトリードの代表である
- コアチームメンバーが開発指揮、コードオーナーがコード品質の維持など、責任を持つ人に高い権限がある一方、プルリクエスト/レビューなどはSwift開発に関心を持つ全ての開発者から受け入れている
コアチームのメンバーは現在6名全員がアップルの社員であるが「コミュニティの貢献によってApple社外の開発者がメンバーに加わることもあり得る」とのことだ。コードオーナーとその担当領域は各レポジトリ直下のCODE_OWNERS.TXT
に記載されている(例: Swiftレポジトリのコードオーナー)。
Swiftを知るだけでなく開発に貢献したい場合は、「6Swiftへのコントリビューションガイド」に目を通そう。主にコードによる貢献/バグレポート/Swift発展の活動への参加などについて書かれている。
- コードによる貢献: GitHub上でプルリクエストを送る際の、細かい手順/コーディング規約などが記載してあり、対象のプロジェクトがSwiftかどうかに関係なくソフトウェア開発全般に通じる内容も多く参考になる
- バグレポート: バグレポートはJiraによって管理されており、アカウントを登録すれば、バグ報告/報告されたバグの閲覧などができる
- Swift発展の活動への参加: メーリングリストで議論を行い、それが収束するとSwift EvolutionリポジトリのProposal(提案)としてまとめられる(さらにここからレビューがあり、実際にリリースに含めるかなど決定される)
Swiftの開発体制
次に、swift.orgから読み取れるSwiftの開発体制を見ていこう。
Swift開発の場合、GitHub上で管理されているのは、ソースコード/ドキュメント/各種議論のまとめなど、取りまとめられた情報のみである。途中経過の議論などはGitHub上ではなされていない。オープンソースのライブラリ開発は、GitHubのIssue上で機能追加/仕様変更などについての議論が進められていることが多いが、アップルのSwift関連のリポジトリのほとんどでは、Issueが無効化されている。これは恐らく、Swift開発においてやりとりする情報量が多すぎて、シンプルな作りのGitHub Issueでは収集が付かなくなるという判断がなされたからだろう。
代わりに、上でも触れた以下の手段が使われている。
次期Swiftに向けた提案やそれについての議論などはメーリングリストでなされるが、バグ報告や明らかに対応した方がベターな既存挙動についての改善提案などはJiraのバグレポートでなされている。
Swift Evolution用のメーリングリストをチェックすることで、次期Swiftの最新動向が把握できる。また、メーリングリストの購読の際、HirundoというmacOS用アプリを使うと、閲覧/検索などがしやすく、お勧めである。
Swift Evolutionとは
Swiftのロードマップ・現在の開発ステータスなどの管理の場として、Swift Evolutionリポジトリがある。
次期Swiftについての込み入った議論はメーリングリスト上で行われると説明したが、それが収束すると、Proposal(提案)としてこのリポジトリに反映される。Proposalはソース管理されており、プルリクエストなどを通じて追加/更新されている(コアチームメンバーは直接master
へコミット可能)。さらに、ProposalのステータスがSwiftの変更提案のレビューステータス追跡サイト上でまとめられており、どれがSwift 3にすでに実装済みか、どれが今レビュー中かなどが一目で確認できる。
Swift Evolutionに自ら提案していくには?
そして最後に、自ら提案していくにはどのようにすればよいかについて説明しよう。
リポジトリ内に、運用フロー/ルールなどが記載された文書(英語)がある。ざっとルールを抜粋すると以下の通りである。
- これまでの提案で同様のものがないかチェック(現在進行中/リジェクトされたものなども含む)
- メーリングリストで提案の概要を説明・展開
- 議論を経て、提案を洗練させていき、テンプレートを使ってまとめる
- コアチームメンバーにレビュー対象としてもらえるように、Swift EvolutionリポジトリにPull Requestを投げる
- Pull Requestが通ったら、定められた期間にレビューを受け、採用/不採用の判断がなされる(採用の場合、優先度に応じて順次実装されていく)
このように提案が採用されるまでには長い道のりがあるが、今後ともSwiftをオープンソースプロジェクトで一貫性のある優れた言語として円滑に進化させていくに当たって、こういった明確なフローが定められているのは重要である。また、例えばメーリングリストを読んでいて気になった点について返信するといったこともフィードバックという大事な貢献なので、そういう小さいところからSwiftプロジェクトに参加していくのもよいだろう。
過去にリジェクトされた提案は初めにチェックするべきものだが、その代表例がまとめられたページもある。
例えば、Pythonのように{}
をタブで表現する提案や&&
/||
をand
/or
にする提案などがある。不採用になった理由を見ることで、Swift開発コミュニティの考えなども読み取れて面白い。基本的に、「今からSwift言語にその仕様変更を加えた場合、そのメリットがデメリットを十分上回るか」という一貫した基準を満たすかどうかで判断されているようだ。あくまでここに載っているのはサマリーであるが、メーリングリストを検索するなどして、過去の実際の議論を全て見ることもできる。
まとめ
後編では、前編で述べたような情報がswift.org/Swift Evolutionリポジトリなどで事細かにまとめられていることや開発事情などを紹介した。第1回~今回(第3回)まではほとんどSwiftコードも出さずに全体的な動向の説明だったが、次回以降の連載でSwift 3でなされる変更から注目すべき点を取り上げて具体的に紹介していく。
小野 将之(おの まさゆき)
学生時代から情報系の専攻、プログラミングのアルバイトなどでコンピューターに親しむ。
その後、大手SIerを経て、4年ほど前から複数のベンチャー企業でiOSアプリ開発をメインとするようになった。
SwiftはWWDC 2014年にベータ版が発表された直後から、ずっと触り続けている。
2015年からQiitaで多数の記事を書き、好評を集めている(http://qiita.com/mono0926)。
現在は株式会社Vikonaのエンジニアとして、JOIN USのiOS版アプリ開発に加えて、Ruby on RailsによるサーバーAPI開発もこなしている。
※以下では、本稿の前後を合わせて5回分(第1回~第5回)のみ表示しています。
連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。
1. Swift 3のリリース前に、これまでの進化の変遷をなぞる
Apple発のオープンソースなプログラミング言語「Swift」はこれまでにどのような進化の道のりをたどってきたのか。その道程を追い、その将来に思いはせるコラムが新登場!
2. Swiftは3.0で安定するのか? リリース予定日と新機能リスト
2016年後半のリリースが予定されているSwift 3。そのリリースに先駆けて、どんな変更点があるのか、懸案となっている互換性はどうなるのかなどを見ていく。
3. 【現在、表示中】≫ Swiftの開発体制、swift.org/Swift Evolutionリポジトリとは?
次期Swiftに搭載予定の新機能といった最新情報はどこで入手できるのか。Swiftについての情報を常にキャッチアップするために見ておくべきサイトを紹介する。
4. Swift 3.0でなぜ「Cスタイルのforループ」「++/--演算子」などの仕様が廃止されたのか
大規模な破壊的変更が行われる最終的なバージョンといわれているSwift 3.0がついに正式リリース。多数の変更から「廃止」となった言語仕様にフォーカスを当て説明する。
5. Swift 3.1のリリースプロセスおよびそれに含まれる変更内容の紹介(前編)
Swift 3.1のリリースが2017年春に迫ってきた。今回は前後編に分けて、そのリリースプロセスや変更内容を解説する。前編ではリリースプロセス/互換性/開発版のSwiftを利用する方法を取り上げる。