atte FeS【Go・Swift開発編】 に行ってきました

18 Apr 2016

Drawing

atte FeS【Go・Swift開発編】に行ってきました。

結構人気で抽選だったのですが、ブログ枠が空いていたのでブログ枠で参加しました。

全体の感想としては、 新しいサービスらしくモダンな技術を使っていて素敵だと思いました。 新しいサービスはスピード重視で徐々に良くしていくスタイルで開発が進んで行きがちですが、 そこをきっちり後のことを考えて設計しているのはすごいと思います。

あと、ビールとか軽食も素敵でしたw

資料などは こちら に上がっているようですので、 気になるトピックを紹介しつつ振り返りたいと思います。

1.golangとgoogle app engine

メルカリの初期エンジニアの一人らしいです。 golangとgoogle app engineのお話でした。

なぜgolang&GAEにしたのか

技術の選択の軸として、

というのを念頭に置いていたそうです。

GAEはすごい

僕はherokuやAWSとかしかPaasを触ってきてなかったですが、 GAEの機能やパフォーマンスの良さが魅力的に感じました。 herokuもコンテナベースだったとは思いますが、 やはりGoogleの力なのか、パフォーマンスのレベルが全然違いそうですね。

気になったのは、RDB・SQLではなくBigtableとDatastoreを使ってるというところですね。 BigtableもDatastoreも実際にどうプログラムを組むのは知らないのでなんとも言えないですが、 Joinとか厳密なTransactionがないみたいな話だったけど、決済とかすごくセンシティブな実装を求められそうですが、 その辺ははまりどころとかなかったんでしょうか?すごく気になりました。

golong

golangはすごく良さげですね。 型チェックがあると変更しやすいっていうのは本当その通りだと思いますし、 関数型言語ほど、キツくもなくてバランス取れてるのかなと思います。 1週間後にまた触るのなら、元取れる的なことをおっしゃっていて、 思い返してみると本当その通りだなと思いました。

golangの話で一番印象的だったのは、clientチームにmasterのgodoc共有しとけば、 api documentの代わりになるという話でした。 それ自体はgolangに特有の話でもない気その辺もしますが、 やはり型があるとself documentedになるので、その辺が効いてきているのですかね。

2.Swift とRxSwift

大庭さん。先週Reactive Swift Meetupで最初に話されていましたね。 mercari, atteのiosを両方とも立ち上げたらしいです。 FRPの説明は口頭でうまくまとめるのは難しいだろうなと思いますが、 わかりまとめてらっしゃってさすがだなと思いました。

メルカリはReactiveCocoa

印象に残ったのは、mercariではReactiveCocoaをヘビーに使っていて、FRPライブラリなしは考えられなかったという話。 僕も家ではReactiveCocoa+Swiftでコード書いているけど、 会社ではobjc-cを書いててすごく辛くなるので、ものすごい共感しました。

JSONRPCKitを作った話

APIKitを使いたかったけど、 うまくはまらなかったので、 JSONRPCKitを自作したというのも良いなと思いました。 オープンソースで作ったというのが素敵ですね。

RxSwiftの例がわかりやすかった

RxSwiftの具体例がどれも具体例がしっかりしていてわかりやすかったですね。 複数画像アップロードをcombineLatestでpromise的に使う。 incremental searchをdebounceでやるとかは、 個人的にも人に説明するときに使おうと思いました。

3.Atte iOSの設計と開発フローの変遷

石川さん。この方もReactive Swift Meetupで話されてたし、try! swiftでも話されていましたね。

Paginationをprotocolを使って一元化した話

APIKitもそうですが、 protocolの使い方のお手本のような設計・実装だと思います、素晴らしいです。 僕も最近、似たようにページネーションをprotocol・protocol extensionで一元化したのですが、 イキって抽象化しようとしすぎて、結果コンパイルエラーになるという、パターンを繰り返しつつ、 すっごいコンパイルエラーと戦いながらリファクタリングしてました。 石川さんはコンパイルエラーと戦ったのだろうか。型チェックが厳しい言語特有の リファクタリングし辛さみたいなのもあると思うのですが、もっと質問しておけばよかった。

キャッシュ戦略の変遷

キャッシュの話。もともとRealmに保存していたが、

など、問題が出てき始めたので、パージ前提でLRUにディスクキャッシュ方式に切り替えたという話。

みんな実装しているのに割と議論されていないところの話が気がしていて、 目から鱗的な内容でした。LRUキャッシュを実装するものそこそこ時間もかかる気がしますが、 ISDiskCacheとかを使ったのだろうか。

自動デプロイ

travis ci + deploy gate + test flightで手元でarchveしない、 デザイナーもバイナリ作れる環境したという話。 アーカイブに7分で割と早くてびっくりしました。

4.最後に

GAE, golang, Swift, RxSwiftとモダンな技術を積極的に取り入れて素晴らしいと思いました。 特に、GAEとLRUの話が個人的には目から鱗でした。 ブログ枠とか初めてですがこんな感じで大丈夫なんでしょうかね。

一応、メモも貼っておこうと思います。


——–以下メモ———

golangとgoogle app engine

  1. Go GAEは非常に有力
  2. Paasの時代が本格的に始まってきた

Why Go? Why GAE?

分散システムのためのDatastore

質問

Swift とRxSwift

Atte iOSの設計と開発フローの変遷

1 同じ構造の実装の一元化

  1. pagination
    • ViewModel
    • UIView, UIViewController <-> ViewModel <-> APIClient, Model という構造
    • UIView, UIViewController部分はは差し替え可能
    • Paginationを使っている箇所
    • timeline, like list, message, notification… - PaginationViewModelで一元化
    • type parameters: Element, Request
    • Protocol で実装のための足場を用意
    • Protocolで定義したメソッドだけで実装 - 開発がどうなったか
    • 高速
    • 安全
  2. キャッシュ戦略の変遷
    • Realmでcache: responseをRealmに保存
      • 何もかもRealmのObject
      • 何が永続化されているか型からわからない
      • 削除ポリシーがシビア
      • migrationも大変
  1. 自動デプロイ

Tweet
comments powered by Disqus