iOSDC Japan 2021 トーク一覧

採択 他イベントOK 2021/09/17 18:30〜 Track D レギュラートーク(20分)

PickGo for Partnerの移行方法から学ぶ 既存のネイティブアプリをFlutterへリプレイスする方法

entaku_0818 遠藤拓弥 entaku_0818

PickGo for Partnerは配送ドライバーのためのアプリとして2015年からiOS/Androidアプリを提供しています
そして2021年5月にFlutter化とFlutter版への完全移行を実施しました。
WebViewを利用しており、計画的には問題なく移行できる想定ではあったものの、既存で今もなおユーザーが利用しているアプリを移行するということはとても大変なもので技術力と精神力を大きく使ったと振り返ると思います。今回この移行で培った知見をまとめて皆様に共有することで、同じようなことをする方がより省力で移行が実現できるようにまとめたものです。

他イベントOK LT(5分)

スナップショットテスト導入時の意外な罠

yajima_toshu yajimatoshu yajima_toshu

swift-snapshot-testingの簡単な紹介と、導入の際に私が躓いたポイントについてお話しします。
以下に沿ってお話ししていく予定です。
1.swift-snapshot-testingの導入方法
2.スナップショットテスト実行時に注意したいポイント
3.スナップショットテストをCIで実行する際の設定

2
他イベントOK LT(5分)

ビジネスロジックのサイズ肥大化を回避する方法について考える

Byungjun Park

タクシー配車アプリ「GO」の開発現場は常に複数のビジネス要件による開発案件・リファクタリングタスク・改修タスクが動いてます。
JapanaTaxi X Mov = GOになり、より複雑な要件が加わりビジネスロジックのサイズは爆発寸前です。
GOチームでは各機能単位のコードサイズを抑制するため効率的なアーキテクチャを導入し細かく分けたコンポーネント間でコミュニケーションをさせながら明確なデータのスコープ・伝達方法によりside-effectを抑制しています。

1
他イベントOK レギュラートーク(20分)

Autify for Mobileが支えるiOSアプリの品質

sota0805 山下颯太 sota0805

開発のアジャイル化に伴いリリース頻度が高まってくると、マニュアルのQAではリソースが足りないなどの問題から次第に対応が難しくなってきます。このため自動化が必須になってきますが、自動化にもテスト自動化エンジニアの採用が難しかったり、アプリが変更されたときのテストのメンテナンスにコストがかかるといった問題があります。Autifyでは、誰にでも簡単にテストが作成でき、テストが失敗した際にAIがテストシナリオを自動修復するといった方法によってこれらの問題を解決していきます。

このトークでは、実際にiOSアプリの品質担保をするために起こるいくつかの問題点と、それらを解決する Autify for Mobile のアーキテクチャについてお話します。

3
他イベントOK LT(5分)

劇的に整理しやすくなった!?iOSアプリ開発における設計議論の文化

takahia takahia takahia

iOSアプリ開発する際、どのような機能をどこに書くか、どういう構成にするか、チームやグループで共通認識を取れているでしょうか?
タクシーアプリ「GO」はRIBsアーキテクチャを採用することによって、ロジックをコンポーネント化できるため、それをVisual Toolを使って可視化し、Win Sessionなどで気軽に設計を相談できる文化ができました。

自分の場合、iOSアプリ開発をしていくと、どのように実装にしていくか、設計相談というよりは実装方法の相談になりがちだった経験があります。
しかしながら、実装を進めていくうちに何か違うことに気づいて、大きく方向転換をし、実装コストが大きくなってしまったり、時間がないからと技術的負債を生み出すことも往々にしてありました。

そのような課題を解決するために、私たちのチームが、どのような図を見ながら方針のすり合わせを行なっているのか、ご紹介させていただきます。

1
他イベントOK LT(5分)

2年連続パーソナルスポンサーな理由

AkkeyLab AkkeyLab AkkeyLab

iOSDC Japan 2020 / iOSDC Japan 2021 で AkkeyLab はパーソナルスポンサーとして協力させていただいております。

・なぜ?
・どうやって?
・なにをしたいのか?

