iOSDC Japan 2021 トーク一覧

他イベントOK LT(5分)

「Feature単位でのモジュール分割」でApp Clip, WidgetKit対応

tomu28_jp 小幡十矛 tomu28_jp

バージョンを重ねるごとに使い勝手が向上してきたSwiftUI。
本セッションでは「SwiftUIと親和性が高いThe Composable Architecture + Feature単位でのモジュール分割」で開発を行い、
iOS14で追加されたApp Clip, WidgetKitを使ったWidget実装時の知見や学んだことについて紹介します。
「Feature単位でのモジュール分割」とは、1機能単位ごとにモジュールを切って開発を行う手法のことです。
App Clip, Widget実装する際の技術選定で参考になるお話が出来ればと思います。

【ref.】
2021/05/19に「モジュール分割した開発での知見とテーマ切り替えやUICatalogについて」というタイトルで発表を行なった際のスライド

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

優しさからはじめるデバッグ機能のススメ

ahiru___z ring ahiru___z

「開発効率化」の1つの解として「デバッグ機能」が挙げられます。

デバッグ機能と聞くとみなさんはどのようなイメージを持ちますか?

「何からはじめたら良いのかわからない」

「実装するのが難しそう」

そう思う方もいるかもしれません。
少なくとも半年前の私はそう思っていました。

そんな私がプロダクト初となるデバッグ機能を導入して開発速度を劇的に向上させた事例についてお話しいたします。

  • 初めの一歩の踏み出し方
  • デバッグ機能の実装方法
  • デバッグ機能により開発は効率化されるのか?
  • チーム開発で大切なこと

ちょっとの工夫で劇的にチーム開発の効率化を図ることができます。
弊社ZOZOTOWNのデバッグ機能導入事例からそのエッセンスとチーム開発で本当に大切なことをお伝えできれば幸いです。

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

2段階認証実装の勘所

corori_22 ころころ corori_22

ユーザのセキュリティへの意識は上がってきています。
近年、パスワード流出や認証欠陥等のセキュリティインシデントによるニュースが増えてきており、ユーザにとって重要な情報を扱うサービスへのダメージは計り知れません。
このLTでは、

  • RFC6238によるTOTP(Time-Based One-Time Password Algorithm)の定義
  • ネイティブアプリ上でのTOTPによる2段階認証の実装の概要
    • 認証設定時の状態管理
    • ログイン時の状態管理
  • iOSエンジニアが気をつけるべき勘所

をお伝えし、みなさんが明日サービス側に導入を提案してもらうことを目指します。

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

今、改めて振りたいiPhone搭載のセンサとその使い道

rirex5 Atsushi Otsubo rirex5

便利なWebサービス・APIが増えている昨今ですが、 デバイスの進化にも目を見張るものがあります。
iPhone 12 Pro / Max では新たにLiDARセンサが搭載されて話題になりましたが、そもそも iPhone は高性能なカメラから、加速度、気圧センサなどあらゆる入出力に対応した優れたデバイスということは言うまでもありません。
これらのセンサを自在に操れることは、サーバサイドやWeb開発とは異なる、クライアントアプリケーション開発の魅力の一つだと考えています。

ということで、

  1. どんなセンサ・プロパティにアクセスできるのか
  2. どんな用途に利用されている・できそうか

これらについて改めて整理し、センサを使ったユニークなアプリ開発につながるヒントを共有できれば幸いです。

他イベントOK LT(5分)

iosアプリのテストをもっと書こう、いまさら聞けないテストの始め方

daisuke0131 daisuke0131 daisuke0131

みなさんiOSアプリのテスト書いていますか?
このトークでは、テストの始め方、利用すべきライブラリをざっと振り返って話をします。

日々運用するサービスを安定運用するためにはテストは欠かせません。
5分でテストの書き方を振り返って、素晴らしい開発体験を作りましょう。

1
採択 他イベントOK 2021/09/18 17:40〜 Track A LT(5分)

「Hey Siri, おはよう」に憧れて

koga_wiwi kiwi koga_wiwi

