第27回 potatotips (iOS/Android開発Tips共有会) at GREEに参加してきました (ja)
タイトルの通り、第27回 potatotips (iOS/Android開発Tips共有会) at GREEに参加してきました!
@GREE
初めてGREE社にお邪魔させていただきました!発表後の質疑応答はなしで、懇親会でどんどん聞きましょう〜!というスタンスでした。タイムキーピングがしっかりとしていたのが良かったと思います。合間合間でなにか一言や音楽など等あるとよかったかも?とも思いましたが、会場自体は広く懇親会のピザも飲み物も美味しかったです。GREE社の皆様、場所等ご提供ありがとうございました!
そして今回は、Androidのブログ枠 の参加者として参加しましたので、Androidの発表の内容をまとめたいと思います。とは言っても、結局は資料を見るのがなんだかんだ一番需要あるだろうなと思い、個人的な感想、その場のメモを少しだけと、あとはスライド資料を載せる形にしました。 それでは、どうぞ!
GoMobileでModuleを作った話 by @kmizutani0222さん
資料は、kmizutani0222さんのGoMobileSampleレポジトリのREADMEを参考に。
iOS / Android間のテストの共通化というのは良いなぁ、と思っていて。提供する機能は両OSまったくかほとんど同じなので、それをgoで共通的にテストを行うというのは理にかなっていると思いました。個人的にまだまだgoには手を出せていませんが、go×Androidも今後色々できそうかも・・?という流れはありそうなので、つまみはじめなければ、、と焦り始めています…
メモ:
- iOS / Android 間のテスト共通化を行いたかった。
- APIを呼び出して、受け取ったJSONを返す
- APIライブラリ化
- 返すJSONを想定されていればアプリ側でどう実装しようと勝手なのは良かった
- 一応まだ実験段階
- GO-MOBILE という郷ひろみのサイトが出てくる!いやだった
- publicなメソッドの引数に配列を渡せない!苦労した
- リクエストのパラメータを指定するようにした
- githubにソース残ってるよー!
Networkの切り替え感知について by ヤマグチケイスケさん
業務においてもNetwork周りで再現しないバグ報告なあどがあがっている中で、個人的にこの発表はとてもありがたかったです。NetworkRequest.Builder周りは早速業務の中で活かせるところ探し始めたいと思いました。
メモ:
- 5.0以上 (21以上)
- ネットワーク調査
- Wifi? Cellular? どういうタイミングで切り替わった?
NetworkRequest.Builderクラス- 関係のあるイベントのみ完治したい
- WANに繋がるCellular通信だけ!
-
addCapability,addTransportType - VPNではないとき、なども検知できる
- WANに繋がるCellular通信だけ!
-
- http://developer.android.com/intl/ja/reference/android/net/NetworkRequest.Builder.html
- かなり細かい制御ができる => 面白い
- onAvailable
- onCapabilitiesChanged
- onLosing / onLost 間が30秒くらいの感覚値!?
Apk size diet by @konifarさん
Apkサイズが顕著にユーザーレビュー・数値に出ているというのは、konifarさんのアプリが海外向けであることもあるかもしれませんが、これってどのアプリにも多少なりとも影響するところだな、と思います。PngyuやJPEGminiは使ったことがあったのですが、ImageOptimは聞いたことがなかったのと、nodpiも業務で改めて精査したいと感じました。VectorDrawable対応もまだ何やるかもわかっていないのでちゃんと調べてやろうと思いました。
メモ:
- アプリのサイズを気にするユーザーが意外と多い
- 問い合わせ・レビューでも言われる
- インストール率・DAUにも影響するレベルになることがある
- 海外では低スペック端末が出回っている・ネットワーク環境がすぐれていない
- 広告SDK入れたら 16MBぐらいまで増えた => アプリサイズが増えれば増えただけDAUが下がった。
- 16.2MB -> 13.5MBまで減らした
- 画像最適化がほとんどだった
- あとはProGuard
- apk.sizeという、ビルドの最後にAPKサイズを吐いてくれるプラグインがある
e.g. DroidKaigiのアプリでは下記を行い、2.3MBくらいへった
- Proguard -1250KB
- 難読化は面倒という人には、難読化を入れずに最低限で減らせることもできる。
- 不要画像削除 -290KB
- shrinkResources?
- 画像最適化
- ImageOptim(https://imageoptim.com/)
- nodpi
- 一番大きい画像だけnodpiにぶち込む
- VectorDrawable -200KB
- アイコンの数だけ成果が出る!
Automated translation on CI(仮)by @kobakeiさん
業務では日本のユーザーがほとんどなので翻訳には関わっていないですが、ムダを省くための自動化は素晴らしいなあと本当に思います。DroidKaigiでkonfiarさんが発表していたこともありますが、gengoは有名ドコロなのだな、と今回察しました。まだまだ英語対応これからやりはじめる?という具合ではありますが、しっかりインデックス貼っておこうと思います。
メモ:
- 翻訳めんどくさい!
- CIで自動化しよう!
- ベースは日本語 / 英語、韓国語、中国語
- 翻訳サービス: Gengo (APIあり、安い)
- CI: Circle CI
- machine: ruby
- dependencies: gem install Gengo
- deployment: translate!
- フロー
- 翻訳不要な文字列を抽出 =
[[[]]]でかこい、それを検知する。 <string foo="bar" translatable="false" />- 1 string = 1 job
- response size > 60kb だと面倒なので、極力小さく
- 今はsandbox環境でテスト中
Android Wear by ナンキチ(@nankiti)さん
最近あまりAndroi Wearについての話がなかったので、少し新鮮な感じがしました!発表内容はしっかりと濃かったけれども流れも面白かったです。最初のつかみと、デモのくだりがとくに面白かったです。
今日の登壇資料!!気分が向いたらデモのところ撮って投稿します。https://t.co/eE3kXMKwau#potatotips
— 南里勇気 (@neonankiti) March 16, 2016
とのこと。
メモ:
- アダ名はバイソン
- Android Wear? 「ユーザーとの実世界との隔たりを最小限に」!
- API実装が簡単
- 周囲にあるスマートフォンを検知する!
- ユーザーがほしい情報を欲しいタイミングで提供する -> Android Wear
- 具体的なサービス設計ができてないとAndroid Wearを事業で使う機会はないかも
- デモ:「直前まで動いていた・・・」おしい!
ORMの選び方(Android編) by @gfxさん
ORM、業務ではほとんど触っていないのでちゃんと勉強しようと今回思いました。(というかさっきから全部コレな気がする。。)OrmaはDroidKaigiアプリであったり弊社アプリも使っていると伺ったことがあったので、まず個人で試してみたい感じです。また、RealmのAPKサイズがでかすぎたのには驚きました。あとRebuild.fmまだ聴けていない!ので明日あたりに聴きます!
メモ:
- ORMって。。いまいちベストプラクティスわからない
- ORMに求めるもの
- コードは生成すべき!リフレクションは遅い。
- マイグレーションはつらくないのがいい。DBはあんまり触りたくない。
- 制約は課されたくない。
- コード補完との相性が良いほうが良い
- Ormaは基本自動でマイグレーションしてくれる(リネーム以外)
- RealmはAPKサイズが5MBくらいある。でかい。
超速CI by @KeithYokomaさん
CI系はほんとにいろいろなものがあり、Circle CIが主流になってきつつある、、のかな??というなかで、Wreckerというサービスについて知ることができて個人的にとても良かったです。「環境セットアップ3秒」は聞いただけでも嬉しい感じがしますね。Dockerも触ったことがほとんどないので、練習をかねてここらへんの調査やっていきたいと思いました。
メモ:
- CIいろいろあるけど、どれもpros / consある
- Dockerにすべての環境をぶち込み、その環境を動かすだけで良い、というふうにしたい。
- Wercker(http://wercker.com/)
- 環境のセットアップに3s, ビルドに4minとか!最高!
CircleCI の Docker サポートは、コンテナの中でコンテナを動かすのでつらみがあります 😨 #potatotips https://t.co/IttjXgvhhD
— KeithYokoma@闇のエンジニア (@KeithYokoma) March 16, 2016
Rx{Java,RxAndroid}Plugins with unittesting by @izumin5210さん
「Rxでのテストする際にはこれを使おう!」集でした。iOS / Android両チームでRxを主とした実装であれば実装ベースで会話できるのは良いなあと思いました。現在のチームではAndroidも最近導入し始めた程度で、iOSのほうは入れていないという感じなので、メリット、デメリット一度考えたいと思いました。
あと、純粋にテスト書かないと、、、と思いました。。。 orz
メモ:
- iOS / Android間でRxを使えば、共通言語としてネイティブ間の会話が成り立つ。
- Can we replace schedulers?
- RxJavaPlugins(http://reactivex.io/RxJava/javadoc/rx/plugins/RxJavaPlugins.html)
- RxAndroidPlugins
- Schedulersを差し替えたり、エラーハンドリング、起きたイベントを取得・操作できる。
まとめ
久しぶりのpotatotipsでしたが、もちろん iOS / Androidのこともそうですが、CI事情や多言語化対応、ORMに関するものなど、発表としてユニークなものが今回は特に多くてよかったなあ、と思いました。ぜひ次回は自分も何か発表しよう・・・。
GREEの皆様、場所を提供して下さりありがとうございました!