このトークでは以上3点を軸に笑えて泣ける5分間を提供いたします。

パーソナルスポンサーをしたほうが良い・悪いという話は一切行いません。スポンサーという形でエンジニアの皆さんのチカラになれたらいいな、という想いを届けます。これにより、 iOSDC Japan に対する皆さんの熱い想いが再加熱されることをお約束いたします。

採択 他イベントOK 2021/09/19 16:35〜 Track A LT(5分)

NDIとARKitを連動させた新しい映像表現

shmdevelop 服部 智 shmdevelop

Network Device Interface(NDI)はIP ネットワークを経由し映像を伝送する方式の1つです。
現在世界で最も利用されているIP伝送テクノロジーで、高画質な映像を無線で送受信できます。

iOSからでもSDKを通じて使用可能です。
(SwiftからNDIを使うのは少し大変でした!)

シンプルに映像送信するところから始め、
フレーム単位でメタデータを付加できることを利用しARの新たな映像表現に活用してみました。

送信アプリ実装、受信側設定、作った表現と工夫点など。

デモ、ソース解説を中心に、ARと映像の新しい形態を解説します。

採択 他イベントOK 2021/09/18 15:50〜 Track C レギュラートーク(20分)

App Size Optimizationへの挑戦

皆さん、こんな経験はありませんか?

  • App Storeのアプリページに流入するユーザがインストールしてくれない
  • インストール後に何故かアプリを起動してもらえない

ネイティブアプリの広告業界にはApp Store Optimization(ASO)という言葉がありますが、App Size Optimization=アプリサイズの最適化は1つの重要なファクターになっています。

大容量プランが出てきたとはいえ、マスユーザーは常に低速回線、ギガ数の残りと戦ってるのです。

このセッションでは実際にリリースから7年経ってFat IPAとなってしまったアプリを25%以上のサイズ圧縮を行なっていった中で実際に挑戦して効果があったこと、なかったことをお伝えします。

また、App Size Optimizationは圧縮してから始まるといっても過言ではありません。実際に大きな機能をリリースする中で徐々に太っていくことを防ぐことはできるのでしょうか?

アプリサイズが大きくなっていくことを防ぐために私たちが考えたこと、運用上で効果的なアイデアもお伝えします

他イベントOK レギュラートーク(20分)

サービス稼働させたままFirestore移行するテクニック

daisuke0131 daisuke0131 daisuke0131

もはやモバイル開発においてはデファクトスタンダードの地位を確立しているFirestoreですが、
もともと別の基盤で稼働していたサービスをFirestoreに安全に移行するためにはどのようにすべきでしょうか?

私たちは、2016年から建設・建築業界向けの施工管理アプリANDPADを提供しています。サービスの拡大による負荷分散目的でサービス内で提供している
チャットサービスをRails + RDSの基盤からFirestoreの基盤へと移行を決断しました。
新規サービスを立ち上げるときに0からFirestoreの基盤で構築するときのノウハウはあらゆるところで共有されていますが、実際に稼働している
サービスを徐々にFirestoreの基盤に移行していくときのノウハウはあまり多く共有されていないのではないでしょうか?

・ 安全に稼働させながらFirestoreに移行するために必要なこと
・ 既存コードとFirestore関連のコードをうまく同居させるテクニック
・ コードカバレッジとfirestore移行の話
・ チャット特有のFirestoreの使い方

1
他イベントOK レギュラートーク(40分)

100日間AR表現を実装して見つけた面白い実装を全力解説

shmdevelop 服部 智 shmdevelop

ARKitは進化を続けていて表現できる内容も年々増えています。
LiDARセンサーやiOSの機能と連動して、少し工夫することで面白い機能が実現できます。

私は100日間AR表現実装チャレンジを通して多様なAR表現を実装してきました。
その中で「これは面白い!」と人に伝えたくなる実装がいくつか出てました。

  • LiDARで認識した世界にカラーボールをぶつけて色付け
  • リアルタイム顔ペイント
  • BlotterMedia風身体エフェクト
  • AR謎解き
  • 視線トラッキング

