Continuity is The Father of Success

Androidアプリとかゲームとか。毎日続けてるものについて。

転職して1年がたった(3社目)

現職に転職して1年が経ちました。2018年9月1日〜2019年8月31日が1年目。2019年9月1日から2年目に突入です。

転職前のこと

2社目はAndroidアプリをJavaで書きつつ、新人さんのOJTなんかをしてました。

最後に所属していたチームは、Android Architecture ComponentsのStable版リリースとほぼ同時に入り、AACを導入して片っ端から設計を直していた覚えがあります。 当時Fat ActivityなMVCからMVVMへ書き換えた経験、またRxJavaオンリーの環境に LiveData を導入した経験、UXエンジニアと一緒に働けた経験が今の自分を形作っているなーと。

なお、転職時期のあれこれはこちら。

blog.dr1009.com

転職後のこと

やっていること

教育系のAndroidアプリ作ってます。 最近では3人チームのリーダーになり、開発以外にも計画だとかそいういうところもやるようになりました。

ユーザーさんの数が多いのでクラッシュに気を配りつつ、一方でレガシーなコードが多いので急ピッチで書き換えをしています。 とあるリリースで15%ほどコードを書き換えてリリースすることになった時には肝を冷やしました。。。

また、会社としてのアウトプットにも力を入れるようになりました。 開発に関連するところでは、Androidに関わるテーマで。

tech.studyplus.co.jp

tech.studyplus.co.jp

そのほかには、開発チームとしての取り組みについて。

tech.studyplus.co.jp

どういったことを伝えるといいんだろうか、などと考えながら書いています。 まだまだ書ける箇所はあるので、チームとしてアウトプットすることを推進できればなーとも考えています。

開発のペースについて

仕事の中で気につけていることの一つに、時間当たりの効率があります。 生産されたコードの質はなかなか測れないので、プロダクトに乗せることができた(≒masterブランチに追加できた)コードの量を自分の中でバロメータとしています。 そんなこんなで確認してみたところ、前職では「半年でGitの+と-が合わせて8万行( git log コマンド調べ)」でしたが、現職では「1年でGitの+と-が21万行(Github調べ)」になってました。 多分スピードアップ。

ざっくりとコードを書いて詳細を詰める塩梅が上手くなったとか、一つ一つのコミット粒度が揃ってきたとか。アプリの設計が上達したとか、単にKotlin使えるようになったとか色々とありそうです。 まだまだやりたいことがあるので、効率をどんどんあげていければなと思います。

f:id:D_R_1009:20190901012011p:plain
1年間の様子

Kotlinのこと

開発言語はKotlinになり、Kotlin + Kotlin Coroutinesを毎日勉強してます。 9割5部Kotlinなので、Javaを書かなきゃいけない時にすっかり戸惑うようになってしまいました。

Kotlinの学習を振り返ってみると、一通り使えるようになったのでちょっと深掘りしたくなっている感じが出てますね。

blog.dr1009.com

blog.dr1009.com

blog.dr1009.com

blog.dr1009.com

blog.dr1009.com

Kotlin Coroutinesにflowが加わったことで、RxJavaを置き換えられるシーンもさらに増えるように思います。 2年目はRxBusをいかにして置き換えるかが一つの挑戦になりそうです。考えていくぞ。

LTのこと

LTをする機会が増えました。 SpeakerDeckを見て数えたら、8つほど社外でやってたみたいです。 前職では社内向けに一つだった(1年半で1つだった)ので、めちゃくちゃに増えました。

speakerdeck.com

初めはなかなか上手くいかない時期が長かったのですが、ようやく準備を含めて慣れてきたかなーと思います。 会とか、前後のLTに合わせてもっと調整しながらやれるようになりたいなーと思っているこの頃。

公開リポジトリのこと

気づいたら色々と作ってました。

