寄付窓口はこちら

次へつなごう— Extending a hand to the next generation of Apple developers | try! Swift Tokyo 2019 2-16

コーディングを学ぶには絶好のタイミング!技術は日進月歩、進化を遂げています。Apple Platformでの開発はSwiftやSwift playgroundにおける進歩によって、より簡単に取り組めるようになりました。しかし、この業界では、ソフトウェアエンジニアになろうとしている人と、エンジニアリングの役割を果たそうとしているテック企業の採用要求にはまだギャップが存在します。このトークでは、ソフトウェアエンジニアの人口統計からよく見落とされがちなポイントに焦点を当てます。これからソフトウェアエンジニアになろうとしている人々にどのように手を差し伸べられるのかを議論し、私たちソフトウェアエンジニアがApple開発者コミュニティをどのように成長させられるのかについてお話しします。ソフトウェアエンジニアではない人が壁を乗り越えることの難しさや、SwiftとこのApple開発者コミュニティが提供できるものとは何なのかについてもお話します。

f:id:niwatako:20190322173017j:plain

皆さんこんにちは、井上真祐子と申します。

日英両語でお話します。両親に教わって時々関西弁が入りますがよろしくおねがいします。

私は現在ネットフリックスでiOSデベロッパーとして働いています。

でもきょうはNetflixの話ではなくて、テック業界の多様性の問題と将来への展望について話します。

f:id:niwatako:20190322173326j:plain

私は2年前にYoutubeチャンネルをはじめました。シリコンバレーのソフトウェアエンジニアの生活のブログを書こうと思い、ビデオをアップしました。

テック業界の話、ソフトウェア開発などのテクニカルな話だけでなく、生活など、仕事の周辺部分についてビデオで発表してきました。

光栄なことに、約400万回の視聴回数をいただき現在21万人以上のサブスクライバーがいます。ありがたいと主に、世界中にテック業界に興味を持った人がいることがわかりました。

テック業界もダイバーシティーとインクルージョンについてはまだまだ成長が必要だと気付かされた。

どうすればより多くの人々に働きやすく成るか。それが私の大きなテーマになっている。

今日はそのことについてはなさせていただきたいと思います。

f:id:niwatako:20190322173611j:plain

Netflixの前はサンフランシスコのエンターテイメント系のスタートアップで働いていました、2人しかiOSエンジニアがいなかった。採用することになり、私も関わりたいと申し出た。これを機会に、もっと自分のチームを多様にしたかった。

f:id:niwatako:20190322173702j:plain

しかし蓋を開けると志願者に人種的な多様性がないことに気づきました。マイノリティーの方が極端に少なかった。

なぜこうなのか、と採用担当者に聞いてみた。

実はマイノリティーの人は殆どいないのですよといった。

もう少し調べると、白人アジア人は数万人、ラテンアメリカは...

この数を見て驚きました。テック業界にはダイバーシティに関わるプロジェクトがあったが、なぜ実態はこうなのだろう

f:id:niwatako:20190322173820j:plain

ミレニアル世代の私はツイッターでその質問を投げかけました。

f:id:niwatako:20190322173851j:plain

たくさんの方から返信が来ました。最も多かった反応は、iOSデベロッパーに成るためのお金がない。

コンピュータを買う初期費用が高すぎて、払えない人は入り口で諦めることになる。

f:id:niwatako:20190322173944j:plain

次に多かったのは、iOS業界にどうやって入ったら良いかわからなくて不安という声でした。

同僚に聞いてもルートはいろいろ。でもはっきりしたルートはない。かかる費用などがわからない。

f:id:niwatako:20190322174037j:plain

経済的格差があり、それが更に広がっている時代です。しかしこのことは私達が直接コントロール出来ないこと。

今の私達にできることもあるはず

現実を見ることから始めるべきだと思うので、体験をお話する。

f:id:niwatako:20190322174127j:plain

さて、私は女性です、アイデンティティのなかにはアメリカ人と日本人の両面があります。90年台に生まれた移民の子供です。

人との関わりにそういった生い立ちやこれまでの経験が基礎になっています。

f:id:niwatako:20190322174223j:plain

そして私のようなアイデンティティや価値観を持ち、同じような経験をしてきた人は稀で、ユニークであることに気づきました。

日本には出る杭は打たれる、という言葉がある。現在のテック業界ではマイノリティが辺に目立つ、出る釘になるというところがあります。

f:id:niwatako:20190322174318j:plain

辺に目立たないように自分の振る舞いを調節することはある。ダイレクトな表現を使ったり、上司にも反対意見を述べるような、日本のコミュニケーションスタイルを、アメリカ式にプログラムすることも必要。

でも変えられないこともあります。

