iOSDC 2020 印象に残ったトークまとめ🎉

# はじめに
iOSDC 2020に参加しました！:hugging::sparkles:
https://iosdc.jp/2020/
初のオンライン開催でしたが、会社の仲間と一緒にわいわい見るのは楽しかったです。
SwiftUI関連のトークが多くて、昨今のトレンドを反映してるなぁという印象を受けました。

どれも勉強になるトークでしたが、印象に残ったトークを備忘録としてまとめておきたいと思います。
スライド画像多めでまとめているので、ざーっと流し見するも良し、気になるものがあればURLから飛んで詳細を見るも良しです:grin:（YouTubeのURLもアップされ次第追記予定です）

# Day1
## iOSには無いmacOS独自機能をCatalystで実装する
### 概要
* スライド
    * [iOSには無いmacOS独自機能をCatalystで実装する #iosdc #d/make_macos_apps_with_catalyst - Speaker Deck](https://speakerdeck.com/fromkk/make-macos-apps-with-catalyst)
* YouTube動画
    * [iOSには無いmacOS独自機能をCatalystで実装する #iosdc #d - YouTube](https://www.youtube.com/watch?v=_7FfMCEBPiY&feature=youtu.be)
* プロポーザル
    * [iOSには無いmacOS独自機能をCatalystで実装する by かっくん | トーク | iOSDC Japan 2020 - fortee.jp](https://fortee.jp/iosdc-japan-2020/proposal/a6a44210-dc56-4350-9713-bd78c41e9bf6)

### 内容
![スクリーンショット 2020-09-21 17.44.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/089d467c-a70a-e04d-f79e-0619a83bb3f4.png)

macOSはもともとAppKitだけだったが、一部にUIKitが利用できるようになった
macOSとiOSの違いも吸収されている
Xcodeでチェックを入れるだけでMacでも使えるようになる

![スクリーンショット 2020-09-21 17.47.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/a22b7224-fb80-fa85-9a4f-7c90f0b6ea74.png)
macOS独自機能
* メニュー
* タッチバー
* ツールバー

![スクリーンショット 2020-09-21 17.49.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/063c79c7-9d91-22e9-3888-50c89180aa71.png)
タッチバーの一部でSwiftUIと相性が悪いところがあった
SwiftUIを利用したい場合はmacOSネイティブのアプリを開発したほうが良いかも？

![スクリーンショット 2020-09-21 17.55.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/0440e5c9-29a3-ffd9-b893-37486ff73a99.png)

### ひとこと所感
まだ全然macのこととか考えられていませんでしたが、このトークを聞いて、やるべきことのイメージが少し持てるようになりました！

## そろそろCombine
### 概要
* スライド
    * [そろそろCombine - Speaker Deck](https://speakerdeck.com/shiz/sorosorocombine)
* YouTube動画
    * [iOSDC Japan 2020: そろそろCombine / shiz](https://www.youtube.com/watch?v=0wTld_ROx2Y)
* プロポーザル
    * [そろそろCombine by shiz | トーク | iOSDC Japan 2020 - fortee.jp](https://fortee.jp/iosdc-japan-2020/proposal/3338e9cc-da3e-462c-951a-6ebe9f8664f4)

### 内容
![スクリーンショット 2020-09-21 18.08.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/4ea60ee9-84a2-7d35-20e4-5929d0613218.png)
Combineとは？
連続した多種類の非同期処理などを単一の方法で扱う宣言的なAPI

![スクリーンショット 2020-09-21 18.08.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/0c2768da-6e0b-bea0-ac2b-cf87c46b3a57.png)
iOSの非同期処理は難しい
* タイミング次第で結果が変わってしまう
* どこで処理を実装しているのか探すのが一苦労

![スクリーンショット 2020-09-21 18.09.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/cc55b6d3-1139-d7b3-e408-b09f0733ffb4.png)
非同期を扱う方法もたくさんある

![スクリーンショット 2020-09-21 18.09.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/dee7fced-2825-95ff-45c0-2d4e9c28ff4b.png)
Combineでは、あらゆる処理をPublisherにすることで、非同期をスマートに扱うことができる
他のフレームワークとの連携も容易になる

![スクリーンショット 2020-09-21 18.43.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/7f990dc5-8aea-99a0-8127-7cec240c2701.png)
宣言的とは？
指示的：「冷蔵庫からペットボトルの水を取り出して、コップに注いで、飲みます」
宣言的：「受け取った水を飲みます」

![スクリーンショット 2020-09-21 18.44.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/003b353f-6f4c-f026-4c95-0923e8fa0056.png)
宣言的のメリット

![スクリーンショット 2020-09-21 18.10.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/e72452f0-3394-228d-d40d-49d208d71166.png)
Combineは宣言的なので、コードも短くスッキリする

### ひとこと所感
Combineってなんぞや？という状態でしたが、RxSwiftと概念的・用語的に似ている部分があるとわかって少し安心しました。勉強せねば…

## 新規機能開発からモジュール分割を始めてみる
### 概要
* スライド
    * [新規機能開発からモジュール分割を始めてみる - Speaker Deck](https://speakerdeck.com/rizumi/xin-gui-ji-neng-kai-fa-karamoziyurufen-ge-woshi-metemiru)
* YouTube動画
    * [iOSDC Japan 2020: 新規機能開発からモジュール分割を始めてみる / Ryo Izumi](https://www.youtube.com/watch?v=Fk_ZWgI1mLo)
* プロポーザル
    * [新規機能開発からモジュール分割を始めてみる by Ryo Izumi | トーク | iOSDC Japan 2020 - fortee.jp](https://fortee.jp/iosdc-japan-2020/proposal/93678283-8ae9-468b-9d6f-eece27a372e6)

### 内容
![スクリーンショット 2020-09-21 19.03.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/a8d25fc4-2173-ba4c-3e44-d17223e6e77f.png)
機能が増えるとコードベースも巨大化して開発効率の低下につながるので、モジュール分割を行った

![スクリーンショット 2020-09-21 19.04.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/5618ea74-6b97-b58f-b750-19fbd62e3e8c.png)
既存アプリに取り入れたいけど、依存が深くてどこから切り出せばいいのか分からない

![スクリーンショット 2020-09-21 19.11.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/17dfd3ec-a3c1-60d2-1544-c0b7e32acc9b.png)
大規模リファクタが必要だけど、新規機能開発も止めるわけには…（わかりみ）

![スクリーンショット 2020-09-21 19.11.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/8dc5c0cd-f0e7-7658-df62-a224b2acfef3.png)
そこで、新規機能からモジュール分割する前提で設計することにした

![スクリーンショット 2020-09-21 19.04.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/83a15e0f-c27f-30c8-ba20-880c0e23ad80.png)
手順はこちら

![スクリーンショット 2020-09-21 19.04.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/9af45ba2-b128-e8b8-9516-a8cc71302922.png)
独立した新規画面であったり、既存ドメイン仕様への依存が少ない場合はモジュール分割しやすい

![スクリーンショット 2020-09-21 19.06.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/e1f2f7de-077c-9570-8736-6383a4c1d1a2.png)
![スクリーンショット 2020-09-21 19.14.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/b061eb15-7e60-e929-2a7d-66e067d7cad5.png)
メリットもあるけど、デメリットもある
コンフリクト回避のために、XcodeGenを先に導入すべきだった
抽象度が上がるので、実装がどこにあるのかわかりずらくなり、新しく入ったメンバーが困る場面もあった

### ひとこと所感
新規機能からモジュール分割するの良さそう。いざやろうとしたら「どこから切り出していいか分からない」と絶対なると思うので、その際に再度見返したいトークでした！

## 効率よくUIKitからSwiftUIへ移行する
### 概要
* スライド
    * [Migrating from UIKit to SwiftUI efficiently - Speaker Deck](https://speakerdeck.com/yhkaplan/migrating-from-uikit-to-swiftui-efficiently)
* YouTube動画
    * [効率よくUIKitからSwiftUIへ移行する - YouTube](https://www.youtube.com/watch?v=Mavk5AQAz7U)
* プロポーザル
    * [効率よくUIKitからSwiftUIへ移行する by josh | トーク | iOSDC Japan 2020 - fortee.jp](https://fortee.jp/iosdc-japan-2020/proposal/80ac8a83-e34a-48cf-b1ca-cb553857715f)

### 内容
![スクリーンショット 2020-09-21 19.25.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/f52e7e48-81f3-9847-6cf1-e93a5fc57d35.png)
SwiftUIを使ったほうがいい理由
* SwiftUIではより多くのことが、より少ないコードでできる
* 色んな機能がUIKitよりも楽に実装できる（アクセシビリティ、ダークモード/ライトモード、標準レイアウトなど）
* すぐにUIKitがなくなるわけではないが、いずれSwiftUIでやるしかない場合が出てくるかもしれない

![スクリーンショット 2020-09-21 19.29.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/1ad325a5-f40d-d112-2359-531f38a00b2c.png)

SwiftUIへの移行を阻むもの（待ったほうがいい理由）
* UIKitほど歴史がないのでバグがあったり、OSによって違いがあったりする
* UIKitと混ぜて使うのは苦労する

![スクリーンショット 2020-09-21 19.33.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/d42b1e63-2f02-4ca3-d322-b65d81fe37e8.png)
SwiftUIへの移行をどこから始めたらいいか？
* SwiftUIからObjective-Cが直接使えない（逆もしかり）ので、早期にSwift化しておく
* 移行が重なると面倒なので、Swiftの最新バージョン、機能を使っておく

![スクリーンショット 2020-09-21 19.38.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/e4677734-831c-fbd3-d501-4794a312fa78.png)
事前にUIKitをモダンな使い方にしておくのも大事。
* AutoLayoutを使う
* SefeAreaを使う
* 巨大なStoryboardにせず、再利用しやすくするためコンポーネントに分ける（部分的にSwiftUIに移行しやすくなる）
* 宣言的なUIKit APIを使う（StackView、Compositional Layoutsなど）

![スクリーンショット 2020-09-21 19.46.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/1d2b74bf-d0ef-50a6-c998-81994622d45f.png)
* 本番のアプリにいきなりSwiftUIを導入するのではなく、同じ分野のアプリを小さい規模でプロトタイプとして作ったほうが、メリットデメリットがわかりやすい
* その中で、SwiftUIに向いてない画面が特定できるので、必要に応じてデザインの変更を検討する
* 既存のアプリ内で、iOS13限定の機能をSwiftUIで作るのもおすすめ

![スクリーンショット 2020-09-21 19.50.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/1f3bd1f2-3b64-8bbb-99b1-81e633aac657.png)
SwiftUIに向いているアーキテクチャはこの3つ
* Redux
* TCA
* MVVM

![スクリーンショット 2020-09-21 19.51.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/5b896273-6a2c-1e48-2d2a-728dce6afd54.png)
Tips
* 1つの画面の中でSwiftUIとUIKitを混ぜすぎないこと
* TableViewなどシンプルな画面から移行すること
* 急ぎすぎないこと
* SwiftUIは深いところまでCombineに依存しているので、SwiftUIを正しく使うにはCombineの知識も必要になる

### ひとこと所感
すぐに使える知見がたくさん詰まったトークでした！いずれSwiftUIを本番に導入する日が来るかも？なので、計画的に準備していきたいと思いました。

# Day2
## Xcode Preview でUIKitベースのアプリ開発を効率化する
### 概要
* スライド
    * [Xcode Previews でUIKitベースのアプリ開発を効率化する - iOSDC Japan 2020 - Speaker Deck](https://speakerdeck.com/kenmaz/xcode-previews-deuikitbesufalseapurikai-fa-woxiao-lu-hua-suru-iosdc-japan-2020)
* YouTube動画
    * [iOSDC Japan 2020: Xcode Preview でUIKitベースのアプリ開発を効率化する / kenmaz](https://www.youtube.com/watch?v=NnqGmeR0uqE)
* プロポーザル
    * [Xcode Preview でUIKitベースのアプリ開発を効率化する by kenmaz | トーク | iOSDC Japan 2020 - fortee.jp](https://fortee.jp/iosdc-japan-2020/proposal/a88be712-b87a-4d87-bc6d-2579c2ce9b35)

### 内容
![スクリーンショット 2020-09-21 20.14.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/d9b5e50e-dc91-94bb-7b1a-228ffc48ef43.png)
Xcode PreviewsはXcode11で導入されたプレビュー機能

![スクリーンショット 2020-09-21 20.15.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/0473ace1-a8e8-4aa6-e6e3-72684a795726.png)
SwiftUIでの実装ではXcode Previewsが使えるので、リアルタイムにレイアウトを確認することができる

![スクリーンショット 2020-09-21 20.16.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/6c3b93c5-1065-8053-7323-f184ea753282.png)
UIKitベースの実装ではコード修正のたびにSumilatorを起動する必要があって不便…

![スクリーンショット 2020-09-21 20.17.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/b1812af3-716d-1ce5-8866-1ab6add81f8a.png)
現状多くのアプリがまだUIKitベースなので、そこにXcode Previewsを組み込んだ話

![スクリーンショット 2020-09-21 20.18.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/4e6c81b7-4f3a-fd5f-6518-09759a8ea590.png)
![スクリーンショット 2020-09-21 20.19.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/50ca9f42-ca25-7fa4-621d-f10d99f36df5.png)
Previewコードを書くときに使うプロトタイプたち↑

![スクリーンショット 2020-09-21 20.19.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/152c4ffb-c1f2-5272-ccf6-233ecc174e0f.png)
外部から状態を注入できるような、「PreviewableなView」にしておけると良い

![スクリーンショット 2020-09-21 20.19.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/02c61c4e-3f1a-45e9-89f0-bb385a00833d.png)
メルペイでの活用例
短いテキストの場合、長いテキストの場合のレイアウト崩れがないか、一度にチェックできる

![スクリーンショット 2020-09-21 20.20.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/43128fe8-6651-ebde-0359-127ac58aec69.png)
異なる画面サイズの端末だったり

![スクリーンショット 2020-09-21 20.20.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/0b5d1867-0291-2521-7ac7-754ee7712343.png)
多言語対応している場合は、言語ごとに見たりもできる

![スクリーンショット 2020-09-21 20.21.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/184bab2d-8df7-f8c9-a480-979d149e1def.png)
iOS13未満もサポートしている場合はどうしたらいいのかというと、2つのやり方がある
* マクロを使ってPreviewコードをビルドから除外する
* Preview専用のターゲットを追加する

![スクリーンショット 2020-09-21 20.21.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/6aca1d15-ce46-e24b-27ab-3ba32b313fd5.png)
Xcode Previewsを導入して既存アプリをSwiftUIの開発スタイルに寄せておくと、SwiftUIへの移行がよりスムーズになるかも？

### ひとこと所感
いろんな状態のViewを一度に表示・確認できるのはめちゃくちゃ便利だなと思いました！毎回Simulator起動するのめんどうなので、ぜひ導入したい…

## XCUITestのつらさを乗り越えて、iOSアプリにUITestを導入する
### 概要
* スライド
    * [XCUITestのつらさを乗り越えて、iOSアプリにUITestを導入する - Speaker Deck](https://speakerdeck.com/satotakeshi/xcuitestfalseturasawocheng-riyue-ete-iosahuriniuitestwodao-ru-suru)
* YouTube動画
    * [iOSDC Japan 2020: XCUITestのつらさを乗り越えて、iOSアプリにUITest… / 佐藤剛士](https://www.youtube.com/watch?v=0XGRjJBZKEY)
* プロポーザル
    * [XCUITestのつらさを乗り越えて、iOSアプリにUITestを導入する by 佐藤剛士 | トーク | iOSDC Japan 2020 - fortee.jp](https://fortee.jp/iosdc-japan-2020/proposal/e6c39712-3efa-4f0c-8d9d-ecebdfcae820)

### 内容
![スクリーンショット 2020-09-21 20.37.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/e3e5f09f-73ed-70bc-81c1-2e6ce2e27d98.png)
UITestのつらさ。いつの間に壊れている（悲しい）

![スクリーンショット 2020-09-21 20.37.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/fadad12b-6f3e-3174-af68-91f66c783de0.png)
UIは変わりゆくものだから…

![スクリーンショット 2020-09-21 20.38.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/3f6fe14c-0fb9-c375-4813-4a20932190ad.png)
もともと手動テストのみだったが、QAの工数を減らす手段の一つとしてUITestを導入

![スクリーンショット 2020-09-21 20.38.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/44ac1820-0ca6-198b-d07f-b2354f9361ae.png)
新機能と既存機能、どっちを対象にするか？という話があるが、メルペイでは既存機能に対象を絞った
UITestは繰り返し実施されるテストと、安定稼働している機能に対して行うと効率が良い

![スクリーンショット 2020-09-21 20.39.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/07c97839-ae3d-2411-d2ed-17df57e22a36.png)
リグレッションテストに組み込み、効率化を実現した

![スクリーンショット 2020-09-21 20.39.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/831e4d5e-ea72-fd59-3a4c-11ddb51883f1.png)
XCUITestに入門する上で押さえたい3つの重要なクラス

![スクリーンショット 2020-09-21 20.40.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/cdbe818e-3d7f-468e-d5dd-6f6449ac30fa.png)
実際のコードはこんな感じ
テスト対象アプリを定義 → UI要素検索 → UI要素取得 → UI操作 → UI検索 → 表示チェック

![スクリーンショット 2020-09-21 20.41.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/386d2ed0-7b91-1e0d-0655-106e1a9aac17.png)
UITestを書いていると、重複したコードがあることに気づく
まとめたい

![スクリーンショット 2020-09-21 20.41.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/c927b081-6e85-1ed9-e138-e854fcbd5e80.png)
Page Object Patternというデザインパターンが有効

![スクリーンショット 2020-09-21 20.41.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/605c4816-2c04-5709-0b2b-8ba5e6d75f17.png)
3つの大きなメリットがある

![スクリーンショット 2020-09-21 20.41.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/24f6e0bb-a6e2-eafd-bb39-dbfabd6c3133.png)
PageObjectable プロトタイプを定義して、重複するコードをまとめる

![スクリーンショット 2020-09-21 20.43.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/1bef6fe4-880c-f259-60a4-93a6944af163.png)
UITestは並列化実行しても時間がかかる

![スクリーンショット 2020-09-21 20.43.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/c6b436fa-e7ef-4de2-fa8a-821e2da0b0b4.png)
メルペイでは夜間実行したり、GitHub ActionsのLabelトリガーを使ったりしている

### ひとこと所感
苦難に立ち向かった知見が詰まっていて、これからUITestを始める人にとってぴったりのトーク内容でした。具体的なコードがあったのでとてもわかりすかったです。

## Webとネイティブアプリの付き合い方を改めて考える
### 概要
* スライド
    * [Webとネイティブアプリの付き合い方を改めて考える / Native apps and web - Speaker Deck](https://speakerdeck.com/kiwi26/native-apps-and-web)
* YouTube動画
    * [iOSDC Japan 2020: Webとネイティブアプリの付き合い方を改めて考える / kiwi](https://www.youtube.com/watch?v=3iEGEiPh-gQ)
* プロポーザル
    * [Webとネイティブアプリの付き合い方を改めて考える by kiwi | トーク | iOSDC Japan 2020 - fortee.jp](https://fortee.jp/iosdc-japan-2020/proposal/d996c43a-834b-4bfe-b15a-67457725da02)

### 内容
![スクリーンショット 2020-09-21 21.03.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/438abd7c-cd84-0168-aec2-41ad87a923b4.png)
![スクリーンショット 2020-09-21 21.03.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/2f3deaae-2f8f-060b-f0c0-b5f425e2d317.png)
新しいサービスを作るようになったときのあるある

![スクリーンショット 2020-09-21 21.04.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/c4e93717-5e82-de51-e508-f665aef47f62.png)
Webとネイティブアプリの比較
* アプリ単体での起動・動作
* オフライン動作
* プッシュ通知
などはネイティブアプリにしかない機能

![スクリーンショット 2020-09-21 21.04.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/c0958771-7a78-a698-fe73-d9beeec93b03.png)
PWAとは？
ネイティブアプリっぽく動くwebアプリケーション

![スクリーンショット 2020-09-21 21.05.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/8da7dc9b-7e30-9f70-122a-d29747ee1f8c.png)
PWAも比較
インストールが可能なので、アプリ単体で立ち上げることができる

![スクリーンショット 2020-09-21 21.05.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/8451d181-2e78-ac5c-bc6c-043f8fabfa5e.png)
App Clipsも比較

![スクリーンショット 2020-09-21 21.05.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/16b953af-b53a-af99-2bc1-3cdc771a15ca.png)
（ここから先はあくまで私見によるもの と伝えつつ）
ネイティブアプリと同じ体験をWebでも提供することは可能か？
プッシュ通知や最新のiOS技術のことを考えると難しいのでは

![スクリーンショット 2020-09-21 21.06.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/8356f538-aa6a-ba51-92c5-3fb33713e5d4.png)
現状、プッシュ通知はネイティブアプリ一択

![スクリーンショット 2020-09-21 21.06.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/b4410444-4acc-e41d-ed4d-14ce6f2644b5.png)
どういうときにWebを活用したら良いか？
* まずは広く機能を提供したいとき
* プッシュ通知がいらないとき
* 最新のOS機能がいらないとき

![スクリーンショット 2020-09-21 21.06.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/05f9082a-6a94-44e1-27d1-bb713936bc10.png)
専門知識が必要だったり、iOS/Androidセットで作らないとユーザーが減ってしまうことなどがネイティブアプリのデメリット

![スクリーンショット 2020-09-21 21.06.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/6e02e95e-7f51-c727-bc0b-a26df17e93a0.png)
Googleからの検索流入が見込める、両OSに対応できるのはWebのメリット

### ひとこと所感
アプリエンジニアなのでネイティブを推したい気持ちはありつつ、Webのメリットも知った上で正しく技術選択をしていく必要がありますよね…。深く考えさせられるトークでした！

## テストコードが増えるとバグは減るのだろうか？ - 「0% → 60.3%」で見えた世界の話
### 概要
* スライド
    * [テストコードが増えるとバグは減るのだろうか？ / Does more test code mean fewer bugs? - Speaker Deck](https://speakerdeck.com/ahiru/does-more-test-code-mean-fewer-bugs)
* YouTube動画
    * [iOSDC Japan 2020: テストコードが増えるとバグは減るのだろうか… / ahirustarrr](https://www.youtube.com/watch?v=AEfwBycPRfQ)
* プロポーザル
    * [テストコードが増えるとバグは減るのだろうか？ - 「0% → 60.3%」で見えた世界の話 by ahirustarrr | トーク | iOSDC Japan 2020 - fortee.jp](https://fortee.jp/iosdc-japan-2020/proposal/f12fb46e-1604-4339-8f76-4289fb835e6e)

### 内容
![スクリーンショット 2020-09-21 21.22.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/07335431-c394-40c0-dd59-5a3807fc09a0.png)
仕様は決まった！と言っても、実は完全には決まっていないことも…（あるある）

![スクリーンショット 2020-09-21 21.23.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/04cd5392-338a-aa14-5a73-450593f3ba8d.png)
テストを書くことで仕様の理解が深まる

![スクリーンショット 2020-09-21 21.23.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/470984b4-a9a4-007d-4c2a-e55725b9edb3.png)
テストには動的テストと静的テストがある

![スクリーンショット 2020-09-21 21.24.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/4b95f523-7c1d-0f25-9a39-b7fd566949e8.png)
仕様書のチーム内レビューは静的テストに分類され、動的・静的を併用することで大きな成果が得られる

![スクリーンショット 2020-09-21 21.26.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/1ca14e78-89c1-f3ea-6f1a-4d55188319e4.png)
UI，ロジック、APIなどそれぞれテストが書けていれば、不具合の原因特定も容易になる

![スクリーンショット 2020-09-21 21.26.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/80a4da3c-8fff-5702-9afb-86a0b7583664.png)
モックが書けていれば、意図しないレスポンスが返ってきたケースなども再現できる

![スクリーンショット 2020-09-21 21.27.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/136a6754-0673-5195-8af0-44258b089de5.png)
![スクリーンショット 2020-09-21 21.27.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/e9382285-4e0c-b91e-b7cb-a4dcb8211e60.png)
しかし、適切なテストを書くには、経験や慣れ、様々な知識が必要

![スクリーンショット 2020-09-21 21.29.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/d8fcc285-2b9b-eb3b-48a7-ef1c08df7783.png)
長い目で見たら役に立つが、開発時点では間違いなく工数がかかる
それを許容できる開発環境が必要

![スクリーンショット 2020-09-21 21.39.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/88a695b4-5bc1-b1e9-e709-956bc4ad2bc9.png)
現状の課題をよく見つめ、様々なテスト手法がある中で最適なテスト方法を選択すること
費用対効果があるかを考えるのがポイント

![スクリーンショット 2020-09-21 21.29.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/5febeef3-3a56-d592-5f94-ffc7a078f568.png)
![スクリーンショット 2020-09-21 21.29.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/e707d5f8-6a69-916f-cea4-5e2de08dab83.png)
テストコードが増えるとバグが減るか？
→ △

![スクリーンショット 2020-09-21 21.29.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/c0af60c2-ae60-096e-90c6-0307f1fe2173.png)
テストコードにバグがないなど複数の前提条件を満たすとき、バグは減らせる

### ひとこと所感
△というのがリアルでいいですね。経験が浅いとテストコードのテストコードが必要になってきそうで、テスト難しいなって改めて思いました。

# おわりに
（トークの内容が濃すぎて）気づいたら大作になってしまいました！

見たかったけど見れなかったトークのスライドをここに置いておきます。
YouTube動画が配信されたら見るぞ〜:yum:

* [Background Notificationで新聞紙面の大きい画像の自動ダウンロードを実現する - Speaker Deck](https://speakerdeck.com/shimastripe/background-notificationdexin-wen-zhi-mian-falseda-kiihua-xiang-falsezi-dong-daunrodowoshi-xian-suru?)
* [4年間運用されて表示速度が低下した詳細画面を改善する過程で得た知見 - Speaker Deck](https://speakerdeck.com/martysuzuki/iosdc-japan-2020-day-1-track-b-10-50)
* [iOSリジェクト戦記  - Speaker Deck](https://speakerdeck.com/hcrane/iosdc2020-iosriziekutozhan-ji)
* [iPadOSDC: Multiple Windows - Speaker Deck](https://speakerdeck.com/hironytic/ipadosdc-multiple-windows)
* [400種類のアプリを毎日ビルドする自動化の技術 - Speaker Deck](https://speakerdeck.com/kishikawakatsumi/400zhong-lei-falseapuriwomei-ri-birudosuruzi-dong-hua-falseji-shu)
* [Flutter移行の苦労と、乗り越えた先に得られたもの - Speaker Deck](https://www.slideshare.net/KeisukeKiriyama/flutter-238560064)

iOSDC本当に楽しかったです！みなさまお疲れ様でした！！！！:tada:
![スクリーンショット 2020-09-21 18.28.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/9d55dd9c-303f-1d47-ee8e-f661cf35ed95.png)