アクトインディ開発者ブログ

子供とお出かけ情報「いこーよ」を運営する、アクトインディ株式会社の開発者ブログです

DroidKaigi2017に行ってきました。(2日目)

こんにちは、hondaです。

DroidKaigi2017に行ってきた(1日目)

こちらではDroidKaigi2日目で聴講したセッションを簡単にまとめたいと思います。

2日目に見てきたセッション

ウェルカムトーク

DroidKaigi参加者には事前にアンケートを取っていてその結果がスライドで紹介されていました。 気になった項目を抜粋してみました。

・参加者の年齢

年齢 割合
20代  46%
30代  45%
40代  6%

私は30代の部類です。今後40代も増えてくるのでしょうか。

・事業分類

事業分類 割合
自社サービス  68.2%
受託開発  23.5%

受託開発ではなかな参加出来ないのでしょうか。弊社は自社サービスですが、参加させてもらえた事に感謝ですね。

・開発規模

開発規模 割合
3〜5名  36%
2名  25.8%
1名  24.7%
6〜9名  7.9%

1名〜2名での開発規模が5割行ってますね。職場でアプリエンジニアが少ないとこういったカンファレンスが本当にありがたいです。アプリ開発で6〜9名って逆に開発を回すのが大変そうなイメージなのですがどうやって回していっているのでしょう。

minSdkVersion

minSdkVersion 割合
4.1〜4.3  36%
4.0.x  33.7%
4.4.x  15.2%
5.0.x  12.4%

6,7はさすがにないですねー

DroidKaigi公式アプリ

  • 296PRs
  • 126issues
  • 68contributors

@konifarさん、ありがとうございました!アプリ助かりました。

Android ORMの選び方

Ormaが個人的に気になっていたので聴講しました。 なぜデータをローカルに保存するのか?どうやって保存するのか?そして、複数のORM(ActivitAndroid,greenDAO,Requery,SQLBrite & SQLDelight,Realm,Orma)を比較して、良し悪しを浮き彫りにするような内容でした。 プロダクトでRealmを使っている分、若干色眼鏡気味ではありますがはやり今のところはRealmなのかなと。 ただ、マイグレーションの煩雑さやequalToでの型安全の指摘は納得できるものでした。 Ormaは型安全に関しては解決されていて、Realmに比べて実装の軽さを感じました。 サービスや作るアプリの性質次第では採用してみたいですね。

未熟なチーム開発

弊社でもアプリチームは1年ちょっとでチームらしくなってきました。 さらに成熟させるヒントなどありそうだと思ったので聴講しました。 秩序づくりのところは大いに活かせそうでした。秩序とそのドキュメント化は面倒ですが大事ですね。 あとはよりテストブルな実装は大事。 実業務を進めながら新人教育をするのはなかなか難しい。。。

Kotlin + RxJava + Dagger2 + Orma + Retrofit で作るAndroidアプリ

より実践的な内容でいこーよアプリに活かせそうだったので聴講しました。 早口ではありましたが、DroidKaigiのアプリのコントリビュータをgithubから取得して表示するサンプルアプリを使っての説明でした。 とりあえず、RxJavaあたりから導入してみて、楽していきたい気持ちになりました。 Dagger2はテストとかも絡みそうなのでもうちょっと後から入れていこうかと。

4年続くアプリにおけるチーム開発

未熟なチーム開発と同じ理由で聴講しました。 UIファースト(UI駆動?)な開発スタイルでのバージョンごとでのアーキテクチャーの移り変わりと規約やドキュメントの整備やユーザインタビューでのアプリの質を高める話でした。 いこーよでもアーキテクチャーの見直しや規約、ドキュメントの整備は今まさに行っていることでとても参考になりました。 あと、目的別での部署を超えたチーム編成はとても興味深いものでした。

コマンドなしでぼくはAndroid開発できない話

コマンドで楽したい!という動機で聴講しました。

特に気に入ったコマンドを紹介します。

端末のワイヤレス接続

adb shell ip addr show wlan0 | grep 'inet ' | cut -d' ' -f6|cut -d/ -f1  ←端末のローカルIPを取り出す
adb tcpip 5555
adb connect "取り出したローカルIP":5555

条件としては端末とPCは同じWifi環境下にいる必要があります。 端末をUSBケーブルでPCとつなげて、上記コマンドを実行するとUSBケーブルが外れた状態でもコマンドを送ることが出来ます。

キーイベント送信

adb shell input keyevent KEYCODE_POWER ←電源キーを押す
adb shell input keyevent KEYCODE_SLEEP ←スクリーンをOFF

端末再起動

adb shell reboot

Activity情報取得

adb shell dumpsys activity top

今表示しているActivitiyのクラスがわかる 今表示しているActivityのレイアウト構造がわかる!このアプリどういうレイアウトしてるんだろう?って思った時はレイアウト構造を丸裸に出来ます。

/data/data/packageName配管のファイルを見たい

adb shell run-as packageName

アプリの設定画面が見たい

shell am start -a android.settings.APPLICATION_DETAILS_SETTINGS -d package:"アプリのパッケージ名"

UIをカスタムしてあって、設定アプリが探しにくい端末だと使えます。

上記以外の使えるコマンドがここにまとめれてるそうです。

サンプルアプリをサクッと試したい

dryrun adbのコマンドではないですが、Githubに公開しているアプリをサクッと試すときにすごく重宝するツールです。

dryrun "GitHubリポジトリURL"

エンジニアが武器にするMaterial Design

まだMaterialDesignをものに出来ていないところがあるのでものにしたいために聴講しました。 ナノハさんではスピードも機能の1つと捉えてアニメーションもユーザに対するコンテンツの提供スピードを損ねないように実践されていて、とても興味深かったです。 その中でもアニメーションの改善で離脱率が半分に削減した話は特に興味深く登壇後やアフターパーティーでお話しを聞いてslackで弊社内のアプリチームに展開したところとても反響が大きかったです。 いこーよでも上手にMaterialDesignを活用して、ユーザに心地よくアプリを使っていただけるように改善していきたい。しよう。

テスト0から目指すクラッシュフリー率99%

テスト以外でも品質担保や不具合改善などの知見が得られそうだと思い聴講しました。 すごく当たり前のことですが、テストうんぬんの前のテスタブルにコードを書くというのが一番大切なんだなーと改めて感じました。 Activityからモデルを分離して、Interfaceを定義し、コンストラクタで依存するインスタンスを渡すようにするだけどすごくテスタブルでコードの見通しがよくなります。 あと、Fragment実装で一度は目にしたことがあるIllegalStateExceptionで悩んでる方はvultureを使うと幸せになれるようです。 最後にこの言葉は忘れないようにしよう。

まとめ

2日間ずっとお話しを聞き続けるっていうのは結構疲れました。 が、知見だらけの2日間はすごくエクサイティングで楽しかったです。 ずっと言い続けてますが、参加させてもらえたことに本当に感謝です。 この思いと知見をチームメンバーに伝えつつ、より良いプロダクトを作りたいですねー。 来年もぜひともDroidKaigiに参加したい! できれば、チームメンバー全員で参加して、お互い見れなかったセッションを現地で共有しあいたい!

以上、DroidKaigi2017に参加した感想でした。