blog

DeNAのエンジニアが考えていることや、担当しているサービスについて情報発信しています

2015.06.18 イベントレポート

WWDC15参加レポート

by kenmaz

こんにちは。@kenmazと申します。2013年にDeNAに中途入社して以来、マンガボックスのiOSアプリ開発を担当しています。

さて今回DeNAの国際学会/カンファレンス参加支援制度を利用し、Appleの開発者向け会議であるWWDC15に参加してきました。 私個人としても初めてのWWDC、そして初めてのサンフランシスコ滞在ということで、刺激の多い充実した一週間となりました。

WWDC15 について

WWDC15は6/8から6/12の5日間にわたって開催されました。

初日のキーノートスピーチでは、ティム・クックを始めとするAppleのトップ陣が登壇し、一般のユーザー向けの内容を含む発表が行われました。初日の午後は、開発者向けのキーノートスピーチとも言える「Platform State of Union」というセッションがあります。開発者はまずこのセッションを聴講することで、今年のWWDCの発表内容の全体像を把握することができます。

*朝4:30からキーノートの行列に並んだ結果、真ん中よりちょっと前よりの位置の席をゲット*

2日目以降は、各技術の詳細を紹介するセッションがひとコマ40分で、9:00〜18:00の間にびっちりと予定されています。セッションのスケジュールはWebサイトやWWDCのiOSアプリで公開されているので、参加者は興味のあるセッションを調べスケジューリングし、各会議室に移動してセッションを聴講します。まるで大学時代の授業を受けているような感覚でした。

*びっしりスケジュール*

WWDC15注目トピックス

さて、今回のWWDCでは、iOS,OSX,watchOSという3つのOSの存在感が非常に強く打ち出されていました。昨年まではiOSとOSXに関するセッションがほとんどでしたが、今回新たにwatchOSがテーマに加わり、さらにSwiftに関するセッションも増えました。昨年のWWDCと比べてもセッションの数が増え、最終日まで非常に濃い時間を過ごすことができました。

そんな沢山のセッションの中から、個人的に興味深く感じたセッションの内容をざっくりと紹介します。

*レジストレーションを完了しご満悦の図*

watchOS 2

従来のWatchKitを用いて開発されたアプリは、ユーザインタフェースの表示と入力操作のみApple Watchの実機上で処理され、その他のあらゆる処理はペアリングされたiPhone上で動作するExtensionのプロセス上で実行されていました。

そのためWatchアプリを動作させるには必ずiPhoneが近くにある必要があり、またWatchアプリを操作するたびにiPhoneとの通信が発生するので、動作も若干もっさりしていました。また、使用できるAPIにも大きな制限がありました。

今回発表されたwatchOS 2では、このあたりの問題が一気に解決されました。

まず、従来iPhone上で動作していたExtensionのプロセスがApple Watch上で動作することにより、基本的にすべてのアプリの処理がWatch上で実行されるようになりました。これにより、iPhoneが近くになくてもWatchアプリは動作するようになり、またほとんどの処理がWatch上で完結するため、もっさり感の解消も見込まれます。

また使用できるAPIの制限も大幅に緩和され、グラフィックス処理、モーションセンサーへのアクセス、そしてApple Watchから直接インターネットにアクセスすることも可能になりました。また時計盤上に表示される情報を制御するためのComplicationを開発するためのAPIも公開されました。

watchOS 2により、より多くのアイデアをWatchアプリとして開発できる環境が整ってきました。まだ世間一般にはまだいまいち浸透していないApple Watchですが、watchOS 2 の登場により、生活を大きく変える、あっと驚くようなアプリが登場するかもしれません。

事情により写真は載せれないので代わりに朝食の様子でも・・

Universal linksとSearch

地味ですが今後iOSアプリを開発する上で重要になってきそうなのが、Universal linkと、App Searchです。

