この記事は、Merpay Tech Openness Month 2020 の9日目の記事です。
こんにちは。メルペイのエンジニアリングマネージャーの玉城です!
今年のアップルのWWDCで発表された新技術などに関するまとめを発表するイベント「Recap of WWDC20」(https://mercari.connpass.com/event/180254/) を、7月21日に開催いたしました。この記事はそのイベントで発表された資料や議論の内容などをまとめたものです。
WWDC20 Recap of SwiftUI & Combine
Speaker: kagemiku
Updates to CollectionView
Speaker: manoj
WKWebView new APIs for iOS 14
Speaker: mustafabaalbaki
Q&A
Q: allowContentJavaScriptは自社(ドメイン)のjavascriptは動くが、外部のjavascriptは動かないように制御するということでしょうか?
A: その通りです。例えばjavascriptでナビゲーションの部分だけを無効にしたり、javascriptを有効にしたい部分をホワイトリストの一覧を作って許可したりもできます。
App Clips
Speaker: yusuke_h
Q&A
Q: 山手線の各駅にスポットを作ってスタンプラリーみたいなことができるかなと思ったけどApp Clipsは前回のデータ引継ぎはできますか?
A: App Clipsからフルアプリへの移行に関してはグループコンテナを使うことができる。なのでApp Clipsが再インストールされた場合もグループコンテナから値を引き出して使うことができるはずです。
参考情報
Q: 「接頭子が最も具体的」という意味がよくわからなかった。
A: URLで最長マッチするものが選ばれるということ
参考情報
What’s new in Swift
Speaker: Kazu_H
Q&A
Q: SE-0269について、unowned selfの場合もselfの省略ができたはず
A: その場合(unowned)も省略できます
Q: Closure内にselfを書くと暗黙的にunownedなのか?
A: [self]でselfをキャプチャするとクロージャー内にselfがコピーされると思う、[unowned sefl]の場合はコピーされないのでnilになる場合があるはず。
Q: KeyPathを使ったことがないのですが、どういう時に使いますか?
A: SwiftUIのassignやForeachやListなどでidを指定する際に使ったりする、あるオブジェクトを渡してその中のあるフィールドをidとして扱う時に型安全に指定することができることなどが使い所だと思う。
※ その他KVOを使う場合(WKWebViewのプログレスの監視など)にもKeyPathを使うことがあるなどのコメントを参加者から頂きました。
パネルディスカッション
パネルディスカッションでは3つのトピックについて発表者がそれぞれの思いを語ってもらいました。
iOS14で嬉しい機能、大変だと思う機能
sato: では、はじめにmanojさんに聞いてみましょうか
manoj: 良いと思う機能についてはAppleWatchでのスリープディテクションやEmojiの検索機能、ピクチャーインピクチャー、あと私は英語を話すので翻訳機能とその機能がアプリにインテグレートされると良いと思っています。逆に好きでない機能についてはWidgetが静的に1時間ごとにしかアップデートされないのでもっとダイナミックにアップデートができると良いなと思っています。
sato: manojさんありがとうございます。
sato: mustafaさん、iOS14で何か嬉しい機能とかありますか?
mustafabaalbaki: WidgetとAppClipsが良いかなと思っています。
sato: なるほど、Widgetのどんなところが良いと思いますか?
mustafabaalbaki: Widgetの追加をするところだったり、スクロールダウンする時のAppのアイコンや画面などに行ったりできたり、いろんな所でダイナミックに使えるのが所が良いと思っています。これからの開発において色々なところで使えるので開発者のモチベーションが上がる部分にもなると思います。
sato: kagemikuさんどうですか?
kagemiku: iPadOSも含めていいのであればscribbleの文字認識機能が良いと思ってて、テキストフィールドの近くでAppleペンシルを使って文字を書くとそれがテキストとして認識されてテキストフィールドに入力されるっていうiPadとAppleペンシルが使いやすくなって良いなって思いました。
sato: あれいいですよね、ラフに書いたらそのままテキストとして入力されるってやつ
kagemiku: あと…iPad上でXcode〜みたいに将来的には手書きでスラスラスラ〜っと書くと補完もされつつコードがかける未来が来ると面白いかもしれないですね、便利かどうかはさておき(笑)
sato: Appleペンシルでアプリ開発したい、いいですね
kagemiku: なんか面白そうじゃないですか? SwiftUIのコンポーネントもお絵かきツールを使うノリで細かい調整もAppleペンシルでタップで調整するみたいな未来が来るとアプリ開発とプログラミングの面白さが増えてくるのかと思います。
sato: いいですね、絵を描くようにプログラミングしたいですね、いい未来だと思います。
sato: App siricon上でiOSのアプリがそのまま動くって言ってたじゃないですか、逆にMacOSのアプリがiPadOSに移植されてる未来もあるんじゃないかなって思いました。普通に考えるとそういう方向性に行きつきますよね?
kagemiku: もちろん移植の方向もあると思んですが、何かのアプリが確かSwiftUIでしか作れないって話があったじゃないですか?
sato: App Clipsかな?
kagemiku: そうですね、どんどんMacアプリもiPadアプリもiOSアプリもWatchアプリもSwfitUIで作る、Xcodeにもマルチプラットフォームのためのテンプレートがあるので、移植を考える前にそもそも同じコードベースで同じCPUアーキテクチャの上で動く未来がくるんじゃないかなと思っています、というか来ますよね?
sato: 来ますね、Mac>iPad>iPhone>Watchの順番で画面サイズが大きいのでそのサイズに合わせたUXを考えようっていうセッションを観たんですけど、画面サイズはさておき(CPUなどの)下回りのハードウェア側が似たものになっていくのでどのデバイスでも動くというのが実現できると思いますね。
kagemiku: あとはSwift web assembly対応も進んでくると、きっとマルチプラットフォームで作ったコードがWebブラウザ上で動くみたいな世界がくると、いよいよ1つのSwiftコードからどこでも動くものが出来上がってくるので面白いと思います。
sato: そうですね、SwiftからWebも出来るようになるとめちゃくちゃ幅が広がりますね!
Kazu_H: デフォルトのブラウザとメールアプリが変更できるようになるがいいですね、なんかAppleらしからぬ感じはするが嬉しい変更ですよね。
sato: 変えられるの良いですよね、私もgmailをよく使ってるのでデフォルトのgmailに変えようと思ってます。
yusuke_h: AppClipsはさっき話したんで、iPhoneが車のキーになるって話があったと思うんですけど、それ自体に価値があるというか無線通信やRFIDのような技術が浸透していくと面白いかなと思っています。そうなるとiPhoneがキーになるじゃないですか、そんな風にペイメントやキーがiPhoneが全てに置き換わっていくと、でもそうなるとiPhoneを無くすのがリスクになるので、生体認証を使った技術がスタンダードになっていく未来もこの先ありえるのかなって思いました。
sato: そうですね、鍵よりiPhoneは無くしにくいのでiPhoneが鍵の代わりになっていくのは良いと思いました。
SwiftUIの進化どうでしょう
kagemiku: 一言で言えば順当に進化してくれてありがとう。去年はインパクトのある登場でしたがCollectionViewに相当するものがなかったり、UITableViewっぽいことをNavigationViewとListViewで実現できたけど、ちょっと凝ったことをしようとすると結構大変だった。そこが良い感じに解消されるLazy系やGridなどのコンポーネントが追加されました。
sato: LazyStack良いですよね、UITableView/UICollectionViewの場合は再利用の登録をしなければいけなかったところが、SwiftUIではコンテンツを渡せば勝手にメモリ管理してくれるようになるので楽
kagemiku: むしろなんでこれまでなかったんだって(笑)
sato: 確かに(笑)
kagemiku: まぁ、やっぱりSwiftUIっていうフレームワーク自体がかなり大きいので、きっと来年はもっと使えるものになってくると思います。
sato: 今回なかったもの、SFSafariViewControllerに相当するものが無かったように見えましたね。
kagemiku: そうですね、パッと観た感じだとiOSのデフォルトブラウザを開くってのはあったけど、コンポーネントとしては無いようでしたね
sato: 多分、来年…ですかね?
kagemiku: ハイ…来年出てきて欲しいですね(笑)、今後AppleとしてもSwiftUIに舵を切っていくと思うのでXcodeなどの周辺のIDE含めて進化してくれると思います。
sato: Appプロトコルが出てアプリが100%SwfitUIで作れるようになったし、私も個人でアプリ開発してみたいと思いました。
kagemiku: そうですね、そろそろある程度込み入ったアプリをリリースするところまで、あくまである程度の制限を許容する必要はありますができるようになってきたと思います。
Kazu_H: 以前のSwfitUIを触った感想としてはまだ厳しいなとは思ってましたが、ちゃんとキャッチアップしてSwiftUIの知識をアップデートしていかなければと思いましたね。
sato: 発表されたようなSwift自体の言語のアップデートのおかげでSwiftUIも書きやすくなってきてる気もしました。
Kazu_H: そうですね、SwiftUIに寄せたSwiftの進化もあるのかもしれないですね。
mustafabaalbaki: SwiftUI非常によく進化してきているがまだ成熟しきってない部分があるので他の部分と比べることはできないがiOSアプリの開発に将来的に貢献するものになると思っている。
App Clipsと未来のアプリ体験
yusuke_h: ポイントカードアプリなんかがいいかなと思ったんだけど、いざどんな場面で使えるかと言われると具体的にこれといったものを挙げにくい、いいユースケースがあれば知りたい。問題があると思っていて、AppleとしてはAppClipsはフルアプリのために存在しているのでAppClipsが便利だから使わせたいというだけではなく、フルアプリがある上でそこにつなげる役割としてのAppClipsを作って欲しいと思っているはず。
sato: そうですね、私の家の近くに隅田川とかあるんですが、遊覧船とかが通るんですがそういう時のガイドにアプリじゃなくてAppClipsを使えるんじゃないかと思いました。
yusuke_h: それに、弱点というか課題があって、AppClipsについてAppleのLabで色々質問したんですけど、あくまでフルアプリのためのAppClipsなのでAppClipsだけで完結するようなものを作ってしまうとAppleの目的とズレてしまうんです。なのでフルアプリを使わせる前提でのAppClipsを使わせるにはどういったユースケースが良いか?というのが難しいなと思っています。軽いアプリとして使わせたいというだけなら色々案が出てくるんですが…、例えば日本中の観光地をまとめたフルアプリがある前提でAppClipsがあるんじゃないかって思ったんです。例えば厳島神社に行ってAppClipsを使って、そのあとフルアプリをダウンロードして、今度は北海道の阿寒湖行ったときにはフルアプリを利用する。という感じのものですね。そういったストーリーを設計するのが難しいなって思っています。
sato: Appleのフォーラムなどを見ると有料アプリをAppClipsで無料で配布することができるという話をみて、私も個人開発でアプリを出しているんですが有料アプリだと人に勧めにくいこともあって、AppClipsで無料でメイン機能を提供して気に入ったら有料版のフルアプリを買ってねという流れが作れそう
yusuke_h: 反論するわけではないんですが、その場合だと無料アプリにIAPで有料版の機能が使えるようにするのと何が違ってくるのかなというのが気になりました。
sato: それはコストだと思います。IAPはリジェクトの対象になりやすいですし、Appleへの細かい説明を求められる。そう言ったプロセスを挟まずに無料版を配布することができるのが良いと思っています。
yusuke_h: 確かに、そう考えると有料アプリの体験版としてAppClipsがあるのは良いかもしれないですね。起動方法などが限られているのでどのように提供するかは考える必要がありそうですね。
sato: なんなら自分でフライヤー刷ってQR配るとかですかね(笑)
manoj: メルカリでもAppClipsはとても有効に使えると思っています。例えば購入の場合、自分の買いたいアイテムをSNSで共有したり、QRコードをスキャンさせてみたり、Sign in with AppleでApple Payを使わせるとか、色々な可能性があると思いました。
mustafabaalbaki: そうですね、AppClipsをうまく使う方法としては自転車などのライドシェアなどがうまく使う方法だと思います。
yusuke_h: Appleの発表の中ではありましたね、ライドシェアとかは日本ではまだあまり一般的になってい気もしますね
kagemiku: 日本も最近はライドシェアは増えてきてる気がします、スクーターなど一部は道交法的に課題があるのかもしれないですが、自転車などのライドシェアは過去にメルカリでもやってましたしね。なのでライドシェアは日本でも相性が良いかもしれないですね。
sato: ライドシェアだとフルアプリをインストールしないんじゃないかなという気もしてますがどう思いますか?
kagemiku: 例えば初回だけタダで乗れて〜とかですかね
sato: 発表ではログインはSign with Apple、支払いはApplePayでやってましたね。
Kazu_H: そう言えば、メルカリステーションとかでAppClipsで通りかかった人がメルカリを体験するみたいなユースケースはありかなって思いました。
sato: そうですね、そういう物理的な接点を利用するような設計になってるので、物理的な店舗で利用するのは良いと思います。
Kazu_H: それが工数に見合う数が使われるか?などの検討は必要そうな気がしています。
yusuke_h: プッシュ通知が使えるかどうか?って質問がきてますね。細かい話を省いて言えばプッシュ通知使えますね。当然通知の許可をユーザーがする必要はありますね
おわりに
今回のイベントでは英語話者の発表者の発表はメルカリ社内のGOT(Global Operations Team)にお願いして翻訳・通訳をしています。この点についてもイベント参加者からは発表内容の理解の助けになったとの声を多く頂きました。こういった取り組みができるのも社内でGOTチームを持つメルカリならではといったところですね。
WWDCで発表される新機能はエンジニアに新しいチャレンジの機会を与えてくれます。
今回のイベントで紹介した新機能の他にも多くの新機能がWWDC20で発表されています、
メルカリ・メルペイはもちろん、イベントに参加された多くの皆様のアプリにこれらの新機能が取り込まれることでより良いアプリがリリースされていく事を期待しています!