EmptyRecyclerView は業務で利用したくて作ったので、割と気に入っています。 簡単なものを利用しやすく整理するという意味で、ライブラリ化は効果があるなーというのが1年目の実感なので、引き続き取り組んでいければなと思っています。

終わりに

転職して一年で何してたっけなー、と思い返しながらつらつら書いてみました。 来年の同じ日に、楽しく1年を振り返られるよう、頑張っていきたいと思います。

CircleCI ユーザーコミュニティミートアップ 東京に参加しました

先週末に参加してきました。CircleCIのイベントは初参加。

circleci.connpass.com

会場はReproさん。会社でお世話になっていたので、そちらもワクワクしながら向かいました。

repro.io

LT

スポンサーLTを含めて8つのLTがありました。 スポンサーLTが個人的には非常に面白かった + 勢いを感じて良かったです。

あと、今回はLTしてきました。

speakerdeck.com

CircleCI + fastlane + Android

先日、会社のブログに書いた内容の抜粋です。

tech.studyplus.co.jp

Flutterのビルドでは fastlane を使うこともありますが、基本的にAndroidのアプリビルドでは fastlane を使うケースはなかなかない気もします。 ただ利用してみると色々な処理を fastlane 経由で呼び出すことができ、CIステップのメンテナンス性を高めることもできる、と感じています。

とりわけ、CircleCIに用意されているAndroid向けDockerにはRubyがインストールされているので、簡単に試す&活用することができます。 今回は「気軽に試せそう」と思ってもらえればー、というモチベーションで発表しました。「fastlaneってAndroidでも使えるんですね」などの声を確認できたので、目的は達成できたかなーと思っています。

感想

AWSの障害がなければ同僚2名と参加できたのですが。。。 そこだけが悔やまれます。次回、またチャレンジしたい。

Kotlin Coroutinesの並行処理やException処理を確認するデモアプリを作りました

作ってみました。MITです。

github.com

デモアプリについて

目的

現職ではフルタイム3人+副業1人の4人体制でAndroid版の開発を行っています。機能開発6割、不具合修正2割、既存コードの書き換え2割といったところでしょうか。

既存コードはJava + RxJava、新規コードはKotlin + Kotlin Coroutinesで書くことにしています。多くの場合、Kotlin Coroutinesと言ってもRoomやRetrofitなどを介して利用するケースが大半であったため、そこまで並行な処理を意識する必要がありませんでした。要は、RxJavaのSingleやCompletableな処理を suspend に書き換えることで事足りていました。

とはいえ。。。 書き換えが進み、新規機能開発が増えるに連れ、徐々にRxJavaで言うzip処理などが必要になるケースが増えてきました。

そのため並行な処理やエラーハンドリングについて、手元で動かしながら議論する事ができればなーと感じる場面が増えてきました。 そんな訳で、よくよく使うパターンを中心にデモアプリとしたのが、上記のリポジトリとなります。

使い方

ザッとクローンして、Android 8以上の端末に繋ぐかエミュレーターを立ち上げて実行してください。 (Android 8なのは自分の手元に8.1以上の端末しかないからです。引き下げたい場合はissue立てていただければ)

アプリの操作と同時に logcat をAndroidStudioかコマンドラインから確認できるようにしてください。 というのも、あえて試すとアプリがクラッシュするパターンを用意したので、スタックトレースを確認できるようにしておいてほしいからです。

一応、実行環境はREADMEにも記載してあります。

確認できるパターン

launch async coroutineScope sipervisorScope を一通り試せるようにしてあります。 その他は自分の理解が進んだら追加します。追加PRもお待ちしています。

coroutineScopesupervisorScope の動きの違いをよくよく確認したかった(≒レビューで詰まった)ので、そのあたりで実装間違っていたらご指摘いただけますとたいへん助かります。

終わりに

明日がKotlin Fest 2019なので開催前に公開できて良かったなーと思ってます。 contract とか、扱えるようになりたい……!

kotlin.connpass.com

あ、ほしがほしいです。ほしだけに。