読者です 読者をやめる 読者になる 読者になる

try! Swift オープンソースSwiftへの貢献 #tryswiftconf Day3-10

try! Swift 2016

Jesse Squires

InstagramiOSアプリを開発しているソフトウェアエンジニアです。jessesquires.comにてSwiftObjective-Cに関するブログを書いています。Github上で多くのオープンソースプロジェクトにコントリビュートしています。走ることと新しいことを学ぶのが好きで、主にブラックコーヒーとブラックメタルによって元気になります。

twitter.com

Swiftに貢献したいですか?どのように、また、どこから取り掛かればいいか分かりませんか?パッと見て圧倒されるかもしれません。この講演では、さまざまなSwiftのプロジェクトがどのように関係しているかを見て、貢献し始めるために必要なスキルを議論し、あなたが行うであろう最初の変更が承認されるためのベストな方法を学びます。

セッションビデオ公開済み

DIAMONDスポンサーのRealm様より、セッションを録画したビデオが公開されています。

realm.io


f:id:niwatako:20160304165921j:plain

f:id:niwatako:20160304165940j:plain

LLVMについて。どんなスキルが必要か。Swiftがこの話しのあとはとっつきやすくなると嬉しい

Appleにはおどろかされましたね、沢山あります。

f:id:niwatako:20160304170018j:plain

誰でも参加できそうなものがある、コンパイラエキスパートである必要はありません。

どれがいいか分からない?

f:id:niwatako:20160304170059j:plain

概観すればどこにコントリビュート出来るかわかってくると思います。

f:id:niwatako:20160304170106j:plain

コンパイルすると何が起きるのか

f:id:niwatako:20160304170125j:plain

SwfitはLLVM上で構築されています。クリスラトナーという人が作りましたね

f:id:niwatako:20160304170153j:plain

コンパイラが実行可能バイナリにするわけです。

フロントから見ましょう、フロントでパースして、中間表現IR(アーキテクチャ非依存のアセンブリのようなもの)になって、Optimizerに渡されてコードを改善し、バックエンドに送られ、マシンコードが作られます

f:id:niwatako:20160304170316j:plain

LLVMはモジュラー化されています。言語、パースを切り離している。実際にバイナリを作るところと切り離しています。LLVM IRの真ん中の部分ですね。

CやObcはClangがあります。

f:id:niwatako:20160304170348j:plain

CあるいはObjective-Cから初めて、パーシして、ASTに変える、抽象文法木ですね。ASTは意味解析され最適化され、修正されたASTがコード生成のステージに入り、IRが作られます。そしてLVMに渡され先ほどのパイプラインに入ります。

そしてその他にブランチが作られて、追加解析機能が使われます

f:id:niwatako:20160304170518j:plain

Clangアーキテクチャはパースと意味解析が組み合わさっていて重複が起きる。

SwiftPipelineはClangからの学びを取り入れました。

パース、意味解析でASTに、パースされたASTを型チェクした完全なASTに、意味上の問題があればこの段階でWarningが出ることになる、そしてLLVM IRに似たSILが出来る、raw SILを作ります、これが解析と最適化の段階にまた入ります、沢山の最適化をここで行います、ARC、Swift固有の最適化を行います。それからカノニカルSILが生成され、IR生成フェーズに渡されます。そして先程のように完了します。

f:id:niwatako:20160304170854j:plain

ここにはどのようにCやObjCと互換性を保つかという問題が有り、ASTの段階でClangImporterにモジュールマップを渡します。

これらは専門的な領域ですね?エキスパートにとってもそう。パイプライン毎に専門領域が有ります。

もっと具体的なレベルに落とし込みましょうシンプルなHello worldです。 f:id:niwatako:20160304170950j:plainf:id:niwatako:20160304170957j:plainf:id:niwatako:20160304171001j:plainf:id:niwatako:20160304171006j:plainf:id:niwatako:20160304171009j:plain

ネームマンドリング?

f:id:niwatako:20160304171032j:plain f:id:niwatako:20160304171047j:plain

LLVMIR

f:id:niwatako:20160304171100j:plain

Assembly

f:id:niwatako:20160304171106j:plain

あまりこれで圧倒されないで下さい

f:id:niwatako:20160304171126j:plain

ハイレベルで理解しておくことは有益だと思います。

f:id:niwatako:20160304171144j:plain

ではパイプラインはそれぞれどのプロジェクトに該当するでしょうか? そして難しい点は?参入障壁は?

f:id:niwatako:20160304171211j:plain

パイプラインの各フェーズで個々の分野があります。何処を見たらいいかのマッピングになっていると思って下さい。

f:id:niwatako:20160304171316j:plain

Swiftコアについて、こちらに関してまずはコンパイラだが、難易度で言うとハードです。C++が入るしコンパイラC++です。Githubでもアクティイティが多いです。

C++経験はよく見るものではないと思います。使ったことのない人には難しいと思います。Swiftの方がよりニュアンスっぽいです。また非定義の振る舞いを扱おうとしています。

スタンダードライブラリは普通のSwiftとは少し違います、ビルドライブラリへのアクセスが有ります。

