こんにちは、オートレイアウト作ったマン の @inamiy です。
オートレイアウト○○マンが全員集結したMARVEL映画に出るのが将来の夢です。
さて先日、2017年9月15-17日の2.5日間にかけて、iOSDC Japan 2017というiOSの一大イベントが、早稲田大学理工学部・西早稲田キャンパスにて開催されました。
昨年に引き続き、第2回目の開催で、総勢800名が参加されたとのことです。
スピーカーの人数も倍増して、大成功した昨年の2016年をさらに上回る規模となりました。
そんな中、私は今年のテーマとして、「Auto Layoutのアルゴリズム」という若干マニアックな話を選びました。
今年は4トラック同時進行ということもあり、実際にセッションに集まるのは100〜200人くらいだろうと想像していましたが、タイムスケジュールが公開されると、まさかのキーノート登壇!(トップバッター+同時間帯の登壇者なし)
本来であれば、スピーカー冥利に尽きる最高のシチュエーションなのですが、いかんせん内容が小難しいだけに、開幕早々いきなりお通夜にならないか、心の中では大いに心配していました。
・・・で、案の定、発表後には若干RIPなムードが漂ってしまい、去年の自分の発表に届かなかったという無念さがありますが、今年もベストトーク賞7位(?)に入賞させていただいたり、GitHub Trending 1位を取れたり、一部の方々にはしっかり刺さってくれたので、なんとか無事に発表できて良かったです。
今年もイベントを運営して下さったスタッフの皆様と、イベントを盛り上げた参加者の皆様には厚く御礼申し上げます。
-
スライド
-
動画:
-
GitHub
-
当日の様子・感想ブログ
なお、昨年のビットコインの賞金について、コメントは差し控えさせていただきます。
発表で伝えたかったこと
当日の発表では、Auto Layoutを「線形計画問題」として捉え、元の論文に沿って、「シンプレックス法 → Cassowaryアルゴリズム」の順で、アルゴリズムを解説しました。
当日のスライドに日本語要約がまとまっていますので、論文と照らし合わせながら読むと分かりやすいと思います。
さらに深く学びたい方は、当日解説できなかった**オープンソース版(inamiy/Cassowary)**を直接ご参照ください。
ソース内にコメントを多く記述しているので、コードを読むだけでも理解が深まると思います。
また、従来のOOPベースのCassowary実装をさらに発展させて、Swiftらしい、型安全な設計 を心がけましたので、そちらにも注目していただけると嬉しいです。
ちなみに、プラットフォーム別の実装は、overconstrained というサイトにまとまっています。
後日談として、AndroidのConstraintLayoutも似たような仕組みで動いているようで、Webの世界でも制約ベースCSSの可能性について触れられていることから、CassowaryはUIに携わるエンジニアなら知っておいて損のない知識 だと思います。
一方で、今回の私の発表が至らぬばかりに、数式に対して抵抗を感じてしまった方も少なくないと思います。
実際のところは、
- 難しい数学はほとんど使われていない(高校で学ぶ行列計算が分かればOK)
- Auto Layoutは数学的に美しい (人類が使うにはまだ早いけど)
- 裏側の仕組みが分かると、Auto Layout(を考えた人・作った人)に感謝できる
- 要するに、Auto Layoutは実はすごい!
ということで、ぜひまたスライドを振り返ってもらえれば幸いです。
あと最後に、毎日使うAuto Layoutに日々感謝の気持ちを忘れず、1つ1つ真心を込めて制約を付けていきたいものですね!
参考文献
-
Auto Layoutの由来がCassowaryである情報元
-
Cassowary
-
線形計画問題(シンプレックス法)
-
Auto Layout + DSL復習
- Auto Layoutガイド:Auto Layoutの概要
- robb/Cartography (Auto Layout DSL in Swift)