ルーキーズLT(5分)

RxSwiftプロジェクトでSwift Concurrencyを利用する

coffmark_ coffmark

RxSwiftプロジェクトでも積極的にSwiftUI, Swift Concurrencyを取り入れている機会が増えてきたのではないでしょうか。
またSwiftUIを使用している画面ではSwift Concurrencyを使いたい場面もあるのではないでしょうか。

例えば.refreshable(action:) View Modifierでは、非同期関数を受け取ることができるので、async/await関数を使用したい時があるとおもいます。

このトークでは、既存のRxSwiftベースで書かれているプロジェクトにSwift Concurrencyを取り入れて、SwiftUIで使用する例を紹介します
この発表で、RxSwiftベースで書かれているプロジェクトにもSwift Concurrencyを取り入れてもらう参考になれば、嬉しいです。

5
レギュラートーク(20分)

WEARアプリのロック画面ウィジェットを導入するまでに立ちはだかる3つの壁

iOS16で発表されたロック画面ウィジェットは、アプリへのアクセスを便利にし、ユーザの定着率向上の可能性を秘めています。しかし、未発達であることから価値や利益の伝え方が難しく、社内アプリへの導入も順調ではありませんでした。導入事例が少なく有効性を示せないため、チームメンバーの納得を得るのは困難です。

これらの課題に対して、目的の方向転換や、WEARアプリに適したアイディアの提案など対策を講じます。このトークでは、ロック画面ウィジェットの技術調査から実装、提案、そしてリリースまでの過程で直面した3つの壁とその対処法をご紹介します。

  • 1つ目の壁:知見の少ない新機能の情報収集
  • 2つ目の壁:チームメンバーに納得してもらうこと
  • 3つ目の壁:複数の職種のコストを考慮すること
レギュラートーク(20分)

今こそ、WindowsからMacへ 〜Game Porting Toolkit入門〜

赤田 進

WWDC23でWindowsゲームをMac向けに移植するためのツールキット「Game Porting Toolkit」を発表しました。
このGame Porting Toolkitを使ってWindowsの人気ゲームをmacOS上で動作させたという報告が続々と寄せられています。
本気でゲーム領域に踏み込んできたなと感じてワクワクして夢中で取り込みました。

このトークでは皆さんが疑問に思う内容をキャッチアップして、どこにハマり、どのように手探りで調べたかということをお話させていただきます。

・英語に自信がないけど、どのように情報入手する
・どのような技術で成り立っているのか?
・開発環境構築は簡単なのか?
・Windowsゲームのパフォーマンスはいかに?!
・日本語環境でも問題ない?
・ゲーム以外Windowsアプリも動作する?

3
レギュラートーク(40分)

AI時代に生きるiOSエンジニアの歩き方

Yuta Koshizawa

ChatGPTを筆頭にAIが猛威を振るっています。特に、3月にリリースされたGPT-4は強力で、分野によっては人間以上のパフォーマンスを発揮します。試しにGPT-4にある程度の複雑さと独自性を持ったiOSアプリを作らせてみたところ、なんと1時間で基本部分が完成しました。

しかし、現時点ではエンジニアが置き換えられるほどの直接的な脅威ではありません。むしろ短期的には、コードを書ける人はAIによってその力をブーストされ、書けない人との格差はより大きくなるでしょう。そして、普段からAIを活用しアンテナを張っておくことは、将来さらに大きな波がやってきたときに、素早く環境に適応して淘汰から逃れる助けとなるでしょう。

本トークでは、ChatGPT・GPT・GitHub Copilot・LLMなどについて解説し、今AIは何がどこまででき、どのように活用できるのか、具体例を挙げて示します。

13
ポスターセッション

これからUICollectionViewを実践活用する人のためのガイド

usamik26 宇佐見 公輔

iOSでグリッド状のレイアウトを実装するにはUICollectionViewを使います。コンテンツの配置が柔軟に行えるのが特徴です。

しかし、その柔軟性ゆえに、実装の難易度は高めです。また、iOS 13や14で新しい実装方法が追加されて便利になりましたが、それも簡単とは言えません。雰囲気で使うことはできても、ちゃんと理解しているかは自信が持てない人も多いのではないでしょうか。