眠らせておくにはもったいない実装の数々を熱く紹介していきます!
聞いた人がワクワクするような内容になるはず。

Swift、ARKit、SceneKit、Metal Shader Languageなどを中心にした実装。
デモとコード解説を軸に、AR表現に興味を持った人がさらに興味を持つようなセッションです。

5
採択 他イベントOK 2021/09/18 14:10〜 Track C レギュラートーク(20分)

100日間AR表現を実装して見つけた面白い実装を全力解説

shmdevelop 服部 智 shmdevelop

ARKitは進化を続けていて表現できる内容も年々増えています。
LiDARセンサーやiOSの機能と連動して、少し工夫することで面白い機能が実現できます。

私は100日間AR表現実装チャレンジを通して多様なAR表現を実装してきました。
その中で「これは面白い!」と人に伝えたくなる実装がいくつか出てました。

  • LiDARで認識した世界にカラーボールをぶつけて色付け
  • リアルタイム顔ペイント
  • BlotterMedia風身体エフェクト
  • AR謎解き
  • 視線トラッキング

眠らせておくにはもったいない実装の数々を熱く紹介していきます!
聞いた人がワクワクするような内容になるはず。

Swift、ARKit、SceneKit、Metal Shader Languageなどを中心にした実装。
デモとコード解説を軸に、AR表現に興味を持った人がさらに興味を持つようなセッションです。

他イベントOK レギュラートーク(20分)

iOSの開発ツールにコントリビュートしてみよう

aomathwift あおい aomathwift

iOSアプリ開発は、アプリそのもののコーディングがすべてではありません。
作ったアプリがストアに上がるまでに、チームでのコードレビューを助けるもの、サブミットを自動化するものなど、多くの開発ツールを利用しています。
これらの多くはオープンソースとして公開されていて、メンテナー各位によって開発が続けられていますが、これらの開発ツールに対し、自分で課題を発見しそれを自分の手で直してみたいという思いを持つ人もいるのではないでしょうか。
自分もそんなモチベーションをもつ一人で、色々な開発ツールへのコントリビューションチャンスを少しずつ見つけコミットしてきました。
このトークでは、そんな私が最近コントリビュートした xcode-install というツールのパフォーマンス改善のPull Requestを例にあげ、iOSの開発ツールの課題発見とその改善のコツを紹介します。具体的には、以下のような話をします。

・開発ツールの課題の見つけ方
・マージされやすいPull Requestの作り方
・オープンソースコミュニティとの関わり方

2
他イベントOK レギュラートーク(20分)

TCA + GraphQL + SwiftUIでスケーラブルなアプリを作ろう

kz56cd masakazu sano kz56cd

昨年のiOSDCではTCA = "The Composable Architecture" に関する発表がいくつかありました。
シンプルな状態管理の枠組み、無理のない副作用の表現...などなど、大いに興味をそそられた方もいたのではないでしょうか(私もその中の一人です!)。

本トークでは、TCAを用いたアプリ開発を通して感じたメリットやデメリット、注意点やつまづいたポイント、テストコード等を中心にお話します。
また、GraphQL / SwiftUIを組み合わせたことで、スケーリングしやすい構造となり得たかという点についても、実際のプロダクト開発の場と比較しつつ解説したいと思います。

2
採択 他イベントOK 2021/09/19 14:10〜 Track C レギュラートーク(20分)

ローカライゼーションマネージメント プラットフォーム導入の話

Byungjun Park

ローカライゼーションを念頭に置いてAppを構築することは重要ですが、規模が大きくなればなるほどデザイナー・プロダクトマネージャー・デベロッパー間の莫大なコミュニケーションコストがかかります。Xcodeでアップルが提供する標準的なローカライゼーション方法は優秀ですが、大規模なアプリ開発はそれだけでは解決できない様々な問題が存在します。
 「GO」を開発しているMobility TechnologiesのiOS開発チームでのレガシーな文言管理でぶつかった課題と、プロダクトチームメンバー間のコミュニケーションコストを減らすため、より専門的なローカライゼーションプラットフォームを導入することになった経緯を紹介します。

