きももまなきんのダンス

ぼちぼちと、技術的なあれこれを。

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

  • データのバックアップ
    • 新しいデバイスへのインポートも可能
  • バイス間の同期 Cross Device Sync
    • クロスデバイスの同期
      • お買い物リスト、同時にお絵描きする
  • 既存のバックグラウンドを置き換える
  • アプリからJSONを排除する
    • Object relationalミスマッチを解決する
  • Realmの通知機能
    • プロパティの変更を監視 KVO
      • 特定のプロパティが変わると、それをトリガーに変更が通知される
    • オブジェクトの変更を監視
    • コレクションの変更を監視
    • ファイルの変更を監視

      Event Handler

  • アクセス権の管理
    • Admin権限のみデータを改変できる

try! Swiftメモ: Day1-8 クックパッドアプリのテストを味わう

テストって実は難しくて、テストを行うための設計がされていないとちゃんと出来ないものです。

その点、Cookpadアプリでは画面遷移の8割をちゃんとUITestできているというのはすごいですね。

テストの大事さをきちんとチームで共有できているのだと思います。

概要

品質やテストの話は往々にして提供するサービスやアプリのコンテキストに依存します。クックパッドiOSアプリを題材にして、私たちが機能的な品質を保つためにどのようなテストを行ってきたかをお話します。特に、自動化されたテストに関してお話します。UIのリニューアルや様々な取り組みと変化だけではなく、Objective-CからSwiftへの書き換えなど、iOSを取り巻く環境は短い間に大きく変化しています。その中で、どのような取り組みにより最低限の不具合を防ぎ、iOSアプリをリリースし続けてきたのか。また、これにより得られた学びや、これからの取り組みに関してもお話しいたします。

トーク内容

  • Cookpadでやっているテストの話
  • Test Automation - UI Tests
  • CookpadのUIテストについて

    • 画面遷移はほぼ網羅した

      テストの実施

  • テスト対象について

    • 最低限クラッシュをしないこと
    • デグレを起こさないようにする
  • Testピラミッド
    • しばしば手動テストが膨れてしまう
      • 逆ピラミッドになりがち
    • ちゃんとしたピラミッド型になるのが理想だね
  • 画像の更新時
    • image diffを利用して差分を見る

テストしやすくする

  • コードにおける誤解を避ける

    • それぞれの層をきちんと責務別に分けることが大事
  • MVA 必要最低限アーキテクチャ

    • Minimum Viable Archetecture
    • Objectがなにで、other layerでどう使われるかをい指揮する
  • DTOを利用してもいいね
    • コアデータからDTO -> DTOへ受け渡し
  • テストがあることで、怖がることなく開発をすることができる
    • 安心感

try! Swiftメモ: Day1-6 毎日リアクティブ

reactiveもかなり定着して来た感じですね。

Ustreamのような大規模なサービスでも安定的に活用できているそうなので、かなりパワフルで期待できますね。

これまでは使えば使うほどイベント管理ができなくなりそうなイメージでしたが、
ちゃんと突き詰めると簡潔にかけると聞いて、今度採用してみたいと思いました。

reactiveの楽しさに触れて仲間入りしたい

概要

Why reactive ?

  • Ustream
  • 何百万人に出すので、安定している可読なコードベースを意識
    • → であるがゆえに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)
      • というようにかける
  • Combine
  • Simplify , Unify async operations
    • operationをチェーン化していく
  • trade off

Tips

  • Debugging - No.1

    • どうやってデバッグする ?
      • 一定のストリームに問題がありそうなときはどうするか
        • console.logをストリームにアタッチしていく
  • Fancy KVO

    • Observationがパワフルなので、色々使いたくなる
      • KVO使い過ぎるとパフォーマンスが落ちてしまう
    • View bindingを使っていこう
  • inject side effect carefully

    • side effectが増えると、測定が難しくなる
      • どこが変わるとどこが変わるかがわかりづらくなる
    • side effectは本当に必要な時だけ入れる
  • Avoid chaos

    • Immutability + schedulers
      • .onScheduler(MainScheduler)

try! Swiftメモ: Day1-5 Pixcels、プロセスと情熱

プロダクトを作って行く中で何が大事かが詰まっているセッションでした。

パッションのあるトークで、聞いてて自分もワクワクしました。

快適ゾーンを出てみよう

というのは難しいですが、自分に刺さりました。

慣れた場所は快適ですが、自分を伸ばして行くにはそこから一歩出る必要があるのですね。  

続きを読む

try! Swiftメモ: Day1-4 アプリを新次元に導く3D Touch

3Dタッチの話も面白かったです。

Appleが3Dタッチの開発に5年も費やしていたのに驚きました。

それだけ力を入れているだけあって様々なケースに使いどころがあるので、どうやって活用しようかワクワクしますね。

概要

3D Touch?

Appleは3Dタッチに5年を費やしている

続きを読む

try! Swiftメモ: Day1-3 SwiftのPointy Bits

1日目第3セッションは、Pointerについてでした。

普通に開発する分には触れる機会は少ないですが、APIを利用する時にたまに使ったりしますね。

今回はそこまで深く突っ込んだ話ではありませんでしたが、概要や注意点などもきちんと説明されていて良かったです。

セッション内でもあったように、Pointerを上手く扱ってパフォーマンス面の最適化に利用していきたいなーと思いました。

続きを読む

try! Swiftメモ: Day1-2: Swift on Android

1日目2つ目のセッションは、SwiftをAndroidで動かす、という内容でした。

実現にはAndroidNDKが必要ということでしたが、なかなか闇が深そうな内容でしたね。

とはいえ、それを実現しているEric Wingさんは、やはり色々な経験をされていてすごいなーと感じました。

続きを読む

スポンサードリンク