SourceKitはXcodeシンタックスハイライトニングに使われていたりします、クラッシュなんてしません(笑い)

Swiftのインフラ

f:id:niwatako:20160304171525j:plain

Swift特有の変更が入っています。コントリビューションが難しいところになります。非常に深い知識が必要で、リポジトリはほとんど活動がありませんん。Swift3までは安定していると思います。

またライセンスルールやコーディング規約などによって統治されており、Swiftプロジェクトてきな統治ではないです。

パッケージマネージャ

f:id:niwatako:20160304171657j:plain

SPM:Swiftで参入しやすいです、しかしCライブラリのラップが沢山あり、馴染みがない人もいるかもしれません

Core Libs

f:id:niwatako:20160304171733j:plain

Objective-Cから馴染んでいる人も多いでしょう

時々Cなどで書かれていることも有ります。Objective-CかコアファンデーションをラップするということがSwiftでも行われます。

Evolution

f:id:niwatako:20160304171816j:plain

基本的Swiftの変化が行われていきます。誰でもプロポーサルは書けます。リリーススケジュールで予定がわかったり何をするつもりがないのか分かる。プロポーサルは考えぬいて、メーリングリストで議論したりしてください。

機能がほしい理由をコミュニティに提示するように議論してください。

貢献の仕方

f:id:niwatako:20160304171934j:plain

議論はメーリングリストで。事象はJIRAで、Github上ではない。 f:id:niwatako:20160304172040j:plain ガイドラインにそってやりましょう。

f:id:niwatako:20160304172032j:plain f:id:niwatako:20160304172040j:plain

ドキュメントの翻訳、メーリングリストに名を連ね、どのレベルでも意見をいうこと(それは20年の経験も20日も関係ない)が大事です。

クリスラトナーはこう言っています。「ビギナーにとっても使いやすい言語にしたい」

TypoFixもよく言われますが、Typoなのか分からなければ読みにくくなる。Typoだと分かったらすぐPullRequestを出してください。

メーリングリストですが、反対の意見もあるかもしれません。テキストなので誤解を招かないように優しく接してください。

困ったら助けを求めることが出来ます。

PRを出すときはベストプラクティスであることを確認してください。そのほうがレビューもしやすくなります。

ベストプラクティスで規約にそって。それがやりやすくするやり方です。

リジェクトされてもがっかりしないでください。タイミングが悪かったとかもあり得ます。

みなさんの人格を否定しているわけではないのです、今じゃない、あるいはSwiftに取って層ではなかったというだけです。コミュニティのトップのコントリビューターでもリジェクトはありうることです。

CODE_OWNERファイルでどのチームの範囲なのかが分かります。PullRequestをレビューすべき人が分かる。

すべての面におけるエキスパートは居ない、つまり質問してもいいんです。Coreチーム、あるいはコントリビュータは皆さんに参加して欲しいと願っています。PullRequestもAcceptedしやすいように前向きに考えます。

f:id:niwatako:20160304172611j:plain

f:id:niwatako:20160304172616j:plain

この人達はAppleの人ではないが素晴らしい活躍をしている。自分の専門分野を見つけている。

どの分野で情熱を注げるか、見つけてください。この人達は、必ずしも初日から素晴らしいコントリビュータだったわけではありません。

全ては小さな改善から始まります。

f:id:niwatako:20160304172719j:plain

これはコアチームにとって重要な事です。コミュニティの参加にSwiftの成功がかかっています。

じゃあ何故コントリビュートするべきなのでしょうか。

f:id:niwatako:20160304172755j:plain

Appleは膨大な投資をSwiftにしました。直ぐになくなることはありません。Swiftは私たちの望む方向に進むと思います。我々がほしい言語にSwiftを向かわせるということです。ディスカッションに参加するだけで影響力を行使することが出来ます。

より多くのプラットフォームをSwiftがサポートできるようにすること、我々のスキルを活用できるようにすることが、皆にとっての成功となるわけです。

きのうダニエルがCoreDataの話をしました。長い間バグフィックスを経て安定してきました。Swiftは誕生したばかりです。今後10年何処を目指すべきか自問自答していくべきだと思います。Swiftについて我々は方向性を決めるということが出来ます。どうやってSwiftを描くのか、ベストプラクティスを考えるだけでも暗黙的に貢献に繋がります。

f:id:niwatako:20160304173019j:plain

単なる言語ではありません、コミュニティです

f:id:niwatako:20160304173032j:plain

素晴らしいことをしようとする人たちの集まりです。

f:id:niwatako:20160304173053j:plain

ベストを尽くしましょう、ありがとうございます!

f:id:niwatako:20160304173108j:plain

気に入った記事は はてなブックマーク

はてなブックマークアプリiOS開発チームから来ました! はてなブックマークにはSwift特集があります! 良い記事を見逃さないように、ご利用ください! http://b.hatena.ne.jp/hotentry/it/Swift

そして良いまとめ記事があったらはてなブックマークでブックマークしましょう! try! Swift の記事で盛り上がると嬉しいです!