そして
 1. Japantaxiアプリのローカライゼーション(with Poeditor)、GOアプリでのローカライズ課題
 2. Lokaliseとは、 OTA配信、Rest apiよる文言連動
 3. Phraseとは、文言のFigma / Sketch 連動
 4. GOで導入することになったプラットフォームの話と、それによりできること・メリット・解決できた課題

他イベントOK LT(5分)

Everybody Happy! アプリ開発における、ドキュメントの管理方法

takahia takahia takahia

アプリの機能が拡充し、組織が拡大し、携わる人が多くなってくると、デザインやドキュメント管理が非常に大変になってきます。
今回は、デザイン、PRD、Specなどのドキュメントを、対クライアントエンジニア、対バックエンドエンジニア、対PdM、対デザイナー、対QAに対して、皆がHappyになる管理方法を紹介します。

小さい組織の時は、PRDやデザインなどそれぞれが管理することで問題はありませんでした。
しかしながら、機能が多くなればなるほど、人が増えれば増えるほど、その管理は難しくなってきます。

皆さんも経験はありませんか?
2重管理でデザインは最新だけどPRDが最新化されていなかったり、Specは最新だけどPRDに落とし込まれていなかったり。

私達も、それぞれの役割の方がドキュメントが最新だと思ってコミュニケーションをとってたけど実は違っていて、確認のコミュニケーションに時間を取られてしまっていることが多々ありました。

今回、クライアントエンジニアだけでなく、PdM、デザイナー、バックエンドエンジニア、QAを含めて、私たちにFitしたドキュメント管理方法を作りました。

プロダクト開発に集中したい方必見です!

2
採択 他イベントOK 2021/09/19 13:30〜 Track A レギュラートーク(20分)

ケースに応じたUICollectionViewのレイアウト実装パターン

to4iki to4iki to4iki

UICollectionView を利用してレイアウトを実現する際の選択肢は下記のように複数存在します。

  • UICollectionViewFlowLayout
  • UICollectionViewDelegateFlowLayout
  • UICollectionViewCompositionalLayout

また、アニメーションの複雑度やセルの更新頻度によっては、
DataSource実装に DiffableDataSource やサードパーティー製の RxDataSource を利用したいことがあります。

これらをレイアウト実装と組み合わせて要求されたデザインを実現することになりますが、
複数の選択肢があるため要求を満たすための最適な組み合わせに悩む場合があるかと思います。

そこで、本トークでは具体的なレイアウトの事例を基にケースを明文化した上でそれぞれの最適な利用パターンを提供します。

他イベントOK LT(5分)

ARKitとLiDARで実装する世界を塗りつぶすペイント機能

shmdevelop 服部 智 shmdevelop

LiDARでリアルタイムに認識した世界をメッシュ化しカラーボールをぶつけてペイントする機能の実装方法を解説します。

LiDARは新型のiPhone/iPadに搭載されている空間認識センサーです。リアルタイムかつ高精度で現実空間を検知できます。
検知したデータは可視化できるのですがApple提供のLiDAR動作サンプルではワイヤー表示などシンプルな使い方に留まっています。

このデータをインタラクティブに扱いたくありませんか?

ARKit、SceneKit、Metalの機能を応用しメッシュ化した現実を塗りつぶす機能をSwiftで実装しました。
データのメッシュ化、ペイントボールの発射、衝突、色付けなど多様な知見が詰まっています。

皆がこの実装を応用することでさらに面白い表現が実現できると思っています。

3
他イベントOK レギュラートーク(20分)

【徹底解説】あなたのウィジェットはまだまだ改良できる!!

mtj_j まつじ mtj_j

iOS14でウィジェットが導入され、この一年間で多くのアプリがウィジェットに対応されたと思います。

しかし一方で「これであっているのかな」と曖昧な気持ちでウィジェットをリリースしませんでしたか?
ウィジェットは今までのアプリとは大きく性質が違うので、何がベストプラクティスなのか、まだ多くの開発者が探り探りな状態だと思います。
また、ウィジェットはその効果が見えにくいためか、一度リリースされるとそれっきりとなってしまいがちです。