そこで、このポスターセッションではUICollectionViewの基本的な考え方を整理してお伝えします。

• UICollectionViewの最小構成
• データソース(UICollectionViewDataSourceやDiffableDataSource)
• セル(CellRegistrationやContentConfiguration)
• レイアウト(Compositional Layout)

5
レギュラートーク(20分)

UICollectionViewのセルの実装にSwiftUIを活用する

usamik26 宇佐見 公輔

最近のiOSアプリ開発では、UIKitとSwiftUIを併用するパターンが増えています。従来のUIKitをベースにしつつ部分的にSwiftUIを使うことで、開発効率の良さなどの恩恵を得るという考え方です。

しかし、併用のしかたに注意が必要な場合があります。そのひとつがUICollectionViewのセルです。データ表示のパフォーマンス向上のため、セルには再利用の仕組みがあります。ただ、その仕組みの影響で、セルのUIをSwiftUIで実装する場合には注意が必要になってしまいます。

iOS 16で、UIHostingConfigurationが導入されました。これを利用するとセルの実装にSwiftUIが使えます。さらに、ObservableObjectを使ってデータとセルとを直接バインディングできるため、セルをUIKitで実装する場合よりも便利になります。本トークではこれらを解説します。

7
レギュラートーク(40分)

ライブラリやフレームワークに頼らない DI と Mock の流儀

orga_chem Kuniwak

みなさんはテストをする際に DI や Mock を使いますか?それにはライブラリやフレームワークを使いますか?
実は私は DI も Mock も使いますがそれにライブラリとフレームワークはあえて使いません。ライブラリやフレームワークを使わないことでコードの声により敏感になれるからです。

この発表では DI や Mock の基本からライブラリ・フレームワークを使うメリットとデメリットを説明し、ライブラリ・フレームワークに頼らない開発方法を紹介します。あなたもコードの声に耳を傾けてみませんか?

12
レギュラートーク(20分)

もう限界だ!6年もののアプリのリアーキテクト戦略

daikimat 松元 大樹

長年開発しているアプリは、さまざまな問題により開発速度が低下していきます。
日々の開発によりコードの複雑性は増していきます。さらにドメイン知識のあるメンバーの交代、世の中の開発トレンドの変化、言語の進化など、取り巻く環境の変化にも対処しなければ中長期的にアプリを通して価値提供することが困難となります。
本トークでは積み重なり続ける問題の圧に対して、リアーキテクトを行ったチームの話をします。
モダンな技術を取り込むためのモジュール分割、議論を繰り返さないためのADRの採用、新機能開発とリアーキテクトの並行開発方法等
時系列に何が起きたのかストーリー形式でお伝えします。
本トークを通じて、つみ重なる問題の対処方法が分からなかったチームが、リアーキテクトを通してどう変わったのか擬似体験することができます。
これからリアーキテクトを検討している方が未来を想像できるような内容を提供します。

2
レギュラートーク(40分)

構文木とは何か 〜来るべき Swift Macro に備えて〜

orga_chem Kuniwak

来るべき Swift Macro に備えて Swift の構文木について学びましょう。この発表の前半では Swift Macro を定義する際に理解が必要な「構文木」とは何かを初心者向けに説明します。後半では構文木の活用方法として、マクロの定義や、静的解析・フォーマッター・コード生成のやり方を説明します。ぜひこの機会に構文木を学び、Swift Macro に備えつつ引き出しを増やしましょう。

7
レギュラートーク(20分)

UITableViewからリスト形式のUICollectionViewへの移行

0si43

iOS 14でUICollectionViewのリスト形式表示が追加されました。これはCompositional Layoutを使ったもので、UITableViewとほぼ同じ画面を実装することが可能であり、さらに柔軟性や拡張性に優れています。現在はAppleもUITableViewよりはUICollectionViewを使う方を推奨しています。本セッションでは、UITableViewで実装されているコードをUICollectionViewにリファクタリングした際の経験から学んだことについてお話しします。

