WWDC19参加してきました！

# すでに帰国しましたが・・・

　WWDC19から帰って２週間ちょっとになります。
　日本は毎日雨つづきでげんなりでしたが、サンノゼでは風が涼しく、カラッとしていて屋外でも快適に過ごすことができました。

![IMG_0119.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37634/8c5ef10d-0f06-cadd-d76b-0881fecae783.jpeg)

ただ、WWDC19終了の２日くらい前になってやっと時差ボケが治る始末で、来年も参加できるとすれば、これはなんとかしなければいけませんね。私が勤務する"株式会社ゆめみ"ではリモートワークは推奨されてはいませんが、不可というわけではありません。実際に結構多くのメンバーが利用しています。ホテル代は自腹になりますが数日前から前乗りしてリモートワークをしながら過ごすといった手も有効かもしれません。（サンノゼのホテルはバカ高いのでサンフランシスコが狙い目かもしれません）

# WWDC19とは
　Appleが主催する開発者向けイベントのことで、Worldwide Developers Conferenceの略です。最近はApple本社のあるカリフォルニア州サンノゼのコンベンションセンターで行われていて、今年は5000人程度の開発者、デザイナー、学生が世界から集まりました。

![title_wwdc19.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37634/dfdd5463-4099-9836-4119-416c826672b5.jpeg)

　今回のWWDC19では、会社の同僚が６名、現地で合流した方が２名の最大８名で、ランチやディナーでの情報交換、Bash参加などを行いました。これは本当に楽しい時間でした。特に社外の方との密な交流は、このような海外イベントならではだな、と思います。

　さてこのような大所帯で臨んだWWDCですが、まずはセッション開始の前日となる、日曜日の早朝からコンベンションセンター前にみんなで並び、レジストレーションとバッジ、ジャケットを受け取りました。

　今年のジャケットは柔らかめのリバーシブルで、裏地が赤、青、オレンジ、黒の4種類。自宅に持ち帰ったところ、速攻で長男に奪われてしまいましが、いいお土産になってよかったです。

# 今年のWWDCセッションはインパクト大きかった

今年のセッションでは多くの驚くべき発表があり、去年が地味でフラストレーションが溜まっていたのか、皆大いにお盛り上がりました。いろいろなところで書かれていると思いますのでここでは詳細は省きますが、大きなものとしては以下の通り。

・SwiftUIの発表（完全に新しいUI開発手法） + Xcode11
・新型Mac Pro（驚きの28コアプロセッサとその価格！）
・iPadOSの発表とiPadアプリのMacOSでの動作
・WatchOS6（iPhoneからの独立）
など。

![wwdc19big.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37634/411b3c9f-dc23-dfe8-8d61-1d4e0d714e3f.png)


画像はhttps://developer.apple.comより

　SwiftUIが、iOSのUI構築において大きなパラダイムシフトであることは間違いないでしょう。mac, iPad, watchのUI開発が効率的になり、同時にアニメーションなどを容易に導入でき、かつ記述するコード量も減少してトータルでクオリティが高くなると思われます。
もちろんiOSエンジニアにとってはSwiftUIは大きな衝撃だったのですが、このnoteでは個人的に受けた別のインパクトについて書いてみたいと思います。

# iPad to Mac

　個人的に受けたインパクトというのは、iPadアプリと同一ソースコードからなるアプリ（以後、macアプリと呼ぶ）がMac上で動作する、という発表です。
何らかの形でiOSアプリがmac上で動作するようになるだろうと言われていましたが、このタイミングで発表されたのは自分にとっては不意打ちでした。こればかりはもう少し先になるだろうと勝手に思い込んでいました。

　発表されたとしても開発者が特に手を入れなくても自動的に実行できるようになる、ある意味エミュレータっぽいものを想像していました。しかし、今回発表されたものはmacアプリがmacOS Catalina上で完全にネイティブで動き、従来のmac（AppKit）アプリケーションと比較しても機能的に遜色ないものが実現できるようです。

　今WWDC19を振り返ると、SwiftUIや、iPadOSの発表、iPadOSの新しい機能である、Slide Over and Split View、Drag and Drop、File browser、Context Menusなどが、単なる新機能を追加したというだけではなく、iPadアプリと同一ソースコードからなるmacアプリがmacOSで動作するための布石なっていることに気づかされます。このことは、「Sign In with Apple」が「watchOS 6」の「Independent Apps」の布石になっているように、WWDC19の多くの発表の裏には巧妙に勧められたAppleの戦略を感じずには入られません。

　iPadアプリがmacアプリとなるためには下記にように２つのポイントがあります。

１）Look＆Feelを実現する（What）
２）どのようにコーディングするのか（How)

# Look＆Feelを実現する

　まずLook＆Feelですが、iPadとmacでは下記のように多くの点が異なっており、これらを融合させる必要があります。

・メニューバー
・コンテキストメニュー
・レイアウト
・マルチウィンドウ、リサイズ
・ドラッグ＆ドロップ
・コピー＆ペースト
・ジェスチャーとマウス操作
・フォントサイズ
・アイコン

　現在Appleは、macをIntel系CPU、iPhone/iPadをARM系CPUに依存しています。
　かつてNextStepと呼ばれていた時代があったmacOSにとって、異なるCPUアーキテクチャーで動作し、その上で（単一バイナリーの）アプリケーションを動作させることは比較的容易です。
しかしAppleは、この課題に対してWindowsタブレットのようなアプローチは採りませんでした。iPadのLook＆Feelは既に全世界で数億人以上に受け入れられていて、このような安易なやり方は不可能だったからでしょう。

　AppleはmacOSとiPadの融合を実現するために、下図のようなアーキテクチャーを採用しました。

![スクリーンショット 2019-06-27 23.36.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37634/f465e62a-eb88-7eb3-ac74-267216cffa2a.png)

　Darwinを呼ばれるカーネル部分、各種のServiceやデータベース、そしてFrameworkを共通化しその上で、それぞれ異なるLook＆Feelを提供するAppKitとUIKitを動作させます。

　詳細は分かりませんが、このような統合を果たすために、AppleはiPadをiPhoneのシステムと分離し新しくiPadOSを発表したのだと思われます。

どのようにコーディングするのか
　次にプログラミングです。簡単に言えばこれは、Xcode11とSwiftUIが担っていると言って良いでしょう。SwiftUIは、全てのデバイスに対して提供される、Appleの単一ソースコード戦略を担った秘密兵器です。その当面の大きなミッションが、iPadとmacの統合になるのは間違いありません。

　ただし、iPadアプリ、macアプリはSwiftUIを使わなくてもコーディングできます。セッションからはなかなか伝わってこなかったのですが、macアプリからは、制限があるもののUIKit、AppKitの両方を呼び出すことができます。

![スクリーンショット 2019-06-27 23.36.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37634/ebbdc5ef-e9cc-7f84-63bf-9c61d373bf83.png)

# iPadアプリの今後
　今回のWWDC19の発表で、今後iOSエンジニアは比較的容易にmacOSアプリを開発できるようになったと言えるでしょう。
　これが意味するところは、WindowsアプリやWeb技術によって賄われてきた（コンシューマ市場ではなく）業務用のアプリケーションに、iOSエンジニアとCatalinaアプリケーションが参入する道が大きく開かれたということではないでしょうか。


　Catalina上で動作するmacアプリは、その気になれば多くのiOSエンジニアが作り出すことができます。私には、いきなり膨大な開発者を要する業務用アプリケーションのマーケットがうぶ声をあげたように思われます。
今後iOSエンジニアはSwiftUIとともに、macアプリの技術動向に注目ですね。