🎤

iOSDC Japan 2024 に登壇しました

2024/09/04に公開

こんにちは、クラシルリワードのiOSエンジニア uetyo です!

国内最大のiOSカンファレンスである iOSDC にルーキーズLT枠で登壇しました!今回は登壇に向けて行った準備やプロポーザルの選定、そしてコミュニティ活動を全力で取り組んだことによってどのような変化が生まれたのかを深掘りしていきます。

もしまだセッション見てないよ 🙋 という方がいましたら、ぜひ見ていただけると嬉しいです!

これからの時代の新標準!Apple製テストフレームワーク「SwiftTesting」への移行とトラブルシューティング
時間:5分(ルーキーズLT枠)

https://fortee.jp/iosdc-japan-2024/proposal/8496e77b-7ff6-46b1-aa60-66d7221f5575

登壇経緯 🗣️

Swift5.10 がリリースされ、程なくして次のリリースは Swift6 になるという話が舞い込んで来ました。

https://forums.swift.org/t/swift-6-0-release-process/70220

クラシルリワードでは積極的に新しいSwiftバージョンへの対応を進めており、Swift Concurrency ベースでアプリを作成していることもあり、Swift6についても早期対応を計画していました。今か今かと仁王立ちして待っていたときに、ふと疑問に思ったのが従来のテストフレームワークであるXCTestです。

XCTestは太古の昔、Objective-Cでアプリを作っていたころに登場したフレームワークであり、Concurrency対応しているものの今の時代には決して書きやすいとは言えないAPIで提供されています。そんな中Appleは新たなテストフレームワークとして SwiftTesting を公開し、徐々に盛り上がりを見せていました。

// XCTest
XCTAssertEqual(x, y)
XCTAssertTrue(x)
XCTAssertFalse(x)
XCTAssertNil(x)
try XCUnwrap(x)
// ...などなど40個ほど存在(XCTAssertってキーボードの運指的にも打ちづらいですよね)

// SwiftTesting
#expect(x == y)
#expect(x)
#expect(!x)
#expect(x == nil)
try #require(x)
// expect と require だけ覚えれば良い!

調査したところ「Xcode15から利用できる」「Swift 5.9以上が必要」という条件で、今のクラシルリワードの開発環境に問題なく導入できることが判明しました。

Swift6に完全に対応していくのであれば避けて通れない問題だったので、チームに相談、置き換えた際の差分の説明、試験的な導入を経て、今後は SwiftTesting でテストを書いていこうという意思決定をしました。(意思決定までの流れや具体的に行った内容は9/9(Mon)に予定している CA.swift x dely After iOSDC LT Night にて詳しくご紹介します)

同じ時期に iOSDC のプロポーザルが募集開始されたので、この機会にプロポーザルを提出したところ採択され登壇しました!

プロポーザル内容の選定 📖

iOSDCのプロポーザル採択率は非常に低いことは知っていたので、戦略的にプロポーザルを作成することにしました。

  • メインのトピックは SwiftTesting だが、20分枠にするにはインパクトが小さい
  • 発表は8月末なので、3ヶ月の猶予があり、移行作業も大詰めを迎えると予想される
  • 何らかのトラブルが発生することを見越して、トラブルシューティングを用意

時間枠はルーキーズLT枠を利用することで解決としました。発表内容は移行作業とメリット・デメリット、Xcode15環境での利用に絞ってプロポーザルを作成しました。

最終的なプロポーザル内容は以下になりました。

【タイトル】
これからの時代の新標準!Apple製テストフレームワーク「SwiftTesting」への移行とトラブルシューティング

【詳細】
Swiftでテストを書く際、Xcodeに組み込まれたテストフレームワークである XCTest を利用することが多いかと思います。しかし、XCTest は当初、Swift ではなく Objective-C でテストを書くことを目的として作成されました。そのため、Swift5.5 から導入された Swift Concurrency への対応が不十分であるという問題点があります。

そこで登場したのが新しいテストフレームワークである SwiftTesting です。
SwiftTesting は、非同期プログラミングをより効果的にテストできるように設計されており、Swift6 からはこのフレームワークの利用がデフォルトになると考えられています。

このLTでは、以下の内容について紹介します。

・SwiftTesting と XCTest の違い
・SwiftTesting への移行作業
・SwiftTesting を使用する際のベストプラクティスとトラブルシューティング

コミュニティ活動による影響 🍣

学生時代のことから地域のITコミュニティに所属して活動していましたが、流行り病の影響もあり上京したあとは疎遠になっていました。iOS歴も短かったため少し億劫に考えていた時期もありましたが、半年ほど前に try!Swift にスタッフとして参加したことでiOSのコミュニティの良さに気が付き積極的に勉強会に参加するようになりました。

それからというもの、1ヶ月に2回以上のイベントに参加し、最新の情勢や他社の動き、なにより参加者の交流が大幅に増え顔見知りの人も多くなってきました。そのおかげもあり、登壇資料の相談や懇親会でより密にコミュニケーションを取れるようになった半年間でした。もちろんその活動の中で事業に活かせそうな話なども多く持ち帰ることができました。

これまで個人での参加は多少ありましたが、会社として参加することはありませんでした。しかし、対外活動を地道に続けた結果、クラシルリワードのiOSチームとしても、公式に対外活動を進める体制が整いつつあります。今回、iOSDCにチームとして参加できたことは、大きな前進を果たせたと感じています。

今後も積極的に関与していきつつ、チームにも新しい文化を作っていければと思います。

登壇してみて 🤗

ものすごく楽しかったです!冒頭でサラッと流す予定だったところで時間を使いすぎたため最後のページをめくれなかったのが心残りですが、大きな事故などもなく発表することができました。

SwiftTestingへの移行率はプロポーザル投稿をしたタイミングから5%→90%まで大幅に推進し、ある程度知見もたまり、発表内容についても理解を深めたうえで挑むことができました。

なによりもこういった大きなカンファレンスに登壇することは幼少期から目指していたことでもあったので5分間と短い時間でしたが、貴重な経験を積むことができました!

来年以降は20分や40分に挑戦していきたいですね!

また、僕個人としても、delyのiOSチームとしても、こういったカンファレンスやイベントへの参加・登壇、勉強会の企画をどんどん進めていくので、乞うご期待ください 👋

dely Tech Blog

Discussion