通販サイトの会員向けセールを物色していた時、ふと目に入った「SwitchBot」。
Apple Watchに話しかければベッドからでもエアコンが、照明が、テレビが操作できる、
そんな生活に心のどこかで憧れを抱いていた私は、半額セールの勢いで購入することにしました。

SwitchBotには専用のiOSアプリがあり、このアプリから赤外線リモコンの登録や操作、
シーンの操作などを行うことができるのですが、HomeKitには対応していません(Siriショートカットのみ対応)。

しかし、iOSエンジニアとしてはやはりホームアプリケーションから家電を操作してみたい。
SwitchBotをホームアプリケーションで操作するための記録とその結果できるようになったこと、
そしてHomeKitでもう一歩遊ぶためのヒントをご紹介します。

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

もっと広まってほしい推しのGraphQL

_bannzai_ bannzai _bannzai_

Web APIを通してサーバーとのやりとりが発生するアプリにおいてアプリ開発する上でそのAPIの使いやすさは重要なことです。アプリを構築する上で特にAPIから取得したデータ構造からUIの実現について考える機会は多く存在します。他のRESTやRPC系のAPI等ではあらかじめ決められたデータ構造を取得し、クライアントサイドで各UIコンポーネントに合わせてデータを加工し、伝搬する。そんな処理を書いたことがある人も多いのではないでしょうか。

この例の方法はいくつか課題があります。その中でも、単調な変換ロジックを書きたくないな。と思った方もいると思います。これに対してGraphQLではFragment Colocationのテクニックによって簡単にコンポーネントに必要なデータ構造に分割することができるようになります。このような機能を含めてGraphQLでは宣言型データ取得(Declarative data-fetching)の実現が容易になっています。宣言的といえば、宣言的にUIを構築する思想が基にあるSwiftUIがありますね。実はGraphQLとSwiftUIでの開発は相性が良いと言えます。その点についても具体的なコード例をお見せしながらお話ししていけたらと思います。また、ここでは一つの課題を取り上げましたがその他の課題についても確認しGraphQLではどのようなアプローチを取っているのかにも触れていきます。

このトークでは推しのGraphQLの魅力を伝えるための基本的な機能部分の説明。GraphQLが昨今の宣言的UIを利用したフロントエンド事情とどのように相性が良いか。さらにGraphQL周辺の便利なエコシステム・ツールについて。をお話ししていきます。推しの推したる部分を直接的に伝えるためにあまり概念的なことは話さず具体的なコードを用いて話す予定です。

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

部分的に RIBs アーキテクチャを適用してみる

kuritatu18 久利龍義 kuritatu18

RIBs アーキテクチャとは、Uber が提供しているクロスプラットフォームモバイルアーキテクチャです。

RIB というコンポーネントの塊を RIB ツリーと言われるツリー構造に繋げていくことで機能を開発することができます。
ツリー構造ということは 親 - 子 の関係が発生します。親がないと子は作れません。つまり、アプリの大本部分から親を作成していかなければ RIBs アーキテクチャを適用できないと思っていました。そんなことはありません。途中にも親は作れます。

本LTでは、以下についてお話する予定です。
・なぜ部分的に適用が必要になったのか
・RIBs 独自のライフサイクル
・RIB 間の依存関係解消

これで RIB で作られてない機能から RIB をルーティンすることができ、あなたのアプリにも RIBs を部分的に適用出来るようになります。

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

やってみよう!AWS Amplify

seike460 清家史郎 seike460

バックエンドなんもわからん…でも必要なんだ!
そんな時はAWS Amplifyを使って解決しましょう。
AWS Amplifyを使うと、高速かつ簡単にバックエンドの仕組みを構築出来ます。
AWSのフルマネージドサービスを利用してバックエンドを構築する様子を覗いてみましょう!

■想定する聴講者
 - とにかくバックエンドを構築したい方
 - そもそもAWSもあまりよくわからない方
 - そもそもバックエンドなんもわからん方
■お話しないこと
 - iOSに特化したお話
 - モバイルアプリに関する優れた知見
 - 各種AWSサービスの詳細なお話

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

