ついにあのDarkModeがiOSにも… WWDC19参加レポート
はじめに
エウレカのiOSエンジニアの島です。業務ではPairsのGlobal版のiOSアプリを開発しています。今回はWWDC19に参加してきたので、レポートにまとめました。
WWDC(Worldwide Developers Conference) は、Appleが開催するDeveloper向けのカンファレンスです。
- 開催場所: San Jose McEnery Convention Center
- 開催期間:2019/06/03 ~ 2019/06/07
今年も運良く抽選にあたり、昨年に引き続き2度目のWWDCへの参加となりました。エウレカでは福利厚生としてカンファレンス参加の費用(チケット代、ホテル代、交通費)のサポートをしてもらえるのでありがたいです。
参加費$1599は他のカンファレンスと比べると、普通に高いなと思っていました。ですが世界86か国から5000人以上を招いて5日間イベントを運営するのは大変なことだと思いますし、参加してみてそれ以上の価値があるカンファレンスだなと感じています。
前回のWWDCも参加レポートを書いているので、よければ見てみてください。
WWDC19の印象
振り返ってみても今年のWWDCは興味深い発表が多く大変盛り上がった年だったと思います。会場でもSNS上でもとても盛り上がっていました。
今回の発表で特に盛り上がっていたのは、SwiftUI, DarkMode, Sign up with Apple, iPadOS, Mac Proだったかなと思います。
iPhoneX以降では有機ELディスプレイが採用されていて、液晶ディスプレイの黒ではなくより自然な黒を表現することが出来るので、DarkModeの有効性が高まってきています。最近では自前でDarkModeを実装しているiOSアプリも増えてきています(例えばTwitter, Messenger, Youtubeなど)。
去年はmacOS(Mojave)にDarkModeが追加されたことやパフォーマンスの改善が印象的でした。今年は新しいOSだったり、アプリの設計を大きく変えるようなフレームワークの提供、ハードウェアの発表だったりと、エンジニア的にも一般ユーザーとしても楽しめる内容だったかなと思います。
DarkModeについて
Human Interface Guidelinesにも早速iOSにおけるDarkModeについての項目が追加されていました。
エウレカではマッチングサービスのPairsを提供しています。マッチングサービスだとあまりDarkUIの事例はあまりなく、採用しているアプリは海外に一つあったかなという印象です。
メリット
- コンテンツへのフォーカス
- 消費電力の削減(iPhoneX以降で有機ELディスプレイが採用されている場合)
- 明暗差の軽減(夜など周りが暗いとき)
デメリット
- 実装工数がかかる(仕組みの対応、カラー定義など)
- テスト項目が増える(Lightは大丈夫だけどDarkだと見えにくいとか)
AssetCatalogのColorSetからColor Theme, Contrastごとに色を定義することができます。
コードレイアウトでDarkModeに対応するためには、DynamicColorを定義するか、次のメソッドをoverrideして変更する必要があります。
func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?)
注意点として、このメソッド内では、処理に負荷がかかると色の反映が遅延する可能性があるので、色の変更以外の処理は極力行わないほうがいいみたいです。
CGColorはDynamicColorに対応していないので、traitCollectionDidChange のタイミングで変更してあげる必要があります。
iOS13から設定のDisplay&BrightnessでAppearanceとしてLightとDarkを変更することが出来るようになっています。対応しているアプリは自動的に表示が切り替わる様になります。アプリ側は実装しなくても大丈夫ですが、アクセシビリティの観点からも対応しておいたほうがベターだとは思います。
あと、iOS13からUIElementColorsとStandardColorsがけっこうアップデートされていました。
DarkMode対応の実験をしているサンプルプログラムがあるのでよかったら見てみてください。
Xcode11からデバッグ機能が追加されていて、画像のようにInterfaceStyleやDynamicTypeなどを変更しながらシミュレータを実行できるようになっていました。
SwiftUIについて
ドキュメント
チュートリアル
SwiftUIの発表はかなり驚きましたね。発表直後から多くのデベロッパーが試行錯誤と議論をしています。
Viewを宣言的に記述できる点だったり、Viewとステートを同期するための仕組みが提供されていたりして素晴らしいなと思いました。
UIを簡潔に記述できるようになっています。一方で自動で実装される部分も多いのでそれをカスタマイズできないと、独自で細かく調整したい場合も対応できない可能性があります。このあたりは、今後細かく調査していく必要があると思います。
セッションではSource of Truthが重要なキーワードになっていました。あと出来るだけ責任を小さくしたViewを作ってCompositeすることであらゆるViewを作るべきだと話もしていて、そこでAtomic DesignやSOLIDの原則のような考え方が大事になってくると思います。
SwiftUIを使うとある程度自動的に実装される部分もあるので、標準アプリのようなシンプルなデザインは実装しやすくなるなと思いました。SwiftUIが浸透してくると多くのアプリのデザインのボトムラインが上がってきて、使いやすいアプリが増えてくるかなと思いました。一方で、どのアプリも似通ったデザインが増えてくるのではないかなとも思っています。
その中で、他と差をつけるためには、サービスの内容、構造化や情報の整理、滑らかなアニメーション、インタラクションデザインなどになってくるのではないかなと考えています。(言い換えると、ユーザーストリーやユーザ体験の完成度が大事になってくるのではないかと考えています。)
しかし現状だと、細かいデザインの適応だったり、イベントのハンドリングだったりが厳しいみたいなので、プロダクトでの採用はもう少し先になるかなと思いました。
ハードコントローラー対応
次期tvOSでPlayStation4, Xboxのコントローラーが使えるようになりました(iOSでも使えるようになるみたいです)。今年の秋にApple Arcadeが公開されるのもあって、より多くのコアなゲームユーザがAppleのプラットフォーム上でゲームをすることになりそうです。
iPadOS
iOSからiPhone用とiPad用にOSが分かれるとは考えてもいなかったので、かなり驚きました。
デバイスが違えばユースケースが異なる場合が多いので、そのまま他のデバイスにリサイズ・リレイアウトして動くようにするだけだと、ユーザ体験としてあまり良いものにはならないと思っています。なので、今回iOSとiPadOSを切り分けたのもそれぞれのデバイスで最適化したユーザ体験を作っていきたい意図があるのかなと感じました。
その他で気になっているトピック
- SwiftPackageManager
- Sign in with Apple
- Combine
- Project Catalyst
- Bluetooth5.0 LE
- SF Symbols
- UICollectionViewDiffableDataSource
- BackgroundTask
- CoreLocation
- SiriKit
- Xcode
- アプリごとに言語の設定が可能に
その他のイベント
Apple Special Event
WWDCのイベントとして開催しているランニングやヨガに参加してみました。朝の7:00から1時間ほど開催されていました。
海外のエンジニアは、日本のエンジニアと比べると運動が好きな人が多そうだなという感じがしました。体を動かすとスッキリして良いリフレッシュになりました。日本にいるときよりもかなりアクティブな毎日を過ごしてました。
AR Game Championship
AppleがWWDC用に作成したARのゲームの体験コーナーがありました。対戦形式のゲームで最終日にはトーナメントをしていて、とても盛り上がっていました。Appleの人が最高に面白かったです。
Bash
最終日の前夜は、Bashという野外ライブのイベントがあります。毎年有名なバンドを招いて、ライブをみながらご飯を食べたりお酒を飲んだりして参加者同士が交流するイベントです。
今年はWeezerというバンドが来ていました。すごく有名みたいなのですが僕は知らなかったので直前にプレイリストを聞いて予習していました。
まとめ
セッションを見たり、ラボで話を聞いたりして、これまで知らなかったことや、新しい発見がたくさんありました。たとえば、UITraitCollectionというものもiOS12からあったみたいですが、今回のDarkModeの登場に際して調べてて知りました。あとは、知らずに実装していた手法がPhantom Typeという手法だったということなど、他の人と話をしていて気づくことも多かったです。
今回は2回目の参加だったので、イベントの動き方だったり情報収集を効率的に行うことができました。Twitterだと #wwdc19 のハッシュタグがあったり、Slackだと日本向けや世界中のiOSエンジニア向けのグループがあったりしました。事前に入っておくといろいろと情報共有出来ると思います。
去年と比較して、英語力や技術面でわかることが増えて成長を感じることができました。それもあって去年よりも数段とWWDCを楽しむ事ができました。
去年からの大きな成長の一つとしてラボへ質問に行けたことでした。去年は苦手意識もあって外国の方にあまり話かけられませんでしたが、今年はできるだけコミュニケーションを取るようにしてみました。
苦手意識が軽減したのもエウレカでは外国籍の社員も積極的に採用していて社内で英語を扱う機会が多くなっていることが大きな理由だと思います。そして英語がわかるのとそうでないのとでは、情報の量と質が違うので問題解決のスピードが全然違うなと実感しました。
もし次回行けることになれば、セッションで聞いた内容を試してみて、わからないことをラボに質問に行くみたいな行動ができるようにしたいです。
最後に、エウレカでは新たなメンバーを募集しています!ぜひ下のリンクをチェックして見てください👍