家族アルバムみてねに社内転職して1年経ちました
ご無沙汰しております。病気になったりANAのマイル修行したり連日とんかつを食べたりしているpunchdrunkerです。まだ生きてました。現在ミクシィ歴がちょうど6年になります。しばらく退職していないので、在職エントリを書きます。
3年くらいマネージャー業をした後、やっぱ普通にエンジニアやってる方がよさげ、と思って家族アルバムみてねに異動してから7/1で1年経ちました。
あっという間に1年経ってしまいましたので、ここ1年で自分がどういう仕事してきたのか、一旦振り返りたいと思います。
サービス全体
フォトブック
昨年9月、フォトブック注文機能がリリースされました。1冊約500円。みなさん買ってください!みてねの唯一の収入源です。お金万歳!!
この頃はまだ病気療養直前だったので、適度に休日返上しつつ、みんなで協力しながらなんとかリリースに漕ぎ着けました。
Android
各種クラッシュ対応
スプリントのタスクに飽きた合間でほどよくクラッシュ対応してきました。Fragment, RecyclerView, Lifecycle関連がトップレベル。記憶に残ってるやつだと、FragmentManagerのcommit起因のIllegalStateExceptionとか、弱い端末でcontent providerから大量にデータ取るとバカになって死ぬ不具合とか、そんなクラッシュを直したりしてました。
あと現実逃避したい時はlintのwarning減らす仕事などもします。
各種ライブラリ/target versionのアップデート
support libraryをはじめとした、諸々のライブラリのバージョンを新しくしてきました。現在みてねのtargetSdkVersionは24です。その過程ではいくつかBreking changesを読み逃して大量のクラッシュ出したのは苦い思い出です。その都度即日対応させていただきました。
一番大きな更新はAndroid M以降向けのRuntime Permission対応です。Androidアプリ開発者にとっては「端末のメディアへのアクセスを許可しますか?エンジニアやめますか?」レベルのイニシエーションです。
ご存じ @hotchemi さん謹製、PermissionsDispatcherを用いて、エイッとやってバーン!!で対応して、さほど大きな問題は起きなかったのですが、普段そんなに使われないだろう画面のすみっこの方にある連絡先アクセスとか、ちょっとした細かい不具合をやはり出してしまいました。その節はご迷惑をお掛けしました。精進します。
その次にはやはりtargetSdkVersion24対応。恥ずかしながら COLUMN_LOCAL_FILENAME 問題をうっかり見逃し、こちらも即日対応。毎スプリントのKPTにおきましても反省させていただきまして、再発防止に努めてまいります。
もうひとつ大きなライブラリアップデートではRealmの更新が挙げられます。当時0.82.2だったRealmを一旦1.2に上げました。その翌月に2.2.1に上げました。Realmはなんといってもドキュメントが充実していて、各バージョンごとの移行に関する注意事項がブログにまとまっているので大変助かりました。2.2.1に上げてからはそれきりです。現在最新のRealmは3.4.0ですが、みてねが利用しているのは2.2.1。今後のアップデートに期待してください。
Google フォトからの共有
Nexust5以降、端末のギャラリーアプリがなく、Google フォトがギャラリーアプリとして使われることが多くなりました。Kitkat以降、Google フォトからの写真共有時はcontent://com.google.android.apps.photos... のようにオシャレなURLが渡されてきます。そこで、渡されるURLのハンドリングをしっかり行わなければなりません。
ただ、みてねは大量の写真投稿処理やそれに関連するローカルキャッシュの仕組みなんかがURLの扱いとちょっと複雑に絡むところもあり、解決するのに精神的ハードルがやたら高く、しばらくGoogle フォトからの共有はしばらく非対応として開発が保留されていました。しかしこちらもエイヤで対応させていただきました。5年以内に死ぬかもしれないと思うと大抵の事は平気です。
差分の影響範囲も広く、githubのPRのコメント数も27と、ここ1年で一番スレが伸びた差分になりました。
iOS
Swift移行+ Swift3対応
現在みてねのiOSアプリはObj-Cとswiftが混在しており、ファイル数で言うと、 Swiftが
1965に対し、Obj-Cのファイルは1001という移行率です。のこり1/3と、まだ道のりは遠いですが、何とかSwift完全移行目指して、日々精進しております。
テストまわり
スタブできますか?人間やめますか?という感じです。
各種クラッシュ対応
Android同様、息抜きにクラッシュ対応。水を汲みに行ったらクラッシュ対応。トイレから戻ったらクラッシュ対応。そんな感じです。
Rails
テスト + Circle CIまわり
みてねでは全プラットフォーム、Circle CIを利用しています。テストの時間が長いとダレるので、parallelismの利用とtest-queue対応をしました。諸事情のため、結果そんなに速くならなかったことをお詫び申し上げます。(20分くらい書かってたのが5分くらい速くなった)
年内にはCircle CI2.0対応して、もうちょい速くできそうな予感がしています。
unreadのあれこれ
未読管理でunreadというgemを使っているのですが、既読処理がちょっと遅くなったりとちょっと問題があったので、調査したり軽く本体にPR投げたりしておきました。そういえば追加でschema変更のPR送らないとと思っていたのを忘れていました。あとでやります。とりあえず、mysqlで大量のレコード捌く上では若干index足りていないなどお茶目なライブラリだったので、多少チューニングが必要でした。
英語
完全に個人的な学習ですけど、週に1回昼休みに40分、マンツーマンの英会話レッスン通うようになって、その後肺炎で入院して以降サボって2ヶ月が経ちます。とにもかくにもプログラミング界の公用語は英語なので、まだまだ勉強が必要です。今月復帰しよう。。。
1年やってどうだった?
自分は凡人なので、開発しやすい環境作りとか、サービス品質の安定とか、その手の仕事に重点的に取り組みました。どういったタイプのエンジニアであれ、自分に向いた仕事に取り組める雰囲気のチームで良かったなと思っています。
またご欄の通り、みてねではエンジニアの区分があまりなく、全エンジニアがiOSもAndroidもRailsも書きますし、AWSの管理もやります。この点も自分にはちょうど良く、Androidばっかりやってると飽きちゃうので、気分を切り替えるのにも、仕事の幅は広い方が良いと思いました。
もちろん結果的に、この人はiOS強いけど、Railsならこの人に聞いた方が安心だよね、みたいなポジションは暗黙的に存在しますけどね。
これからのこと
いまは秘密ですが、来月にかけて大型リリースを控えています。楽しみしてください。それが落ち着いたらAndroidではKotlin対応を進めたいと思います。Kotlin移行を進め、会社の予算で11月にサンフランシスコで開かれるKotlin conf参戦を目論んでいます。ちなみに私はまだ1行もKotlin書いてません。
iOSの方はひとまず全部swiftにして、@testableも使えるように安心な環境を整えていければと思っています。アプリの開発に従事しつつ、現在4.2.5のRailsも5にアプデしていこうと思います。