「探り探りの状態でリリースし、そのままアップデートされずに放置されてしまう」と、あまり良くない状態になってしまったアプリもあるのではないのでしょうか?
しかし、実際には注目されていない細かい設定やtipsがあり、まだまだ改良の余地があります。
これを機に皆さんのウィジェットも一度見直してみませんか?

このトークではウィジェットが好きすぎて、業務だけにとどまらず、個人開発しているアプリにもウィジェットを導入し、最終的にはウィジェットのためだけに新しいアプリをリリースしてしまったアプリ開発者が、ウィジェットに関してあまり注目されていないけど大事なtipsについて徹底解説していきます。

5
他イベントOK レギュラートーク(20分)

約3年続くリファクタリングを引き継いで見えたテクニック

k_koheyi k-kohey k_koheyi

ソフトウェアは一度作ったら終わりではなく,その後もソースコードを保守管理しなければいけないというのは今では常識になりつつあります.
積極的に大きなビジネスインパクトを狙い,日々ソースコードの編集を繰り返し,頻繁にリリースを行うことも珍しくはありません.
このようにソースコードへ頻繁に手を加える必要がある際に,レガシーコードは大きなボトルネックとなります.
そしてそんなレガシーコードに頭を抱える時間が1日の大半を占めるようになったとき,私達はリファクタリングという選択肢を考えはじめるのかもしれません.

本稿では約3年に渡る大規模なリファクタリングを入社直後に引き継いだ筆者の体験を基に,直面した課題と解決策,および安全にリファクタリングを進めるために意識したコーディングスタイルを話します.
また,引き継いだ実装から見えてきた,スプラウトクラス等のリファクタリング手法の有用性についても紹介します.
説明には、iOSエンジニアに馴染み深いSwiftのコードやリファクタリングに関する文献を適宜引用する予定です.

なお,具体的には以下のようなトピックについて執筆する予定です.
【トピックプラン例】

  • レガシーコードはクラッシュしてくれてサンキュー.
  • リファクタリング中に機能追加が必要!考えられる手段。
  • 宗教戦争?privateなメソッドの自動テストを書きたいときにどうすればよいか.
  • 解体したい神クラス,でもテストが書けないから下手な修正はできない.そんなときの折衷案.
1
採択 他イベントOK 2021/09/18 15:50〜 Track D レギュラートーク(20分)

僕たちが『Appのプライバシーに関する質問への回答』そして『ATT』に対応するまでの物語

FromAtom FromAtom FromAtom

2020年末、僕たちは「Appのプライバシーに関する質問への回答」の準備に追われていた。この情報が出た当時「アプリ担当者が、収集データと使用目的を調べれば良いよね」と呑気に構えていた僕は、同僚の発言で目が覚めた。

「集めたデータを別チームが分析に使っていたら、どうすれば良いんでしょう?」

弊社の提供する6つのiOSアプリから収集された様々なデータは、BigQueryとLookerが完璧に整えられた社内を縦横無尽に飛び交っていた。このデータ全ての流れを、利用目的を、利用部署を知っている人はいるのか。このトークでは1つ目のトピックとして、この調査プロジェクトについて話そう。


年は明けて2021年、なんとか「Appのプライバシーに関する質問への回答」を終えた僕たちは、広告SDKの更新やATTモーダルの実装を終え、iOS14.5にあわせて無事にリリースしていた。そして数週間後、一通のリジェクト通知が届く。

「XXXをトラッキング目的で使っているなら、ATTで許可をとりなさい。」

そのときようやく気がついた。世間ではATTについて「IDFAを取得できなくなる」点のみ語られていたが、実際はすべてのトラッキング用データに関係していた。普通に考えればApp Tracking Transparencyという名前から分かることだ。同時に思い出した。弊社のBigQueryやLookerには、iOSだけでなく、Android、Webのデータが混在して収集されていることを。そして、一体どれがATTで許可を得たデータなのか、誰にもわからないことを。

このトークでは2つ目のトピックとして、ATTにちゃんと対応するために始まった横断プロジェクトについて話そう。

※このトークでは『この場合はこの対応をすれば正解』といった具体的な例は話しません。