例えば私が日本人であるということをやめることは出来ません。価値観や言動は日本人的で、渡しはそのことを誇りに思っています。 しかしその事自体が米国において私を出る釘にしてしまうのです。

f:id:niwatako:20190322174446j:plain

しかし、個々で言いたいのは、あるカルチャーが他のカルチャーと比べて、より正しいということはありません。

コミュニケーションの仕方の違いなどでしかない。

でもマイノリティーであるということで独特の苦労を強いられることがある

f:id:niwatako:20190322174526j:plain

ときには、周りの人々と、日本や日本的な考え方について深い話が出来て楽しいときもありますが、私のアイデンティティに対して先入観を持たれることがある。

多くの人が私がソフトウェアエンジニアだと思われていないし、若く見られることが多いため、十分で専門的なスキルが無いと思われることがあります。

これは残念なことです、これはまさに他のテック業界に入る人たちを、不安にさせることでもあります。

f:id:niwatako:20190322174644j:plain

ここは、アメリカ人的に聞こえるかもしれませんが、私も周りの人々も、いかなるバイアスから開放され、様々なバックグラウンドや価値観を持ったありのままのその日と出会ってほしいと思っています。それが実現したらどんなに豊かで魅力的な業界になるでしょう

f:id:niwatako:20190322174731j:plain

皆さんも御存知のように、多様性と一口に言っても、人種、性別、性的指向性、年齢などいろいろなディメンションで語られます。でもひとはひとそれぞれちがい、それぞれの魅力を持った存在です。私は多様性をそういったレベルで捉えたいと思っています。

f:id:niwatako:20190322174820j:plain

みなさんがご存知のように良いソフトウェアを制作するには十分勝つ多面的なリサーチが必要です。

できるだけ多くの多様なバックグランドの人達が協力してこそ本当に良いものが出来るのです。

それを可能にするために、より多様な人々をこの業界に迎え、壁と取り払い、よりインクルーシブにするのは、私達のやるべきことです。

どうすればいいか提案を述べさせていただきます。

f:id:niwatako:20190322174943j:plain

SwiftはApple社がTech業界にもたらした素晴らしいギフトです。プログラムを学ぶのがとても簡単になりました。Swiftではじめてプログラムを書く人も多いと思います。プログラムがより身近になり、使いやすいものになります。

Swift関連のものづくりに置いても、多様性を豊かにしインクルージョンを実現する力があると思います

2つの提案をしたいと思います。

f:id:niwatako:20190322175111j:plain

まず第一にどんな物や事を作りたいかのイメージをはっきりさせましょう

ユニークなバックグラウンドやアイデンティティを持つあなただから、あなたにしかできないことはなにか。

カンファレンスで発信したり、高校生にプログラムを教えたり、ソフトウェアエンジニアの生活についてイラストを書いたり。

あなたの求める生活はどんな生活?あなたの強みは?本当に楽しめることはどんなことでしょう。

そういったことに自分の中で答えを見つけてみてください。

f:id:niwatako:20190322175241j:plain

2番めに、できるだけ自然体のあなたをテック業界の内外の人に知ってもらうようにしてください。

出来たらアイデンティティや経験について話してみてください。

テック業界の外の人たちにも、ソフトウェアエンジニア以外の人達に、指標を与えてあげることが出来るかもしれません。

f:id:niwatako:20190322175356j:plain

2年前に私がビデオをアップしたとき、このスタイルがこんなに支持されるとは夢にも思っていませんでした。

世界中で、それぞれの方々がユニークな自分版のビデオを作って自然体の姿を見せてくださいました。

フランクな紹介の仕方が支持されたことを嬉しく、光栄に思っています。

このような方法が、次の世代の方々の大きな励ましになるのではないかと思っています。

f:id:niwatako:20190322175522j:plain

このカンファレンスでは素晴らしいスピーカーの方たちが、素晴らしいトピックを話してくださいました。

まだまだ協力者が必要で、オーディエンスの皆さんにもどんどん参加していただきたいと思います。

言語、パーソナリティを越えて私達にできることはたくさんあります。

この素晴らしいエネルギーを持って一緒に次の世代につないで生きましょう。

f:id:niwatako:20190322175623j:plain

ご清聴ありがとうございました。

f:id:niwatako:20190322175632j:plain

Core Dataを守るために | try! Swift Tokyo 2019 2-15

この数年、Core Dataはローカルでの永続化において、Realmのような他のサービスを好む開発者の間ではかなりひどい評判です。このトークでは、Core Dataを使うことはそんなに悪いことではないと考える理由を説明します。Core Dataでうまくいかないところや、その落とし穴を回避する例をお見せします。また、Core Dataのアプリへの設定についても簡単に説明します。終わりには、みなさんはCore Dataをアプリに安全に統合するのに役立つ簡単なルールを用意することになるでしょう。

