こんにちは、開発本部の高井です。
メドレーは、去年に引き続き8/30〜9/2に早稲田大学で開催された iOSDC Japan 2018(以下iOSDC)に協賛しました。
みなさんご存知かと思いますが、iOSDCは国内のiOSイベントの中ではtry! Swiftと並ぶ最大級のイベントです。
(オンライン診療アプリ「CLINICS」初期開発時からSwiftで実装しています)
メドレーは今回、シルバースポンサーとして協賛させていただきました。ブース出展はしていないのですが、スポンサー枠で私が参加してきました。
オープニングのスポンサー紹介は去年に引き続き今年も三石琴乃さんのナレーションでした!豪華です。
イベントの様子
ランチのお弁当はもちろん、朝はドーナツ、夕方のLTが始まるとビールが提供されるなど至れり尽くせりでした。セッションは最大4つが同時に進み、それに加えてアンカンファレンスと特定のテーマを設けたディスカッション企画などもあったのですが、進行も非常に円滑で非常に参加者の満足度の高いカンファレンスではないかと思います。
セッション
今年はSwiftのコンパイラのソースからSwiftの機能を解説するようなセッションがいくつかありました。去年はそのようなセッションはなかったのではないかと思います。Swiftがオープンソース化されて3年弱ぐらいになり、日本でもSwiftのコミュニティがより成熟しているように感じました。 また、機械学習などのキャッチーなトピックの話題が少し減って、業務上得た知見や設計についてなどの実用的なテーマが多かった印象でした。 特にViewの設計や実装についてのセッションが面白かったです。やはり、iOSアプリ開発ではView周りの実装が悩みの多い領域ですよね。
ここからは特に気になったセッションをいくつかご紹介します。
MicroViewControllerで無限にスケールするiOS開発
UIパーツごとにViewControllerを持たせて、一つの画面の異なる機能を複数のエンジニアで開発しやすいように実装しているというお話でした。一般的な画面単位でViewControllerを持つ実装だと、開発の人数を増やしてもコンフリクトやオーバーヘッドが発生しやすくなり、効率的に開発することが難しくなってしまいます。そのため、開発チームの規模をスケールさせることができないということからそのような方法を取り入れたそうです。
MicroViewControllerを採用したことによって、一つのアプリに20人のエンジニアを充てることができるようになったということでしたが、他にそんなところあるのでしょうか、、、という気がしないでもなかったです。ただ、数人でやっていてもコンフリクトはよく起こりますし(project.pbxproj、、、!)、機能を追加したり、削除したりということを素早く試行錯誤するのには良さそうだなと思いました。
また、ビルドの効率化のためにサンドボックスアプリを用意したり、ViewControllerのテンプレートを作って実装の効率化を図るなど開発効率向上の参考になる取り組みも多かったです。
デバイス・OSバージョンの依存が少なく、メンテナンスしやすいビューを作る
ビューの実装について起こりがちな問題とその対処法について紹介したセッションでした。特にレイアウト崩れを防ぐために意識すべきポイントについて、具体的な失敗例を示しながら紹介されていました。
UIコンポーネントのサンプル実装(https://github.com/folio-sec/Folio-UI-Collection/tree/master/Folio-UI-Collection)も紹介されていましたが、CLINICSでも共通UIをコンポーネント化して使っているので、カスタムViewの実装方法やコンポーネントの粒度などが再確認でき、非常に有益でした。また、UIのユニットテストもあり、CLINICSではあまりUI関連のテストは書けていないので参考にしたいと思います。
宣言的UICollectionView
UICollectionViewに複数の種類がある場合(よくあります!)に、宣言的な実装をすることでコードの見通しをよくする方法を提案されているセッションでした。
自分もあのswitch文をまとめようとして、うまくいかなかった経験があるのでとても興味深かったです。すぐに自分たちのコードにも適用できる実用的なセッションでした。
あとはReactorKitのライブコーディングや差分検出アルゴリズムに関連する話がいくつかあり、ちょうど業務でReactorKitとRxDataSourcesを使っているので参考になりました。
差分アルゴリズムの原理について
UITableViewなどで変更があった箇所だけを更新するのに利用される差分検出のアルゴリズムについて解説したセッションでした。IGListKitやRxDataSourcesなどで使われているアルゴリズムとAndroidのDiffUtilで利用されているアルゴリズムの原理について紹介されていました。ライブラリを使っていると、利用方法は分かるけど内部でどう動いてるかはあまり理解していないということも割とあると思いますが、その辺りを理解できると用途に応じて最適なライブラリを選択できたり、より効果的な使い方ができそうだと思いました。
5000行のUITableViewを差分更新する
差分更新のライブラリを使って多数行を更新した際に発生した問題の紹介とその原因を特定して、改善した内容についてのお話でした。採用していたライブラリはDifferでしたが、ライブラリごとの特徴やInstrumentsによるボトルネックの特定などが参考になりました。
まとめ
iOSDCは去年に引き続きの参加だったのですが、今年のセッションもどれも興味深く、勉強になることが多かったです。またセッションの裏で特定の技術についてディスカッションするコーナーができるなど年々充実してきているように感じました。また、LTのときの会場の一体感はとても良いなあと思いました。
弊社のアプリ開発でもそういった知見などを活かして開発していける仲間を引き続き募集しています! 興味がある方は、こちらからご連絡ください。