try! Swiftメモ: Day1-13 Realmを使ってコラボレーションアプリを作る
Realmのセッションもありました。
Realmは最初は少し慣れが必要ですが、ドキュメントも整えられているので使いやすく、とても便利です。
サーバーを構築することなくデータを同期したり、ネットワーク状況の考慮もされるので革新的なものだと思います。
概要
このトークでは、オープンソースのRealm Mobile Databaseを紹介し、サーバーサイドコンポーネントと合わせてRealm Mobile Platformsがどのように完成したかを示します。これを利用すると、テクノロジスタックの実装詳細として同期とネットワークを扱うことができます。 これまで大仕事だったライブコラボレーションのような機能を、不意にすべての開発者が簡単に利用できるようになったのです。このトークでは、残りのデータベースの部分をベースとしてリアクティブにアプリを構築する方法を示します。
コラボレーションアプリをRealmで作る
- What is コラボレーションアプリ?
- 複数のユーザーが同時に扱うことができるアプリ
- e.g. Slack, JIRA, todoist ..
Realm Mobile Databaseの紹介
- Realmとは?
- ORMではない。データベースそのもの
- 組み込み
- モバイル機器のためにゼロから開発
- Object-oriented
- コードでやるので、コードを扱うだけで良い
- すべてはオブジェクトです
- Now onto Realm Mobile Platform
- クロスプラットフォームもサポートしている
User Case
try! Swiftメモ: Day1-8 クックパッドアプリのテストを味わう
テストって実は難しくて、テストを行うための設計がされていないとちゃんと出来ないものです。
その点、Cookpadアプリでは画面遷移の8割をちゃんとUITestできているというのはすごいですね。
テストの大事さをきちんとチームで共有できているのだと思います。
概要
品質やテストの話は往々にして提供するサービスやアプリのコンテキストに依存します。クックパッドのiOSアプリを題材にして、私たちが機能的な品質を保つためにどのようなテストを行ってきたかをお話します。特に、自動化されたテストに関してお話します。UIのリニューアルや様々な取り組みと変化だけではなく、Objective-CからSwiftへの書き換えなど、iOSを取り巻く環境は短い間に大きく変化しています。その中で、どのような取り組みにより最低限の不具合を防ぎ、iOSアプリをリリースし続けてきたのか。また、これにより得られた学びや、これからの取り組みに関してもお話しいたします。
トーク内容
- Cookpadでやっているテストの話
- Test Automation - UI Tests
CookpadのUIテストについて
- 画面遷移はほぼ網羅した
テストの実施
- 画面遷移はほぼ網羅した
テスト対象について
- 最低限クラッシュをしないこと
- デグレを起こさないようにする
- Testピラミッド
- しばしば手動テストが膨れてしまう
- 逆ピラミッドになりがち
- ちゃんとしたピラミッド型になるのが理想だね
- しばしば手動テストが膨れてしまう
- 画像の更新時
- image diffを利用して差分を見る
テストしやすくする
try! Swiftメモ: Day1-6 毎日リアクティブ
reactiveもかなり定着して来た感じですね。
Ustreamのような大規模なサービスでも安定的に活用できているそうなので、かなりパワフルで期待できますね。
これまでは使えば使うほどイベント管理ができなくなりそうなイメージでしたが、
ちゃんと突き詰めると簡潔にかけると聞いて、今度採用してみたいと思いました。
reactiveの楽しさに触れて仲間入りしたい
概要
Why reactive ?
- Ustream
- 何百万人に出すので、安定している可読なコードベースを意識
- → であるがゆえにreactiveなコードをかいている
- == reactiveは安定的で可読的
- なにより楽しい
- → であるがゆえにreactiveなコードをかいている
- いくつかのパラダイムをミックスして使っている
- 求めているクオリティを維持するため
What is reactive ?
- リアクティブとは?
- データとデータフローを管理するのがリアクティブ
- CWS Signal
- 非同期データ
- reactiveで解決しよう
- stateを減らすことがメリットとなる
- テストしやすくなる
- 変化に対するリアクションとして定義していく
- how ではなく whatにフォーカスすることができる
- 宣言型で書ける
- ReactiveKit
- コンセプトは似ているので、そこを学ぶ
リアクティブのメリット
When do i apply it(reactive)?
- ある複雑なコードがあるとき、reactiveを使うとさらに複雑になる
- しかし、ある地点を過ぎると簡潔になる
- うまくいくケース
- reactiveをviewとvcでつかう
- 通信で使う
- MVVM
- ViewとViewロジックでの同期
- 複雑性に対して解決を見出そうと思っている
- ステート変更を管理する
- Reduce
- flagが3つくらいあったら
- reactive(flag1) && reactive(flag2)
- というようにかける
- flagが3つくらいあったら
- Combine
- Simplify , Unify async operations
- operationをチェーン化していく
- trade off
Tips
Debugging - No.1
- どうやってデバッグする ?
- 一定のストリームに問題がありそうなときはどうするか
- console.logをストリームにアタッチしていく
- 一定のストリームに問題がありそうなときはどうするか
- どうやってデバッグする ?
Fancy KVO
- Observationがパワフルなので、色々使いたくなる
- KVO使い過ぎるとパフォーマンスが落ちてしまう
- View bindingを使っていこう
- Observationがパワフルなので、色々使いたくなる
inject side effect carefully
- side effectが増えると、測定が難しくなる
- どこが変わるとどこが変わるかがわかりづらくなる
- side effectは本当に必要な時だけ入れる
- e.g. トラッキングとか
- side effectが増えると、測定が難しくなる
Avoid chaos
- Immutability + schedulers
- .onScheduler(MainScheduler)
- Immutability + schedulers