try! Swift Tokyo 2020 Meetup!!のまとめ

## イベント概要
try! Swift Tokyo 2020 Meetup!!

> try! Swift Tokyo 2020のMeetupをやります！
> 去年参加された方、今年参加を迷っている方、来たことがないけど面白そう！という方、ぜひぜひ遊びに来てください！
> 今回取り上げるTOPICは実際に今年のtry! Swift Tokyo 2020で登壇するスピーカーの得意としているTOPICから選んでいます
> みんなで事前にCatchUpして、スピーカーと当日盛り上がりましょう！
> また、談義の後には懇親会を開催します
> Meetupを通じて当日会場でお話しする仲間が見つかるかも...(๑˃̵ᴗ˂̵)
> トークに関してはスピーカーを絶賛募集しています。ぜひご経験をお聞かせください！

## コバナシ
- Twitterで情報共有してるのでフォローして！
  - https://twitter.com/DeNAxTech
- イベントやるのでぜひ来てください！
  - https://techcon.dena.com/2020/

## LT
### try! Swiftと、その楽しみ方について
- try! Swiftって？
  - Swift開発者のための国際コミュニティ
  - チケット購入すると参加者のSlackに招待される。
    - みんなでワイワイしよう！
- 催し物
  - セッション
    - 全てシングルトラックセッションなので同じ話題で盛り上がれる！
    - 同時通訳付き！安心！
    - Appleからスピーカーがやってくるぞ！
  - Ask the Speaker
    - Speakerと直接お話ができる。
  - WorkShop
    - 去年実績
      - Firestore
      - Swift/TypeScriptでアプリを作ろう！
  - スポンサーブース
    - 結構賑わっているので楽しいよ！
  - After Party
    - カンファレンスの後にワイワイできるよ！
- コミュニケーション
  - 難しいよね！去年にウホーイさんがスライドあげてるから参考にしよう！
  - https://speakerdeck.com/uhooi/how-to-enjoy-conference
- ワイワイしてる写真とかはスライドでみてください！
  - https://speakerdeck.com/mikiyoshida/try-swiftfalsegai-yao-tole-simifang

---
### XcodeGen(@giginet)
- 趣味はポケモンのソード/シールド
- XCodeGenとは
  - ymlなどの定義ファイルからプロジェクトファイルを作成する。
  - XcodeGenはXcodeのGUI上で対応していることは大抵できる。
- なぜやるのか
  - 課題点
    - 背景
      - 長い歴史
      - 週に10人以上が開発
      - でかい(291000)
      - ビルド時間が長い
    - コンフリクトがおきまくる。
    - プロジェクトが散らかる
    - ターゲットの追加が難しい
      - マルチモジュール化を進めているけど...
        - レビューが難しい
        - コンフリクトの解消が不可能に近い
        - 同様の設定のコピーが難しい
  - XCodeGenなら解決できそう。
    - 2018/11に導入を開始
    - 2019/9にクックパッドでブログ書きました。
- XCodeGenで何がよかったか
  - コンフリクトがなくなった。
    - 毎回生成するから当然なくなる。
  - ファイルが散らからなくなった。
    - ファイルシステム上の位置から生成するから。
  - ターゲットの追加も簡単になった。
  - 設定の変更がしやすくレビューもしやすくなった。
- 面白かった高度な機能
  - include
    - ymlを分割してかける。
      - でかいのが分けられるから設定変更も簡単
  - Target Template
    - テンプレートを作っておけばターゲットを複製できる。
    - マルチモジュール化の時に便利な機能。
  - Carthage
    - Carthageの依存関係を1行追加するだけでやってくれる。
  - SwiftPM
    - SwiftPMパッケージを組み込める。
      - 最新機能への追従が早い！
