ZOZOテクノロジーズの取り組みを大公開!try! Swift 2019 Tokyo 参加レポート

f:id:vasilyjp:20190401101644j:plain

こんにちは、ZOZOTOWN事業部にてiOSエンジニアをしている名取です。

2019/3/21-22にベルサール渋谷ファーストで行われたSwift言語の技術カンファレンスtry! Swift 2019 Tokyoに参加してきました。 ZOZOテクノロジーズからはほぼ全員のiOSエンジニアが参加したほか、プラチナスポンサーとして企業ブースの運営も行いました!

本イベントに向けてZOZOテクノロジーズとしてもメンバー1人1人がたくさんのtry!(挑戦)をしてきましたのでその様子と話題のファッションチェックアプリの評判や当日の興味深かったセッション内容などについてお伝えいたします。

try! Swiftについて

try! SwiftはSwift言語での開発における最新の応用事例について集まる国際コミュニティです。 try! Swift 2019 Tokyoは32カ国から900人の参加者が集まる大規模なカンファレンスとなりました。

発表内容はSwift言語やiOSアプリ開発を中心にmac OS、Server Side Swift、3Dレンダリングの話など多岐にわたりAppleのエンジニアも数名が登壇されました。

Appleにとってもtry! Swiftが重要なイベントであることが伺えます。

f:id:vasilyjp:20190401101753p:plain

ZOZOテクノロジーズとしてのtry!

私たちはアプリ開発が大好きです!
Swiftでプロダクトコードを書くのが楽しく、日々の技術の進化にメンバーみんながワクワクしています。
そんな私たちだからこそ、try! Swift 2019 Tokyoに参加するにあたって2つのtry!をしました。

CfPを出す

私たちZOZOテクノロジーズでは業務の一環としてプロダクトチームを跨いでiOSエンジニアが集まり、CfPのアイデア出しや議論から始めました。 一度書いたことがある方なら分かると思いますがCfPには大変な労力と技術的な知識・経験が必要となります。社内のiOSエンジニアで何度も議論を重ね、お互いに意見し合いながら1人1人が納得のいくCfPをつくりあげ提出しました。 その結果、ZOZOテクノロジーズからはMichael Petrieが見事スピーカーに選ばれ発表を行いました!

f:id:vasilyjp:20190401101851p:plain

Michael Petrieのスピーカー発表が決まってからも社内のiOSエンジニアで積極的にピアレビューを行い、活発に議論を重ねながら発表内容のブラッシュアップに貢献しました。
私はZOZOテクノロジーズに入社してまだ数ヶ月ほどしか経ちませんが、チームとしての協力体制がとても素晴らしくチーム開発が好きな人にはこれ以上ない環境だと感じています。

ファッションチェックアプリの作成

f:id:vasilyjp:20190401102001j:plain

スポンサー企業として何ができるかを考えた時に、私たちらしさとは何かを考えました。私たちに共通しているのはアプリ開発が好きでファッション産業が好きということです。
そんな私たちだからこそアプリを開発して来場者に楽しんでもらうのが面白いのではないかと考え「ファッションチェックアプリ」の開発を行いました。
ファッションチェックアプリの詳細はこちら

ファッションチェックアプリは元々DroidKaigiの企業ブースのためにKotlinとFlutterで作られたものでしたが、try! Swift 2019 Tokyoのために弊社の2人のiOSエンジニア【伴(@banjun)と西山】が協力してiOS対応をしました。

try! Swiftは国際的なカンファレンスであることからローカライズも行いました。ローカライズはFlutter側で実装することで、ブースでデモをしているときもアプリ上ですぐに言語切り替えができるようになりました。このようにしてiOS対応コードを入れつつもFlutterの利点も活かしたアプリになっています。

try! Swift 2019 Tokyo当日の雰囲気

会場はとても広く、世界中のSwiftデベロッパー900人が一堂に会しました。
try! Swiftは国際的なカンファレンスということもあり開催場所が日本であるにも関わらず多くの海外デベロッパーが参加しました。

f:id:vasilyjp:20190401102029p:plain

メインのセッション会場とは別にスポンサーブースも設けられました。
当日のZOZOテクノロジーズのブースはこんな感じです!

f:id:vasilyjp:20190401102146p:plain

ブースではファッションチェックアプリの展示をはじめ、ZOZOテクノロジーズのiOSエンジニアが参加者の質問に答えたり技術的なこと会社のことなどについてお話をさせていただきました。

ファッションチェックアプリは非常に多くの方々に利用していただき、たくさんのシェアがあったのにはとても驚きました。 どうやって作っているのか、リリースの予定はあるのかなど多くのご意見をいただき参加者の方々との良い交流のきっかけにもなりました。 ブースの運営側としても非常に学びのあるとても楽しい時間となりました!

f:id:vasilyjp:20190401102218p:plain

SESSIONS

全32セッションの中から特に気になったセッションについて個人の感想などを踏まえながらいくつかご紹介いたします。

Keypath入門

@Benedikt Terhechte

出典 : https://speakerdeck.com

key pathを使う最大のメリットはプロトコルだけでは実現できない型の抽象化を行うことだと思いました。 言い換えれば、リーダブルなコードの記述ができるとも言えるかと思います。

以下のような型の異なる複数の要素を持つstructがあったとします。

f:id:vasilyjp:20190401094119p:plain

この時にSettingsEntryというkey pathを要素に持つstructを以下のように用意したとします。

f:id:vasilyjp:20190401102310p:plain

すると、SettingsEntryという1つの型のみでsetttingの管理を行うことができるようになり抽象化できるというお話でした。

f:id:vasilyjp:20190401102323p:plain