f:id:niwatako:20190322170803j:plain

今日話す理由ですがCoreDataが好きと人に言うと、なぜ、と言われる、ひどいじゃないか、と言われる。 でもそうではないと思っているのでその理由について説明していきたいと思います。

10年前はたしかにひどかったと思います。

新人のデベロッパの人たちは、複雑、Realmが簡単と聞いてRealmに傾倒する人がいるようですが、そうではない場合もあります。

誰にでも使える良いものだと説得するのが目的ではありません。スタックをどう設定するかをお見せし、データモデルの更新まで、この段階まで行けば状況が見えてくる。そして複数の管理オブジェクトを使うところまで見ていく。

そして最後にパフォーマンス改善まで見ていきます。

f:id:niwatako:20190322170953j:plain

使ったことがある人、たくさんコードが出ると思いました?いまは実はこんなに少ないコードでできるんですよ

f:id:niwatako:20190322171015j:plain

最初の設定にはこれしかいりません。

モデルエディタを使います、ここには新しい話はありません。

f:id:niwatako:20190322171054j:plain

f:id:niwatako:20190322171107j:plain

Attributeの名前などを設定する

Relationsihp Inspecta

f:id:niwatako:20190322171132j:plain

一つ面白い、クールなフィーチャーがあるので、砂金モデルエディタに追加されたものです。

モデル定義ではダメでサブクラス定義が必要だったと思います。モデルや設定を2箇所で定義するのは良くないと思うが、

エンティティみていただくとコード生成ドロップダウンがある

f:id:niwatako:20190322171229j:plain

自分でサブクラスを作らなくても対応してくれる。

気をつけていただきたいのはこのファイルをモディファイしないでください、アプリをビルドするたびにモディファイされてしまいます。

これをアプリにしていきましょう

f:id:niwatako:20190322171309j:plain

ほとんどのアプリでは、DBからデータをフェッチすることが必要

fetched results controllerを使う

DataStoreと同期が取れるようにしてくれる

2つほど必要なことがある。fetchリクエスト、何をとってくるべきかプロパティを指定するところ

f:id:niwatako:20190322171420j:plain

コアデータが必要なファイルだけをフェッチするようにする。

これが終わればfetched result controller をつくる

f:id:niwatako:20190322171447j:plain

2つ目のパラメータはマネージドオブジェクト、ViewContextというものがある、あとで説明する。

3つ目パラメータはTableVeiwのときに使いでがある

fetched resultを分割してくれる。

データが変わればデリゲーションに対して通知をする

f:id:niwatako:20190322171554j:plain

f:id:niwatako:20190322171620j:plain

データに変更があればcontrollerがそれを把握し、TableViewを更新する。

魔法のような流れになっています。

Delegateの流れは魔法ではなくて機能するように作らなくてはいけません。

willChangeとdidChange

f:id:niwatako:20190322171711j:plain

すべてのアップデートはデリゲート側に渡される

tableViewのUpdateに適している

f:id:niwatako:20190322171726j:plain

もう一つ、変更があったオブジェクトに対してIndexPathとともに呼び出しがかかる。

ここまで素晴らしいですよね

f:id:niwatako:20190322171843j:plain

Datamodelを少しアップデートしたい時があると思う。どうしたら良いでしょう

マイグレーションが必要でしたよね

f:id:niwatako:20190322171921j:plain

いままで新しいモデルバージョン作ったりしていましたね

最新ではどうするのでしょう

新しいプロパティを足すと自動でマイグレーション

f:id:niwatako:20190322172005j:plain

ただし単純な変更に対してのみ機能します。 追加とか削除とか。

オプショナルにとかはモデルバージョンが必要

テストはしてください。

f:id:niwatako:20190322172040j:plain

ここまでは簡単だったと思います。

では複雑になったら?

マルチコンテキスト設定

ViewContext、いくつかのオブジェクトが入っています。

一つ一つのオブジェクトはDBから取得する

ViewContextの良さは、メインスレッドの作業で対応できる、UIに載せられる。

欠点は、なにかFetchするときは大量の場合、UIがブロックされる。

バックグラウンドコンテキストを使ったほうが良い。

ViewContextにはfetched Objectができる。BackgroundContextには

f:id:niwatako:20190322172212j:plain

f:id:niwatako:20190322172216j:plain

Persistent Contextに入れるとViewContextをアップデートしてくれる

f:id:niwatako:20190322172227j:plain

f:id:niwatako:20190322172301j:plain

最初の手法はバックグラウンドコンテキストがよく使われるなら。シンプルで早いなら後者で

もう一つ見方を変えましょう。

バックグラウンドコンテキストを使った場合

Parsistent Containerにためます。ViewContextに反映される

