Gunosy Tech Blog

Gunosy Tech Blogは株式会社Gunosyのエンジニアが知見を共有する技術ブログです。

WWDC19に参加してきました

こんにちは。iOSアプリを開発している吉岡 (@rikusouda)です。
2019/6/3〜2019/6/7の日程でアメリカのサンノゼで開催されたWWDC19に参加してきました。

Gunosyでは海外カンファレンスに会社負担で参加することができる制度があり、この制度のおかげで初めてWWDCに参加することができました。

f:id:rikusouda:20190612200959j:plain:h400

WWDCって

f:id:rikusouda:20190604175600j:plain

WWDC19 - Apple Developer

Appleが主に開発者向けに毎年開催している、Apple関連の新しいプロダクトや開発者向けフレームワークの発表が行われるカンファレンスです。世界中から数千人の参加者が来ている言われており、抽選に当選した人が参加することができます。Swiftの発表のようなインパクトの大きな発表もこのWWDCで行われており、Appleプラットフォーム向けにアプリを開発している人は、このカンファレンスに注目している人も多いのではないでしょうか。

キーノートの雰囲気

WWDCのキーノートは朝10時スタートだったのですが、とても人気なため早朝から多くの人が並んでいたようです。僕は時差ボケなどもあり早く起きることができず7:30頃の到着となってしまいましたが、すでにかなりの人が並んでいました。

f:id:rikusouda:20190603092427j:plain

この時間だとかなり後ろの方で見ることにはなってしまったのですが、席もまだ結構残っている状態で、無事に生でキーノートを見ることができました。

f:id:rikusouda:20190603111956j:plain

iOS 13やCatalystというiPad向けに開発したアプリをmacOS上でも動かすことができる技術など、次々と魅力的な内容が発表されていき興奮冷めやらぬ様子でした。最後にはSwiftUIという、iOSアプリ開発のしかたを変える期待がもてるサプライズ的な発表もあり、会場内は興奮ムードでした。

SwiftUIはiOS 13以上でなければ使えないため、実際のプロダクト開発に使うのはまだ先になってしまうかもしれません。それまでに、SwiftUIを効果的に使っていく方法についてキャッチアップしていくのが良いかもしれません。

ラボについて

WWDC開催中の多くの時間はセッションとラボが開催されています。ラボではAppleの人と特定のテーマについて質問したり意見をもらったりすることができます。これはWWDCに参加した人だけが体験できます。セッション内容は後で動画で見ることもできるので、WWDCに参加した場合はラボに参加するのが面白いです。ラボでは運が良ければ日本語ができるエンジニアが担当してくれたり、日本語ができる通訳がついてくれるようです。一つのラボでたまたま日本人の通訳がついてくれたのですが、僕が開発しているLUCRAアプリのユーザーだったことにめぐり合わせを感じました。

いくつかのラボに参加しましたので様子を共有します。

User Interface Design Lab

アプリを見せて、それについてアドバイスや意見をもらうことのできるラボです。このラボは特別に人気らしく、毎朝の抽選にあたった人だけが参加することができます。たまたま水曜日に当てることができたので、僕が開発しているLUCRAアプリの画面を見せながら具体的なアドバイスをいただきました。

LUCRAでは、初めてアプリを起動したときに興味のあるジャンルを問いかける画面が表示されます。

f:id:rikusouda:20190612194330p:plain:w350

例えばこの画面ついて「最初からチェックマークがついているのですべて選択されているように勘違いするかもしれない。チェックマークのないアイコンに変更するか、未選択のときにはマーク自体出さないなどすると良さそう」というような具体的なアドバイスがいただけました。チームのデザイナーに伝えてみると「確かに改善の余地はありそう」とのことで改善の参考にできそうです。

Swift Open Hours

Swiftについてエンジニアに質問したりできるラボでした。僕は自分が書いたSwiftがどのように動作しているのか気になっていたのですが、コンパイラを調査するところまでなかなか手が伸びず、疑問のままとなっていました。このラボでそれらの疑問をすべて質問してきました。

例えば下記のようなことを質問してみましたが、丁寧に解説していただくことができ、Swiftに対する理解を深めることができました。この内容については自分の中で一度整理ができたらどこか別の機会で発信したいと考えています。

  • Swiftのインスタンスがスタックに置かれるかヒープに取られるかは何によって決まる?
    • funcのinout引数に渡したときは?
    • Protocolのときは?
    • クロージャー内で宣言した変数は?
    • Arrayに格納された場合は?

このようなことに興味があるのならばSILという中間言語を読むといろいろわかって面白いよ、というアドバイスもいただけました。自分でもいろいろ調査していこうと思います。

こういった内容に興味がある人には下記の記事もおすすめです。いずれもSwiftの内部動作を調査してまとめられた記事となっています。

qiita.com

qiita.com

LLVM Compiler, Objective-C, C++, and Linking Lab

その名の通りC++、Objective-Cなどの言語やアセンブラ周りのことについて質問ができるラボでした。僕はSwift Open Hoursで解決しなかったことが一つあり、それは「Swiftの変数はどのようなときにCPUのレジスタが割り当たるのか」という内容でした。この動作についてはSwiftコンパイラではなくLLVMの範疇とのことでこのラボも訪れました。

このラボで担当してくれたエンジニアはSwiftについてはあまり詳しくないとのことでしたのでC++やC言語をもとに質問することになりました。基本的には「(CPUによるけど)intのようなレジスタに収まる整数とかポインタ型のような整数は一般的にはレジスタが割りあたる」というような話をいただくことができました。C言語を書いてコンパイル、LLVMやARM64のアセンブラを読むことを一緒にやっていただき方法もレクチャーしてくれました。

この動作について確認することに興味があればLLVMやアセンブラを出力して読んでみるといろいろわかって面白いよ、というアドバイスもいただけました。

SwiftやC言語の変数にCPUのレジスタがどのように割りあたるのかについては、どこかでまとめて別の機会で記事にするか発表しようと考えています。軽く調べてみた様子だと「SwiftのIntのような変数は基本的に、最適化ありならばスタックに格納せずにレジスタで完結させようとする。最適化なしならば律儀にスタックのメモリ領域に値を格納する」という動きに見えました。さらに深掘りしていくのが面白そうな分野です。

ちなみにこのラボに参加するとステッカーをいただけました

f:id:rikusouda:20190612200738j:plain:h400

もくもく会会場

WWDC会場内にはいくつかの場所に下記のような作業スペースが設けられていました。ここでは有線のLANが用意されていて、新しいXcodeやiOS、macOSのダウンロードなどができるようになっていました。セッションで発表された内容を復習したり、ラボの準備や振り返りをしている人も多かったのではないでしょうか。

f:id:rikusouda:20190606100746j:plain

まとめ

WWDCへの参加は初めてでしたが、とても良いインプットと刺激の連続でした。キーノートやセッションも日本から動画で見るのとは違った体験となりましたし、LabでAppleの人とお話できたことは知識を深めることやプロダクトを改善することにとても大きく貢献できそうです。またLLVM IRのような中間言語を読む強い動機づけを得られたことも今後の研鑽につながると考えています。こんなすばらしい機会を与えてくれた会社や、出張の間の仕事を助けてくれたチームメンバーに感謝です。

GunosyではWWDCだけでなく海外カンファレンスの参加をサポートする制度があります。iOSアプリエンジニアを募集していますので興味がもしありましたらお話聞きに来ていただけると嬉しいです。

www.wantedly.com