😊

iOSDC 2021 で「Swift async/await を支えるモナド、継続、コルーチン」を発表 + アンカンファレンス登壇しました

2021/09/20に公開

こんにちは、@inamiy です。
今年も iOSDC Japan 2021 (2021/09/17-19) がニコニコ生放送とZoom (アンカンファレンス用) 上でオンライン開催され、2回お話しする機会をいただきましたので #iwillblog します。

9/18 Day 1 登壇

今年の登壇では、Swift 5.5 がまもなく正式リリースされる今現在、最も旬な 並行処理 (Swift 5.5 Concurrency) を題材に選びました。
1. async/await 、2. Structured Concurrency 、3. Actor の三大テーマを一気に言語仕様に取り入れる野心的な取り組みの中、私の発表では主に 1. と 2. についての 関数型プログラミングによる理論的解説 に務めました。

内容を簡単にご紹介すると:

  • async/await に限らず throws/try や Optional chaining を含めた 言語仕様キーワード による 計算効果 (Computational Effect) 全般を理解するために、 「モナド」「継続・CPS」 の2つのアプローチを紹介
  • モナドには合成の問題がある自由モナド(構文)とその解釈を分離する
  • CPS による Structured Concurrency
  • 自由モナドを用いた 協調的マルチタスク(コルーチン)
  • async/await 構文は モナドや継続・CPSを通じて自作することも可能

今年も擬似 Swift による関数型プログラミングを用いながら、ざっくばらんに解説しました。
詳しくは、当日のスライドをご参照ください。

前半の内容に関しては、こちらの記事を先に読んでおくと、より理解が深まると思います。

また、Swift 5.5 Concurrency については、同イベントで @stzn3 さん @koher さんらの詳細な発表がありましたので、合わせてご紹介します。

Swift 5.5 Concurrency は Functional Reactive Programming (RxSwift, ReactiveSwift, Combine などの FRP) に取って代わる、新しい並行計算の仕組みです。
今後の iOS/Swift 開発のありとあらゆる場面で活躍する機能 なので、ぜひとも抑えておきたいテーマです。

9/19 Day 2 アンカンファレンス

実は、今年の iOSDC が始まる直前に、ふと Swift 5.5 Concurrency を使った新しい状態管理フレームワーク を作ろうと思い立ち、 Actomaton (Actor + Automaton) というオープンソースをリリースしました。

Actomaton は、Coreコードがわずか400行程度でありながら、最近流行りの swift-composable-architecture (Swift版 Elm Architecture) に近い機能性を持っているのが特徴です。
Combine (FRP) を捨てて Swift 5.5 Concurrency に(ほぼ)完全移行したフレームワーク としては、おそらくこのオープンソースが Swift で初になります。

過去に iOSDC 2016, iOSDC 2020 でFRPを使った同様のアーキテクチャーについて解説しており、今年はすでに前述の登壇内容で決まっていたものの、せっかくの機会なので別枠でも話したいということで、急遽、iOSDC恒例の 「アンカンファレンス制度」 を利用して即興トークを行うことにしました。

こちらの会では、個人的に初めての試みながら、約35名の参加者にご参加いただきました。
話したい内容が多すぎるあまり、勢い余って時間が過ぎ、 Zoom から強制退出されてもしばらく一人で話し続けてしまった のは、今となっては良い思い出です。

Actomaton とその中で使われているテクニック (CasePaths など) については、後日、別記事で紹介したいと思います。

アンカンファレンスといえば

sonsonの古い2tchのソースコードをみんなで眺めながら,15年間のiOSアプリの開発の歴史を語ります.iPhone SDKが公開される前の野良開発コードから,Swiftまで,Appleの審査のために,やる気を完全に打ち砕かれた開発者の心の叫びをお聞きください.

Day 1 にセッティングされた、こちらのモブプログラミングイベントに参加しました。
概要から漂う終活感を見届けに、少しだけ顔を出す予定のはずが、そのまま Day 1 の LT 時間を忘れてしまうほど入り浸ってしまいました。

古き悪しき Objective-C 時代の手動 retain/release@synthesize に懐かしさを覚えたり、昔の Xcode と skeuomorphic iOS デザインに歓声が上がったり。
そこには、 10年前のタイムカプセルを開いた良い大人たちが、若い力を借りながら、動かなくなった2chアプリを直していく感動のドラマ がありました。

開発環境は MacOSX 10.8 + Xcode 4.6 / iOS 6.1 Simulator を使っていたでしょうか。
機転を利かして2chのエンドポイントを変更したり、どういうわけか OS から呼ばれない viewWillAppear を手動で呼び出す などの力技を駆使するシーンはさながらプロジェクトX。
2chのスレッド表示だけでなく書き込みも成功した瞬間には、笑いが止まりませんでした。

気になった登壇

前述の通り、今年の iOSDC では Swift 5.5 Concurrency の話題を重点的に観てきました。

一方、 SwiftUI をプロダクションに取り入れた話 や、iPhone 12 Pro から搭載された LiDAR スキャナー を使った話題が多かったのも、とても印象的でした。

SwiftUI については、最初の頃に触った iOS 13 (とその数々のハマりポイント)の知識で止まっていて、今回の皆様の発表に刺激を受けました。
弊社 dely でも徐々に SwiftUI の導入を開始しているので、これからキャッチアップしていきたいと思います 💪

全体の感想

今年もニコニコ生放送による弾幕の嵐で、大いに楽しませていただきました。
立木文彦さんによるナレーションも最高で、個人的に「モナド」の発声にドスが効いていて痺れました。

途中、機材やネットワークトラブルが一時的に発生する場面もありましたが、笑って許せるところがiOSコミュニティの良さだと思います。
無事にイベントが終わり、流れるエンディングに今年の祭りも終わった気分です。
運営スタッフ・スピーカー・参加者の皆様、おつかれさまでした & ありがとうございました!

来年こそは、またオフラインの場で集えると良いですね。
また次回も、何か新しいネタを温めておきたいと思います。

Discussion