これまでアプリ上のコンテンツを友達に共有したい場合は、例えばアプリ内の"シェア"ボタンをタップしてURLをSNSやチャットなどで送信し、URLを受け取った側はwebブラウザ上でコンテンツを閲覧するか、対応するアプリを持っていればURLスキームの仕組みを使って、webブラウザを経由してアプリを起動する、ということを行ってきました。

どうしてもWebブラウザを経由する必要があり、あまりスマートな共有の方法とはいえませんでした。

Universal linkは、URLをタップしたらWebブラウザを経由せず、ダイレクトにアプリを起動し目的のコンテンツを表示する、といったスマートな体験を可能にする機能です。

またApp Searchは、iOSのSpotlight検索画面から、アプリ内のコンテンツを検索可能にするための機能です。

検索のために必要なデータは、Cloud IndexというAppleがホストするサーバー上に集約されます。世界中のユーザがアプリを使ってコンテンツを表示するたびに、Cloud Indexにコンテンツのインデックスが蓄積されていき、それらが各ユーザのSpotlight検索の検索結果に反映されます。また、Web上のコンテンツにも対応するアプリの情報をタグとして記述しておくことで、Applebotと呼ばれるAppleのWebクローラーがクローリングを行い、その結果もCloud Indexに反映されます。

たとえば、「いま巷で"恋と嘘"というマンガが話題らしいな・・」と思ったらSpotlight検索で「恋と嘘」を検索すると、検索結果として「マンガボックス」が表示され、アプリがインストール済みであれば検索結果をタップするだけで、アプリが起動しダイレクトに「恋と嘘」を読み始めることができます。

あるいは「アップルパイを作りたいのでレシピを見たいな・・」と思った場合は「アップルパイ」と検索すると、アップルパイのレシピを表示できるアプリの一覧が検索結果として表示されます。

このように、Universal link や App Searchが充分に普及すれば、Webブラウザを経由すること無く、あらゆる情報やコンテンツへのアクセスにアプリが使われるようになるかもしれません。自分たちのアプリのコンテンツがきちんとCloud Indexにインデクシングされるように設計しておくことが、今後重要になりそうです。

Swift2

WWDC初日のキーノートスピーチでは様々な取り組みが紹介されましたが「Swiftをオープンソースとして公開する」という発表の時が一番客席が沸いていました。そんなホットなSwiftですが、Swift2では様々な新機能が追加されました。

個人的に興味深かったのは Availability Checking の機能です。以下のようなif文を書くことでiOSのバージョンごとにアプリの挙動を変えられるようになります。

これまでも respondsToSelector メソッドを使うことで同様の分岐を実現することは可能でしたが、あまり安全な手法とはいえませんでした。基本的にrespondsToSelectorの引数には任意の文字列を指定することが可能なので、タイプミスなどで存在しないメソッド名を指定してしまったり、そもそもうっかりrespondsToSelectorによるチェックをし忘れてしまったとしても、エラーもなくコンパイルは成功してしまいます。

一方で Availablity Checking ではコンパイラがアプリのDeployment Targetで指定されたOSバージョンと、コード上のAPI呼び出しをチェックすることで、このあたりの安全性を保証してくれます。

例えばDeployment Target = iOS8 に設定されたアプリでは、

if #available(iOS 9.0, *) {…}

でチェックされたブロック内でのみ、iOS9のAPIを呼ぶコードを書くことができます。Availabiliy CheckingをせずにiOS9のAPIを呼び出すコードを書くと、コンパイルエラーが発生するため、うっかりiOS9のAPIを呼び出すコードを書いてしまった、というようなミスを完全に排除できます。

Availablity Checking はBaseSDKがiOS9以上であれば使用可能なので、アプリ自体はiOS7以降のサポートを維持しつつ、最新のiOS9のAPIを積極的に使っていく、といったことも可能になります。

また、Availablity Checking機能を使えるのはSwiftだけなので、既存のコードをObjective-CからSwiftにマイグレーションする大きなモチベーションにもなりそうです。