1
レギュラートーク(20分)

Apple/Google/twitter連携全部やる

0si43

かつてnoteアプリにはソーシャル連携がありませんでした。メールアドレスとパスワードによる認証のみ。しかしこの半年で、Apple/Google/twitter連携を追加しました。本セッションでは、その経験を元にして、下記の内容を話します。

  • ソーシャル連携の実装・デバッグ
  • プラットフォームごとの違い
  • Sign in with Apple実装時の思わぬリジェクト
  • ソーシャル連携のユーザー体験を改善するパスワードレス方式
2
レギュラートーク(20分)

Swift Concurrencyサバイバルガイド

0si43

2021年に登場したSwift Concurrency。noteでは2023年に入り、本格的に導入を進めました。
「ゆーてasync/awaitつけるだけでしょ? 余裕、余裕」
そんなことを思いながらSwift Concurrency化したところ、全く動きませんでした……本セッションではnoteアプリへのSwift Concurrency導入の経験から、ベストプラクティスを探っていきます。

  • @MainActor 地獄について
  • VIPERでのConcurrencyの適用
  • テストコードのConcurrency化
  • Taskへのコンテキスト引き継ぎ(@Sendable)
8
レギュラートーク(40分)

わたしたちのアーキテクチャ選択とこれから

ohzono_dev ohzono

9年前から開発している弊社のiOSアプリは大規模なリファクタリングの経験なく、今まで開発してきました。現代のビジネス環境では、高品質でメンテナンス性の高いアプリケーションの開発と維持が求められています。そのようなニーズを満たすために、わたしたちのチームはVIPERアーキテクチャを今年から採用しました。このセッションでは、どのようにアーキテクチャを選び、どのような実践をしているかを紹介します。

この発表は三部構成となっています。
第一部:なぜVIPERを選択したのか?
第二部:VIPERアーキテクチャの実践
第三部:実践で得られた学び

この発表が皆様のチームが未来の開発チャレンジに向けて最適なアーキテクチャを選択し実践するための一助となれば幸いです。

1
レギュラートーク(20分)

AndroidエンジニアからみたiOSアプリ開発スタートダッシュ IDE編

ohzono_dev ohzono

AndroidエンジニアがiOS開発に挑戦する際、一つの大きな障害となるのがIDE(統合開発環境)の違いです。慣れ親しんだIDEからの移行は開発者にとって1つの挑戦となります。

本セッションでは、AndroidエンジニアからiOS開発に転向した私がキャッチアップしていくなかで学んだことを、IDEに絞って解説します。
Androidエンジニアに限らずiOSアプリ開発を新たに始めたい方に向けて、iOSアプリ開発のはじめの一歩を力強く、後押しします。

ルーキーズLT(5分)

海外未経験者が個人開発アプリによって2ヶ月間で英会話の不安を解消させる

WWDC23への現地参加が決まり、喜びとともに英会話への不安が押し寄せます。英会話のレッスンを受けても上手く話せず、結果的に英会話への心理的ハードルが高まってしまいます。まずは話す前に英語に慣れる必要があると感じました。

そこで、チャットや交換日記を通じて、英語のレビューが得られるChatGPT APIを用いたアプリを開発しました。ChatGPTに役割を指示できるため、会話の種類を増やすことが可能です。また、アプリの読み上げ機能を活用することで、リスニングやスピーキングの特訓も可能です。これにより、心理的ハードルを下げ、最終的に現地で少しずつ自分から話すことができました。

本LTでは、アプリの内容やその影響、現地での対話の成果などを紹介します。

  • ChatGPT APIを活用した英会話特訓アプリの紹介
  • 現地での対話の内容
  • 心理的ハードルの変化(Before & After)
2
レギュラートーク(20分)

コミュニティで生まれる技術同人誌〜12人による大規模プロジェクトの成功の裏側〜

wiroha wiroha