セッションの後半では岸川克己さんkey pathを使ったライブラリが紹介されており、key pathのユースケースは意外と多い印象を受けました。

プロダクトコードを書く上で汎用化/抽象化を行うことは私たち開発者が常に意識すべきことの1つです。 key pathはそのための1つの選択肢になると思い興味を持ちました。

PixarのようなグラフィックをSwiftで実現する

@Michael Petrie

出典 : https://speakerdeck.com

弊社ZOZOテクノロジーズのMichael Petrieの発表です。

f:id:vasilyjp:20190401102349p:plain

Swift実装のレイトレーシングを使って3Dレンダリングされた1本のショートムービーからこのセッションは始まりました。

Swiftでレイトレーシングの実装ができること、それもMetalなどのフレームワークが使われていないことに驚いた方も多いのではないでしょうか。まさに自分もその一人です。
サンプルコードを眺めているとimportされているのはFoundationのみであることに気づきます。
私たちが普段アプリ開発をする際は多くのライブラリやフレームワークをプロジェクトに取り入れその恩恵にあずかっています。しかしながら、Swift言語を深く知ることでレイトレーシングというPixarで使われている技術が自前実装で実現可能ということを知りとても刺激を受けました。

私たちiOSエンジニアが当たり前のように使っているSwiftでこんなことができるのかと学習意欲を掻き立てる素晴らしい発表内容でした。

Michael Petrieの発表はTwitterで話題になっていたほか、公開されたサンプルコードは翌日のGitHubのトレンド入りするなど、5分という短い時間の中で大変注目を集めていました!

以下、発表を終えたMichael Petrieのコメントです。

Understanding a concept, and being able to articulate it in a way that is easy to understand are two entirely different things. Presenting at try! Swift was an opportunity to practice the latter, one for which I’m very grateful.

Presenting on stage has highlighted the importance of being able to clearly explain what I know and have learnt. Through whatever means available, I think this is something every programmer should aim to do.

ポートレートモードを自作しよう

@Rina Kotake

出典 : https://speakerdeck.com

Swiftを使って2次元画像の背景をぼかすという発想がそもそも自分の中になく、アウトプットとしてのクオリティも大変素晴らしかったことからとても興味深いセッションでした。

深度情報を持たない画像に対してセグメンテーションを行う場合は機械学習を利用するしかないと思っていましたが「GrabCut」という手法を用いることで綺麗に画像の前景抽出を行うことができることを初めて知りました。

f:id:vasilyjp:20190401102442p:plain

2D画像は深度情報を持たないから背景をぼかすことはできないではなく、成し遂げたい課題に向かってtry!した発表内容は本イベントに相応しいものだと感じました。

魔法の法則

@Dave DeLong

Ex-Apple iOS EngineerのDave DeLongさんの発表です。
彼の好きなSF小説作家ブランドン・サンダースンさんが掲げる3つの法則を魔法の法則と題し、どうしたら素晴らしいユーザー体験が実現できるかを発表されました。

f:id:vasilyjp:20190401102535p:plain

とても印象的な内容だったので以下に3つの魔法とその解釈を記載いたします。 この3つの魔法の法則に従って行動すれば自ずと素晴らしいものになるとまとめられました。

【1】作者が魔法で満足のいくように葛藤を解決する能力は、読者がその魔法をどれだけよく理解しているかに正比例します。

これを普段私たちが開発するサービスやプロダクトに置き換えて考えると次のように言えると思います。 ある問題を解決するために新しい機能や改善を行ったとき、ユーザーが真に幸せになるためにはユーザーがそのことを正しく理解できていないといけない。すなわち、私たち開発者はユーザーがどんなことを行いたいのか、どんな問題を抱えているのかを適切に理解・想定しその最適解をサービスに組み込んでいく必要がありそのガイドを示すべきだと。

【2】制限は権力より重要

Dave DeLongさんは「できないことはできることよりも面白いことが多い」と述べられていました。 アプリの開発をするにあたっては多くの制限に直面します。時間、人数、能力、、、 私たち開発者は多くの制限がある中でどんな未来を実現すべきかを考え、常に最良の選択をする必要があります。 ただこうした多くの制限の中でこそ創造性が発揮され、時には思いも寄らない素晴らしい未来が実現するんだと述べられていました。

【3】新しいものを追加する前に、すでに持っているものを拡張してください

何か全く新しいものを追加することだけがユーザーを喜ばせるわけではなく、ある1つの機能に関して常に奥行きを加えることで、確実にユーザーを喜ばせることができる。 つまり、一見単純に見えるものが実は非常に奥深く複雑性がありニュアンスの多いものだということを発見した時にとてもワクワクするのだとDave DeLongさんは述べられていました。

f:id:vasilyjp:20190401102622p:plain

サービスの開発者なら誰しもがユーザーを魅了する素晴らしいものを作りたいという気持ちがあるかと思います。
どうしたらユーザー体験が向上するのか。どうしたらユーザーは満足するのか。
絶対的な答えがない中で私たち開発者は常に試行錯誤しベストを尽くしています。
本セッションではそのような開発者への行動指針が提示されたように感じ深く共感するものでした。

おわりに

try! Swift 2019 Tokyoに参加して改めてSwiftでできることが年々増えているように感じました。
セッションではServer Side Swiftの話を始め、ハードウェアハッキングやレイトレーシングの話などiOSアプリ開発の枠を超えた発表が多い印象を受けました。
また、OSSとしてコードを公開したりデモアプリを作ったりといった発表も多く発表から自身のアウトプットに持っていくスピーチはどれも洗練されたものでした。
たくさんの刺激や学びを得ると共に、来年こそはあの場所で発表したいと強く思いました!

f:id:vasilyjp:20190401103936p:plain

www.wantedly.com

カテゴリー