その他にも、新たに以下のような機能や改善が追加されました。

  • 新しいコンパイラ最適化レベルであるWhole Module Optimaztionの追加
  • try-catchによるエラーハンドリングのサポート
  • protocol extension
  • guard構文
  • SDKが提供するAPIのSwift最適化など

また、Swiftによるプロトコル指向プログラミングについてのセッションや、Swiftプログラムのチューニング、ObjcとSwiftの相互運用性についてのセッションなど、プログラミングテクニック的なセッションも数多くあり、非常に興味深い内容でした。

以上のとおり、Swiftはバージョン2.0によってかなり進化を続けており、またSwiftのみで恩恵を受けられる機能の追加もかなり多くあり、今後よりいっそうObjective-CからSwiftへの移行がすすみそうです。

Multitasking

アプリから離れることなく別のアプリを起動することができるSlide Over、画面を2分割して複数のアプリを同時に操作できるようにする Split View などの機能が公開されました。

機能の素晴らしさもさることながら、これまで開発者に向けて Size Class や AutoLayout などのAdaptive UI系の技術の利用が盛んに推奨されてきましたが、それもこのような機能を実現するための布石のひとつだったのか、と思うと関心してしまいます。

ラボ

セッションだけでなく「ラボ」もWWDCの大きな魅力の1つです。WWDC期間中の9:00〜18:00まで、会場にはiOS/OSX/watchOSを開発したApple社員が多数常駐しているブースがあり、各技術についての質問や改善要望など、なんでも相談にしにいける、というのがラボです。またAppStoreのレビューチームもラボを開いているので、審査官に対して、直接アプリの審査について質問したり、リジェクトされた場合にその理由を詳細に深堀りして質問することもできます。またAppleのデザインチームもラボを構えているので、自分の作ったアプリのUIについてアドバイスを貰ったりすることも可能です。

ラボは、これまで日々の開発でつまづいたり悩んだりしたことを、一気に解決する絶好のチャンスです。また初日にXcode7が公開されたので、さっそくダウンロードし、新しいAPIを使ってみて、そこで出た疑問などもすぐにラボに聞きに行けるのが楽しかったです。

今回は、以下の様な質問や相談をラボに持ち込みました。

  • App Review Lab
    • コンテンツのエロ・グロ表現の基準に関する質問
    • IDFAの取り扱い方についての質問
    • IPアドレス制限によるコンテンツの出し分けに関する質問
  • StoreKit and Reeipts Lab
    • Sandbox環境における不可思議なIAPの挙動についての質問(=>結局原因がわからず、再現手順をまとめてフォーラムに投稿しといて!とのことでした)
  • Internationalization Lab
    • Export/Import Localization機能の改善要望
    • Storyboardをローカライズする際のstringsファイル再生成時の問題について
  • App Search and Spotlight Lab
    • iOS9で導入されたApp Search機能を実際に使ったサンプルアプリを作ってみたけど動かないんだけど?(=>僕のプログラミングミスでしたorz)
  • Core Data Lab
    • CoreData周りで原因が解決出来ないクラッシュがあったのでその相談(=>解決!)
  • UIKit and UIKit Dynamics Lab
    • UIViewController/UIViewのライフサイクルに関する質問

その他、細かい質問など、カジュアルに質問しに行ける雰囲気がよく、何度も質問しにいきました。

*こちらはCore Data Labの行列。みんな問題を抱えています。*

英語について

ラボで相談に乗ってくれるApple社員の方々とは、基本的に英語でのコミュニケーションになります。自分自身、そんなに英語が得意というわけではないのですが、意外となんとかなりました。とにかく質問しに行く前にしっかり質問したいことを頭のなかで整理すれば、とりあえず自分の言いたいことは伝わりました(と思っています)。ときどき相手が何を言っているかわからないこともありましたが、何度も聞き返すことで、(ありがたいことに)表現をいろいろ変えて説明してくれるので、助かりました。