f:id:niwatako:20190322172351j:plain

これがマルチコンテキストセットアップの作り方です。複雑に見える、難しかったが、簡素化されてきた。 オーバーヘッドが少なくなってきた。

でもよく聞く、批判、パフォーマンス

f:id:niwatako:20190322172424j:plain

CoreDataはデータベースです。

スローダウンしてしまう。

うまくいく方法を示していきたい。

まずは分析を行う。Instrumentをつかっていく、デバッグを行っていく。

InstrumentでFetchリクエストを最適化する。

このカンファレンスを例に見ていく。

Instrumentのアップデートです。Fetchリクエストをコアデータに送るとできるだけ小さな処理として実行しようとする。

キャッシュからFetch、キャッシュミスがあればDatabaseから取ってくる

f:id:niwatako:20190322172606j:plain

リストの一つのアイテム、3つのDBのクエリが切り分けられて走っている。非常に大きなものなら大変。

どう対応するか、CoreDataはRelationshipが交差するのはよく分かっている。

Prefetchするとどうか

f:id:niwatako:20190322172655j:plain

デバッガフラグを有効にする

f:id:niwatako:20190322172713j:plain

CoreDataに関するログがでる

f:id:niwatako:20190322172725j:plain

4つのクエリが実行されている。

これ以上の情報が欲しい場合

f:id:niwatako:20190322172758j:plain

1-4の数値を渡してレベルを変えられる

より多くのアウトプットが得られる

f:id:niwatako:20190322172919j:plain

結論としては、CoreDataをアプリの中でスタートするのは非常にシンプル。モデルのアップデートも簡単。マルチプルマネージドオブジェクト、これも比較的簡単に出来るようになった。パフォーマンスは非常に良くなる。ロギング、測定で改良を続けてください。

Swiftコンパイラにコントリビュートする | try! Swift Tokyo 2019 2-14

Swiftコンパイラにコントリビュートしてみたいと思ったことはありますか?いいアイディアがあるなら、それで十分動機になります。難しい部分もありますが、Swiftコミュニティがお手伝いします!このトークでは、Swiftコンパイラの概要と、コンパイラの始め方、どこから始めたら良いかをお話しします。

f:id:niwatako:20190322165833j:plain

どうコントリビューションするか

バックエンドとフロントをやっています。

f:id:niwatako:20190322165945j:plain

f:id:niwatako:20190322170003j:plain

なかなか難しいですが、思った以上には難しくない

Community Contribution

f:id:niwatako:20190322170030j:plain

コミュニティといえf:id:niwatako:20190322170043j:plainといえばtry! Swift

素晴らしいトーク、ワークショップが待っています。

f:id:niwatako:20190322170113j:plain

渡しの場合はtry! Swiftからコントリビューションが手動されています

Open Source Swiftについて見ていく

f:id:niwatako:20190322170120j:plain

f:id:niwatako:20190322170132j:plain

多くのフェーズが走っているが一つずつ学んでいける

f:id:niwatako:20190322170153j:plain

f:id:niwatako:20190322170158j:plain

f:id:niwatako:20190322170201j:plain

f:id:niwatako:20190322170213j:plain

どうパーサーがきのうしているか

f:id:niwatako:20190322170217j:plain

SIL

f:id:niwatako:20190322170230j:plain

昨年はじめてお話させていただきました。

私の話からは創造いただけるかもしれないが道最適化されるかをはなした

パイプラインの殆どがカバーできる、インプットはこれで十分

f:id:niwatako:20190322170257j:plain

ワークショップ

f:id:niwatako:20190322170315j:plain

ここが、皆さんの質問、実際にコーディングする場として最適だと思う

f:id:niwatako:20190322170356j:plain

メンターの皆さんのおかげで、はじめてのPRを送れた

f:id:niwatako:20190322170407j:plain

これははじめてメンターとして参加しました。

ことしも

f:id:niwatako:20190322170418j:plain

興味があればぜひ来てください。

自身のPRを送ってみてください

一つ重要なのはどのような改善でも、受け入れられるということです。

たとえば、タイプミスがあったとしても第一歩はそれで良い。

f:id:niwatako:20190322170453j:plain

好きなアイディアを、自分のアイディアを、小さなヒントで良い。消して出遅れということはないです。コンパイラとしては初心者だったが、自身で今コンパイラを作れます。多くの皆さんにお手伝いいただいたから。

f:id:niwatako:20190322170556j:plain

ナターシャさん、ミスターパンケーキ、オーガナイザーのみなさん、ありがとうございます。

f:id:niwatako:20190322170602j:plain

参考です

f:id:niwatako:20190322170607j:plain

明日お会いできるのを楽しみにしています。

f:id:niwatako:20190322170612j:plain