The Composable Architectureを導入し、レガシーなアーキテクチャを刷新する

takehilo_kaneko 金子雄大 takehilo_kaneko

NewsPicksのiOSアプリは、2013年にリリースされた比較的歴史の長いアプリです。
ニュースやコメントの閲覧、投稿といったニュースアプリとしての基本機能に加えて、いまではライブ動画配信機能や法人向け機能など、様々な機能を提供する規模の大きなアプリになってきました。

NewsPicksアプリのベースのアーキテクチャはMVCで、一部MVPやクリーンアーキテクチャの考え方を取り入れている箇所もありますが、テストはほとんど書けておらず、状態があちこちで変更されていたりと、デグレのリスクが高いアーキテクチャとなってしまっています。
こうした状況を改善すべく、現在アーキテクチャ刷新プロジェクトを進行中です。
新しいアーキテクチャでは、The Composable Architecture(TCA)を採用しました。

新規アプリでは採用事例が出てきているようですが、歴史が長く規模の大きなアプリに後からTCAを導入した事例というのはまだ少ないのではないでしょうか?
本トークでは、NewsPicksアプリにTCAを導入する上で得た知見をご紹介し、TCAの採用を考えているみなさまに少しでも役に立つ情報をご提供できればと思います。

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

技術負債との向き合い方について考える

tamapppe Tamappe tamapppe

筆者はこれまでのエンジニア人生で様々な技術負債と立ち向かってきました。
これまで遭遇してきた技術負債の一部を紹介すると

・コミュニティでメンテナンスされなくなったライブラリのリプレイス
・Swiftのメジャーアップデート
・CoreDataのデッドロック
・Fat ViewController
・Fat Storyboard
・UIWebViewの存在
・UITableView
・etc

などがあります。

勿論、技術負債への取り組みは筆者だけでなくエンジニアなら皆必ず経験する道だと思います。

そこで本セッションでは、今まで遭遇した技術負債たちを紹介し、それらをどうやって乗り越えていったのかを紹介していきます。
そして、いかにして将来の技術負債を残さないようにするのかなどの筆者なりの考えを話します。

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

Hey Siri!マルチプラットフォームでのSiriショートカットの地雷を教えて

monoqlo monoqlo monoqlo

Siriショートカット、みなさん使っていますか?
乳幼児の世話で手が離せない時やゲームのプレイ中など、手や目を離せない時に意外と便利な機能です。

例えばiOSアプリでショートカットを実装した場合、シンプルなものであれば、iPhoneだけでなく、Apple Watch、さらにはHomePodでも利用することができます。家の中でも外でもどこでも手軽に使えてとても便利ですね。

さて、遡ること約1年、とあるiOSアプリにアプリ内でショートカットを登録できる機能を追加しました。
機能としてはシンプルで、「数字を入力として受け取り、一定の範囲内の数字であれば保存、それ以外はエラーを返す」というものでした。
iPhoneでちゃんと動いてるし問題なし!リリース!
めでたしめでたし。

ではありません。そうです。我々は対応している全てのプラットフォームで、できる限り動作確認をすることになるわけです。新しいOSがリリースされたら差分も確認します。

すると、次々と見つかるこれらの問題…

「iOSとwatchOSで応対が違う…だと…」
「iOS 13とiOS 14で挙動が…」
「watchOS 7だとそうなるの…」
「HomePod自動アップデートでいつの間にか応対変わってるやん…」
「英語と日本語でなんか違う…」

このLTでは、このような地雷特徴をいくつか紹介します。

実はこれらは知らなくてもそういうものだと割り切れば困りません。
ですが知っていれば、開発時やQA、あるいは問い合わせ対応の動作確認時間をちょっぴり節約できるかもしれません。

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

AWS Amplifyで作るウェブ、モバイルバックエンド

seike460 清家史郎 seike460

バックエンドはいい感じにやっといて欲しい…そんな風に思うことはありませんか?
そんな時はAWS Amplifyを使って解決しましょう。
AWS Amplifyを使うと、高速かつ簡単にバックエンドの仕組みを構築出来ます。
認証やストレージ、APIまでをAWSのフルマネージドサービスに任せる事で、
やるべきことに集中するための開発を行いましょう。