また、ラボでのやりとりはすべてiPhoneのボイスメモアプリで録音させてもらったので、理解できなかった会話をあとで聴き直す、といったこともできて良かったです。

WWDC関連イベント

WWDC開催期間中は、サンフランシスコ現地のIT企業によるミートアップやパーティなどのイベントが盛んに行われていました。18:00までセッションを受講した後は、それらのイベントに参加するのも楽しかったです。今回私が参加したイベントを幾つか紹介します。

WWDC Hike

WWDCの開催前日にWWDC参加者が集まって、サンフランシスコの北部の海岸沿いをハイキングしよう!というイベントです。WWDCのレジストレーションを完了し、記念品としてもらったジャケットを着てサンフランシスコの街中をうろついていると、このイベントの主催者に偶然声をかけられ、ぜひ来なよ!と誘われたため参加することにしました。

イベントのwebページには集合場所が曖昧にしか書かれておらず、いざ集合時間になってもあまり人がいなかったのでがっかりしていましたが、徐々に腕にApple Watchを巻きつけた人々や、WWDCジャケットをきた人々がわらわらと集まりはじめ、最終的には200人ほどの参加者が集まりました。日本人の参加者はどうやら私だけのようでしたが、慣れない英語を使いながら、ロンドン、ドイツ、モロッコなど、世界中のアプリ開発者たちとプログラミングの話や母国についての話などが出来たりして、非常に楽しかったです。

計4時間ほど海沿いの歩きづらい道を歩いたので、日々の運動不足もあり、相当疲労しましたが良い思い出となりました。

CocoaPods meetup

iOS/OSXアプリ開発におけるライブラリの管理の定番ツールであるCocoaPodsの開発者達によるミートアップです。Twilloという会社のオフィスを使って開催されました。普段からよく使っているツールの開発者たちの話を聞けるのは楽しいものです。

Foursquare WWDC15 Event

Foursquare/SwarmのiOSアプリ開発者によるプレゼンテーション&パーティのイベントです。Foursquareのオフィスはいかにもベンチャー、という感じでなかなか雰囲気が良かったです。こちらのイベントでも各国の開発者といろいろ雑談することができました。

Realm Party

iOS/Android向けの組み込みデータベースを開発しているRealmという会社で開催されたパーティです。日本のiOS開発界隈で有名な岸川さんや、rebuild.fmでお馴染みの宮川さんも参加しており、楽しい時間を過ごせました。後半はなぜかマリオカート大会が行われました。すごく難しかったです。。

DeNA West訪問

DeNAのサンフランシスコの拠点であるDeNA Westにも訪問しました。海沿い&ジャイアンツの球場が目の前にあるというロケーションが非常に良かったです。現地のエンジニアと話したり、お土産をいっぱいもらったりしました。

シリコンバレー観光

サンフランシスコ滞在の最終日にはスケジュールに余裕が合ったので、現地の友人と一緒に車でシリコンバレーをめぐり、Apple、Google、Youtube、Twitterなどの有名IT企業を(外からですが)訪問しました。またエンジニアなら一度は行ってみたいと言われるコンピューター・ヒストリー・ミュージアムにも立ち寄ることができました。憧れの?シリコンバレーの雰囲気を味わうことができ、良かったです。

まとめ

私は2008年ごろからiOSの開発に携わってきましたが、毎年WWDCのチケットが取れず悔しい思いをしていました。今回は幸運な事にチケットをゲットすることが出来、さらに費用面やその他の面で会社にバックアップしていただきました。また(チームのみんなには申し訳ないですが)しばし仕事のことを忘れWWDCにどっぷり浸かることができ、エンジニアとしても非常によい刺激を受けることができた一週間となりました。


最後まで読んでいただき、ありがとうございます!
この記事をシェアしていただける方はこちらからお願いします。

recruit

DeNAでは、失敗を恐れず常に挑戦し続けるエンジニアを募集しています。