Mirrativ Tech Blog

株式会社ミラティブの開発者(バックエンド,iOS,Android,Unity,機械学習,インフラ, etc.)によるブログです

社内勉強会「Swiftの並行処理についてのセッションを見る会」を開催しました

こんにちは、クライアントエンジニアのちぎら(@_naru_jpn)です。Swift 5.5 で async/await が導入されて久しいですが、皆さま導入はされているでしょうか。プロダクトに導入して活用できればいいですが、すぐには導入できないプロダクトも多くあると思いますし、個人でキャッチアップするにも、温度感の違いや人によってキャッチアップできる分量にも差が出てくると思います。今回は社内勉強会の一環として、 Apple が公開している Swift の並行処理についてのセッションを見る会をした話を書こうと思います。

セッションを見る会をはじめた理由

Swift の並行処理についての機能は、キャッチアップしている人とそうでない人が分かれると思っています。Swift の並行処理については多くの技術記事が書かれていますが、業務にすぐには直結しない内容について技術を吸収する為にはそれなりの気持ちの強さが必要です。

一方で、いざプロダクトに導入してみようとなった際、チームの中で並行処理についての知識があるエンジニアが一人だけだったりすると会話も大変ですし、制御フローを考える上での注意点やパフォーマンス上の懸念など、あらかじめチームで話せる下地があった方が安心です。そこでミラティブでは毎週1時間ずつ、参加者を募って Swift の並行処理についてのセッションの動画を見る時間を設けることにしました。

Gather での開催

ミラティブではフルリモートで業務を行なっているので、勉強会も当然リモートで行ないます。

日頃からコミュニケーションツールとして利用している Gather を活用して、プライベートスペースで画面共有をしながらみんなで動画を見ることにしました。Gather では音声がつながっているので、セッション動画の中で気になったタイミングで一時停止して議論をする、といったことも簡単にできます。

f:id:naru-jpn:20220302154019p:plain:w400
Gather で勉強会をしているようす。わいわいしています。

「Swiftの並行処理について」セッションまとめページ

WWDC21 では多くの並行処理についてのセッションが公開されました。Apple でも「Swiftの並行処理について」というまとめページが作られていて、このページで一通りの並行処理に関するセッションが紹介されています。

developer.apple.com

セッションはいくつかのセクションにまとめられた構成になっています。

それぞれのセッションは1時間を超えるものはなく、ほどよい分量です。並行処理の基本と、新しく導入された要素を一通り知るために、セッションを上から毎週一つづつ見ていくことにしました。1

各セッションの内容と見どころ

各セッションがどういった内容なのか、それぞれ簡単にご紹介します。

Swiftの並行処理について

サンプルアプリの更新

  • Swiftの並行処理: サンプルAppの更新
    • 実際のアプリケーションのコードを新しい並行処理を使って書き直しています。書き直す過程で出てくる fix-it の誘惑に負けず自分で考えて修正せよと言うお達しがあります。

AsyncSequenceの紹介

  • AsyncSequenceについて
    • for await を使った処理の紹介。例のように、地震計だったりの計測やファイルの読み込みなどはサービスの特徴によっては使い所がありそうですね。

Appleプラットフォーム間での並行処理の実現

Swift Concurrency: 舞台裏

  • Swiftの並行処理: 舞台裏
    • GCD と Swift Concurrency の違いなど。処理の優先度の扱いの差やメインアクターの頻繁な切り替えによるパフォーマンス低下は一見の価値ありと思います。

一通りのセッションを見てみると、それぞれのセッションは関係しあっていることが分かります。

例えば「Swiftの並行処理: サンプルAppの更新」では、fix-it の誘惑に負けずになぜエラーになっているかを考えろと言っていますが、エラーの理由を考えるためにはタスクの概要やアクターの制限を知っている必要があるかも知れません。通信処理の書き換えのみであればキャンセル処理などは標準ライブラリが対応してくれますが、**Continuation で独自の並行処理を記述する場合には、タスク間のキャンセルの伝播の仕方などを知っている必要があるかも知れません。また、例えば AsyncSequence を使用した際に高頻度でメインスレッドへの切り替えが発生するような場合、アプリのパフォーマンスへの影響が事前に頭に浮かぶかも知れません。

なにを言いたいかというと、それぞれのセッションは互いに関係しているしどれか一つを見たら全てが分かるというものでもないので、興味の向いたものからぜひ見てみて下さいということです。

まとめ

セッションを見る社内勉強会を通じて、新しい技術の概要と、新しい技術について社内で話し合う下地を作ることができました。発展として、Android では Kotlin の suspendCoroutine を利用して処理を制御しているような箇所がありますが、同じような処理が Swift でもできないかという話が挙がっています。更に、実際に動作するコードに触れて知見を溜めるために、Apple の並行処理に関するサンプルコードのコードリーディングをしようという話も挙がっています。

新しい技術であっても特定の個人に説明の負担が寄ることなどがないように、チームでうまくわかりあっていきたいですね。

We are hiring!

ミラティブでは一緒にアプリを作ってくれる iOS エンジニアを募集しています!
少しでも興味を持っていただいた方はお話を聞いていただくだけでも結構ですので、気軽にご連絡ください。 www.mirrativ.co.jp

面談まではしたくないが雑談くらいならしたい、という方はこちらから!

meety.net

エンジニア向け会社紹介資料

speakerdeck.com


  1. ミラティブの iOS アプリでは Core Data は多用していないので「SwiftとSwiftUIへのCore Dataの並行処理の導入」だけは勉強会で見るのはスキップし、各自の自由課題としました。