■想定する聴講者
 - フロントエンドやモバイルアプリは構築出来るけど認証やAPIはよくわからない方
 - とにかくバックエンドは簡単に構築したい方
 - AWSのフルマネージドサービスに興味がある方(認証基盤、GraphQL、ストレージ)
■お話しないこと
 - iOSに特化したお話
 - モバイルアプリに関する優れた知見

1
採択 他イベントOK 2021/09/17 19:50〜 Track E レギュラートーク(20分)

振り返りながら学ぶPackage Manager

jollyjoester jollyjoester jollyjoester

iOSアプリの開発している私たちは日頃CocoaPods, Carthage, SwiftPMなどのいわゆる「Package Manager」にお世話になっています。

Package Managerはソフトウェア開発をする上で欠かせない重要なものです。
しかし、「使い方は知っているが仕組みがどうなっているかはよくわからない・・・」という方も多いのではないでしょうか?

ここでは

  • Package Managerとは何か?
  • なぜPackage Managerを使うのか?
  • iOSにおいてPackage Managerはどう進化してきたのか?
  • CocoaPods, Carthage, SwiftPMはそれぞれどのような特徴があるのか?

といった点を整理し、基本的な概念や仕組みを理解していきたいと思います。

一緒にPackage Managerについて学び、より適切に選択・利用できるようになりましょう。

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

動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説

fumiyasac 酒井文也 fumiyasac

動画や音声については私自身これまではほとんど触れたことはありませんでしたが、これらを取り扱うサービス開発の中に身を置いた経験を通じて、アプリならでは機能ロジックとUI体験との調和を生み出すための奥深さや工夫の深淵を垣間見ることができた様にも感じました。その一方で、普段私達はiOSアプリを通じて多くの動画や音声に触れていてとても身近な存在ではあるのに、いざ実装しようとすると「あの機能と似たイメージのものを作りたいんだけど、どうすればいいんだろう...?」とその当時に知らなかった故にやきもきしていた経験もしました。

本発表では、

  • Apple公式ドキュメントや掲載サンプルから紐解く押さえておきたい基本部分のご紹介
  • 動画の再生や停止といった基本的なプレイヤーとしての操作実装や画面レイアウトに関する解説
  • アプリがバックグラウンドに移行した際にも連続して音のみの再生へ移行する機能
  • 他のアプリを利用しながら動画再生をするPicture in Pictureの機能と実装に関する部分
  • 普段使い慣れている動画再生アプリ等でよくお目にかかる機能や振る舞いを実現する際のヒント
  • 動画再生プレイヤーアプリに付随するUI実装や表現に関する説明

について、簡単ではありますがご紹介と解説ができればと考えております。

本発表につきましては「機能を実現するための実装に関するはじめの一歩を踏み出す」ための難易度を想定しておりますが、実際に動作するサンプルコードを用いた検証や試行錯誤を通して感じた実装で押さえておくと役に立った部分や、実務を通して実装した知見等が少しでもお役に立つことができればとても嬉しく思います。

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

RIBsアーキテクチャに SwiftUI を導入してみた話

kuritatu18 久利龍義 kuritatu18

昨年9月に iOS 14 がリリースされ、今年に入って iOS 12 のサポートを終了したアプリも多いと思います。それに伴い、SwiftUI を既存のアプリに導入する事例を見かける事が多くなってきました。

タクシー配車アプリ「GO」では、RIBsアーキテクチャを採用しており、RIB のコンポーネントとライフサイクルによって機能が作られています。
本トークでは、RIBsアーキテクチャの良さを活かしつつ、徐々に SwiftUI を導入していった開発体験についてご紹介します。

導入経緯、メリット/デメリット、既存UIコンポーネントとの共存についてお話しする予定です。

1
採択 他イベントOK 2021/09/18 17:30〜 Track A LT(5分)

SwiftUI.Textを使いこなす5分間

n_atmark あつや n_atmark

皆さんSwiftUI.Text使ってますか?