- よくある質問
  - XCodeGenの揮発が止まったら困らない？
    - XCodeが後方互換性を保っている限り大丈夫
    - XCodeGenをやめたい時は最後に作ったプロジェクトファイルをリポジトリに入れておけばok
  - チーム全体でXCodeGenを使いたいけどどうすれば...
    - Mint + Mintfileを用いたバージョン管理をする。
      - アップデートが早いので、Homebrewじゃない方が良い。
      - 全員が同じバージョンで揃えることができる。
  - CocoaPodsを使いたい。
    - XCodeGenで生成してから、pod installをする。
      - XCodeGen使うと、毎回リセットされちゃう。
    - Shell用意してあげるのが良さそう。
  - 徐々に既存のプロジェクトを移行したいんだけど。
    - ファイル整理から始めると良い。Groupとファイルシステムを一致させたり。
    - 既存のプロジェクトは残しておいたまま、適宜生成したプロジェクトで上書きする。
    - CIとか一部の開発者から徐々に広めていく。
  - 使わない方がいいプロジェクトは？
    - 小規模なプロジェクトは検討した方が良い。
      - 移行もコストがかかる。最初から使うなら良いかも。
    - ライブラリなどのプロジェクトは使わない方が無難。
- セットアップなどなどの細かい話はスライドで！
  - https://speakerdeck.com/giginet/xcodegenchao-ru-men

---
### Mint(@izm256)
- Mintとは
  - Swift特化型のHomebrewのイメージ
  - Swift製のパッケージのインストールやバージョン管理が簡単にできる。
    - CathageやSwiftLintとか結構ある。
    - Mint自身も対象になる。
- Minffile
  - パッケージの定義ができる。
  - チームで共有が可能！
- パッケージの公開
  - 簡単なので軽く触って公開してみるといいかも？
  - インストールの方法などはスライドを参照！
    - https://speakerdeck.com/rizumi/5fen-dewakarumint

---
### PropertyWrappers(@yhkaplan)
- PropertyWrappersとは？
  - Swift5.1の新機能
  - Javaのアノテーションっぽいの使う。自分で定義することもできる。
  - ジェネリックの引数とかもできる。
- 思想とか目的
  - コードをよりDRYに書く
  - より簡単に一般的に書く(黒魔法を使わない)
- まとめ
  - ステート管理やキーチェーンとかで便利
  - Swiftの型システムが使えないのが難点(全ての解決策ではない)
    - やりすぎると使いづらくなってしまうので、よく使うところだけに適用した方がいい。
  - The Swift Programming Language → Burritosに詳しい説明がある。
- ユースケースや実装例はスライドで！
  - https://speakerdeck.com/yhkaplan/property-wrappers

---
### DifferenceKit(@ra1028fe5)
- DifferenceKitとは？
  - 差分アルゴリズムを扱うSwiftライブラリ
  - Lineとかメルカリでも使われている。
- なぜ差分アルゴリズムを使うか
  - 画面の更新の場合
    - 1つの変更で全体が更新されるのは非効率である。
      - UIはメインスレッドでの更新が強制される/コストが高い
    - 差分だけ更新する方が良い。
- どうすれば差分の更新が検知できるか
  - 配列を取り回していればわかるが面倒。
  - APIの取得結果の差分をプログラムチックに解決するのは難易度が高い。
  - 差分アルゴリズム(DifferenceKit)で解決ができる。
- アルゴリズムについて
  - Paul Heckelが書いた論文を元に作っている。
  - Myers/WUなど他のアルゴリズムも存在する。
- パフォーマンス比較結果などはスライドをチェック！
  - https://speakerdeck.com/ra1028/differencekit-in-action

---
### SwiftUI(@hatakenokakashi)
- SwiftUIでImagePicklerを使う！
  - デモアプリ作ってみた。
    - (リポジトリ要確認)
- PassthroughSubject
  - Combineフレームワークの概念
- UIViewContollerRepresentable
  - ViewControllerをSwiftUIと連携するためのプロトコル
  - makeCodinatorでdelegateのあるUIKitとSwiftUIを連携できる。
    - delegateのインスタンスを渡す。
- TIPS
  - ボタンの領域を広げてもタップ領域は広がらない。
  - ZStackとVStackで子要素のZポジションを調整できる。(バリ便利)
    - VStackの中では、if letは使えない。
- 詳細な実装例はスライドで！
  - https://docs.google.com/presentation/d/1k7559tw7LpstFpU3rHUvk03K_2w_MZ_ioK4nfQwb47k/edit

## 感想
- XcodeGenに特に魅力を感じた。
  - プロジェクトファイルのコンフリクト解消はかなりのストレスだった。
- SwiftUIは魅力的だが、OSの制限上まだ使用できないプロジェクトが多そう。
  - 他の開発者が今後どうやって導入しようとしているのか気になる。
- try! Swiftではみんなでワイワイしよう！