アウトプットはどんなエンジニアにとっても重要で、学びや成長の機会を生み出すものです。
私は今年2月にCode Polarisというコミュニティで技術同人誌の執筆を呼びかけ、合同誌を制作しました。12人で書き上げた技術書の頒布数は185部にも達する大成功となりました。
はじめて出会うメンバーが大半の中で大人数プロジェクトを成功へと導いた裏側を紹介します。
本トークにより「もっとアウトプットをしたい」「技術コミュニティに参加してみたい」と思っていただけたら嬉しいです。

トピック
・執筆者を募る説明会の実施
・自信をつける投票制度
・GitHub Projectsを用いたプロジェクト管理
・GitHub Codespacesによる執筆環境の統一
・テイストを揃える最初の1章
・モチベーションを保つ細かな締切設定
・大量のレビューに対応するルールの構築
・やり抜くメンタルの持ち方
・得られたもの

2
レギュラートーク(40分)

SwiftUIのデザイン変更をXcode PreviewとCIで自動検知する方法

laprasDrum らぷらぷ

Xcode Previewの登場により、SwiftUIで作成したUIパーツをXcode上でプレビューすることが簡単になりました。UIパーツに渡すデータパターンを複数用意すればUIパーツの実装に問題がないか視覚的にかつ網羅的にチェックしやすくなりました。
Xcode Previewの力はそれだけに留まりません。UIパーツを画像ファイルとして出力することでプログラムの入力情報として扱うことができます。これによってUIパーツのデザインが変更されたことを目で確認することもできますし、CIを使ってデザイン変更に関する不具合を検知するための自動化に繋げられます。
本セッションではSwiftUIベースのサンプルアプリを使ってCIによるデザイン変更の検知がどのように実現されるかをお見せします。

7
レギュラートーク(40分)

ZOZOでのGitHub Copilot活用事例大公開!

Horie1024 Ryosuke Horie

ZOZOでは、GitHub Copilotを全社へ導入しました。iOSやAndroidからSREまで様々な領域のエンジニアがGitHub Copilotを使用して開発しています。本セッションでは、GitHub CopilotのZOZOでの活用事例を時間の限り紹介します!

例えばiOSアプリ開発では、UIKitなどのフレームワークの使用方法の提示、新規画面作成時に必要なコードの提案、API設計書からSwiftのコードへの書き起こし、既存のコードのリファクタリングなどのタスクでCopilotがどのように効果を発揮しているかを紹介していきます。

加えて、GitHub Copilotを活用していくためのtipsを紹介することで、開発作業をより効果的で効率的なものにする一助となればと思います。

  • GitHub Copilotの概要
  • 導入背景と導入のプロセス
  • ZOZOでの活用事例の紹介
5
ポスターセッション

SwiftUI時代のExtension Programming

417_72ki 417.72KI

SwiftUIでは宣言的UIの特性から、複雑な画面ほどネストが深くなりがちです。
このような場合、コンポーネントをfunction等に分割してもネストの深さからは逃れにくいため、可読性が低下してしまいます。

そこで筆者がExtension Programmingと呼んでいるSwift独特のプログラミング手法をご紹介します。
computed propertiesやfunctions、inner classなどをextensionに分割することで、ネストを浅くできたり役割やアクセシビリティによってグルーピングすることができたりします。

Swift 2.xくらいの頃から存在した手法ではありますが、SwiftUIで開発する機会が増えてきた今その有用性を改めてお伝えできればと思っています。

3
レギュラートーク(20分)

Swift UIとBFFで実現するServer-Driven UI

Swift UIの登場によって、私たちはデータの画面反映に関するロジックの管理から解放されました。

これに加え、複数のAPI結果を画面ごとのStateに変換するまでの処理を、サーバーサイドにまるっと移譲することで、
アプリは最適なUXの提供に専念できるだけでなく、ストア審査やリリースから独立した変更が可能になります。

本トークでは、AirbnbやLyftなどの海外企業で導入されているServer-Driven UI アーキテクチャを、
タップルでSwift UIとBackends for Frontends(BFF)を活用して実現した事例や具体的な運用についてお話しし、
ネイティブアプリの複雑性や開発生産性の向上の悩み解決にむけた新しい手段を紹介します。

2