SwiftUI.Textには知っていると便利な機能がいくつか存在していて、例えば

Text("iOSDC Japan")
+
Text("2021").fontWeight(.bold)

このように書いて、Textを結合することができたりします(これはSwiftUI.Textに public static func + (lhs: Text, rhs: Text) -> Text が定義されていて、Textの結合ができるようになっています。)

このLTでは、SwiftUI.Textに存在する不思議な(面白い)挙動をする機能について紹介します。

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

SceneKitを使ってアプリのクオリティを劇的に上げる

ahiru___z ring ahiru___z

SceneKitはUIViewやCALayerでは難しい3Dやパーティクルの表現を非常に簡単に使用できるフレームワークです。

「3Dモデルのレンダリングなどで使用するフレームワークだから私には関係ない」
「AR系のアプリ開発に携わっているわけではないので使用する機会はなさそう」

このように思っていませんか?

これは大きな間違いです。

SceneKitはUIKitと非常に親和性が高くUIKitにそのままViewとして統合できます。
そして何より、UIKitだけでは実現が難しいリッチな表現(アニメーション)がとても簡単に実装できるのです!

本トークでは「SceneKit × UIKitの導入事例を軸にアプリのクオリティを上げるtips」をご紹介します。

具体的には下記の話を予定しています。

  • SceneKitとは何か
  • どのような表現ができるのか
  • どのように実装するのか
  • 実際の導入事例

「個人開発でアプリをリリースしていてアプリのクオリティに磨きをかけたい方」や「デザイナーからの無理難題に少しでも立ち向かいたい方」にはぜひ聞いてほしい内容となっています。

明日からすぐに使える強力な武器、手に入れませんか?

他イベントOK LT(5分)

Flutterを知らない人がFlutterでアプリを公開するまでにどのような情報が必要でどのようなエラーを解消したか

山崎謙登

普段iOSで開発をしておりAndroidはほぼ経験がない者が、Flutterでアプリを作り公開するまで、どのようなことを調べなければいけなかったか、どのようなエラーを解消したかを一つ残らず発表していきます。Flutterをやってみようと思っている方必見です!収穫としては、Android、Android Studio, Google Play Storeのことも少し分かったことや、FlutterではUIの作り方がSwiftUIと似ているやり方のため、それに慣れてきたという点もあります。 
また、エラー発生->調査->解消の流れを何度も繰り返したためあたかも「エラー解消1000本ノック」のようになり問題解決力が向上しました。そういう点も含め、 Flutterは全ての方にお勧めしたいツールです!

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

"脱 Storyboard" の裏側を大暴露!

AkkeyLab AkkeyLab AkkeyLab

約半年間私は Storyboard を用いた開発を行っておりません。
では、どのようにレイアウトを記述しているのか、それは以下の3つになります。

・AutoLayout with Code
・SwiftUI
・FlexLayout(github.com/layoutBox/FlexLayout)

複数のプロダクトを並列開発していることもあり、上記3パターンのレイアウト方法を並行して利用してきました(一部プロダクトで混合)。その中で「うわぁ、これ AutoLayout じゃないとバグるなぁ」「SwiftUI なら1行なんだけどなぁ」とそれぞれのメリット・デメリットが明確になってきました。

・こういうレイアウトする時は XXX 使ったほうが事故率低くて良いよ!
・"脱 Storyboard" で改善したこと、改悪したこと
・チームに "脱 Storyboard" の波を作る方法の提案

このトークでは以上3点を中心にライブコーディングを用いて解説いたします。ライブコーディングでは iOS App Store の模写を題材として「AutoLayout with Code」「SwiftUI」「FlexLayout」の3パターンでご紹介いたします。きっと、あなた好みのレイアウト方法が見つかるはずです。

よって、日頃 Storyboard を利用している方にとっては、それ以外のレイアウト構築方法に対する不安払拭となり、レイアウト構築方法変更により開発効率向上が見込めます。また、既に "脱 Storyboard" されている方にとっては事前に注意ポイントを知ることにより、危険を回避した開発が可能になります。

5