Diverse developer blog

株式会社Diverse(ダイバース) 開発者ブログです。

Android Test Night #2 で、Androidのテストについての総まとめをお話してきました

DroidKaigi 2018が迫ってきて、それに伴って社内でもいろいろなことが動き始めていて面白いです(DiverseはDroidKaigi 2018 プラチナスポンサーです!参加されるあなたと当日はブースでお会い出来るのを楽しみにしております!)。 id:kikuchy です。


先日開催されたAndroid Test Night #2にて、『今更聞けない? Androidのテストのいろは』と題しまして、Android特有のテストの事情を解説させていただきました。

testnight.connpass.com


www.slideshare.net


「Androidのテストをこれから始める人に『コレ読んでおいて』と渡せるくらいまとまった資料が今まで無かったので、良い資料が出てきて嬉しい」というご意見もいただくことができました。
お役に立てれば何よりです。
読んでいただけますと幸いです。



Test Nightシリーズも今回で2回目、ということで、相変わらずレベルの高いテストの話をたくさん聞くことができました。
今まで理解が曖昧だったIdlingResourceの話なども聞けて、一歩理解が深まった気がします。

また、懇親会ではAndroidエンジニアが少ない話や、Google Homeの話題に花が咲きました。
スマートスピーカーが普及の兆しを見せている中、我々エンジニアの主戦場もスマートフォンから別の場所へと移り変わっていくのかもしれませんね。


Diverseは来年もAndroidエンジニアの皆様に知見を共有してゆきます!°˖✧◝(⁰▿⁰)◜✧˖°

Androidエンジニアを大募集中です。
未来のデーティング、人と人との出会いを一緒に作ってゆきませんか?
興味がある方は @kikuchy または他の弊社エンジニアへ、お気軽にDMやリプライをください!

Shibuya.apkでkotlinのsealed classをJavaから見た時のsealed具合について話してきました

はじめまして!今年の4月にインフラエンジニアからAndroidエンジニアに転生したYoshihisaです。

先日開催されたShibuya.apk#20にて「kotlin界のsealed classはJava界からみても『sealed』なのか」というタイトルで5分LTをしました。

shibuya-apk.connpass.com

www.slideshare.net

Kotlinには「sealed class」という継承範囲を同一ファイル内に制限する仕組みがあります。これをJavaから使おうとしたとき継承の範囲制限は有効なのか?を調べた結果をまとめたものです。*1

調べた動機と方法

そもそもこれをなんで調べたのかというと、YYCのAndroidアプリのある画面に新機能を追加する案件の開発中にAPI通信に関わる部分のモデルをsealed classで状態を定義したステートマシンとして作りそれをJavaで書かれたFragmentから使おうとしたことがあったからでした。

ふと「Kotlinの世界ではsealed classはsealedされていることをコンパイラがやってくれてるけどJavaの世界から見ると本当に『sealed』されているの?制限を突破して継承できたりしない?」と思ったのです。

気になったのでselaed classでクラスを作りそれをコンパイルしたバイトコードからJavaへ逆コンパイルする、というお手軽プランで調査してみました。(ついでにsealed classをJavaから使うコードを書いてみましたがif-else文とキャストまみれになり辛くなりました。Kotlinは同じコードをwhen式やif式、スマートキャストを駆使して簡単に書けます)

後日談

改めてsealed classを逆コンパイルした結果を見てみました。

逆コンパイル結果抜粋

sealed class本体のプライマリコンストラクタはprivateですがコンパイラがpublicなコンストラクタを自動生成しており子クラスはそれを使うようにバイトコードが生成されています。(スライド中では「DefaultConstructorMarkerが必要らしい」と書きましたが自動生成されたコンストラクタについて回るものらしくsealed class特有のものではありませんでした)

sealedを突破するためにDefaultConstructorMarkerをimportしようにもできず、またキャストなしでnullを渡してコンストラクタを呼び出すことも試みましたが存在しないことになっていて呼び出せませんでした。

コンパイル時はpublicなコンストラクタは存在しておらず呼び出せないので継承することができない、というような仕組みで守っているのでしょうか。もしこの記事を読まれた識者の方がいらっしゃればはてブのコメント等で教えていただけるとうれしいです。

 


 

今回は5分LTという形でしたが社外の勉強会で発表するのははじめてでした。とても緊張しましたが終わってみると楽しかったのでまたどこかで登壇できたらと思います。

宣伝

DiverseではAndroidエンジニアを募集中です!
興味がある方は @bomneko_attack または他の弊社エンジニアへお手軽にDMまたはリプライをください!

*1:sealed classそのものや使い途についてはid:kikuchyKotlin Advent Calendar 2017 12日目でまとめているのでそちらをご参照ください。

Shibuya.apk #20で新規アプリ開発において大切なことをお話してきました

こんにちは、一人でAndroidの新規アプリ開発やってます、 id:kikuchy です。

先日開催されたShibuya.apk #20にて、Androidの新規アプリ開発において感じた、大切だと思うことについてお話させていただきました。

shibuya-apk.connpass.com


www.slideshare.net

プロダクトオーナーと事前に目的などのすり合わせしておきましょう、というお話です。
聞き取りを行う際に便利なヒヤリングシートのテンプレートも作りましたので、こちらも合わせてお使いください。

「コードベースの寿命について議論する発想が今まで無かったので、チームの人とも話してみたい」といった感想もいただきました。
お役に立てれば幸いです。

頂いた質問など

いくつかいただきましたのでご紹介します。

4系をサポートしないとなると、市場で何割かのユーザーに価値提供ができなくなる。POは納得したのか?

ヒヤリングシートにも記載した国内外のOSバージョンシェアをお見せし、また社内の類似サービスユーザーのOSバージョンシェアもお見せした上で判断していただきました。
結果、ターゲット層が似ている社内の他サービスでもほとんどのユーザーがAndroid 5.0以上を使っていること、4系のサポートコストをかけられるほどエンジニアリソースがないことから、4系のサポートをしないことになりました。

どんな設計にしたのか?

まだまとまっていない&有用な設計であるかどうか自身を持てる段階でないので公開していませんが、Model-View-IntentやReduxに近い考えです。
が、(私は記憶力がないので)一画面あたりの関連クラスが増えると全体像の把握が困難になることと、少人数開発なので細かい分業の必要性が薄いことを鑑みて構成などを変えています。
来年のどこかでお話できるとよいのですが…

          • -

Shibuya.apkも、もう20回目を迎えたそうです。
その間にAndroid界隈でもいろいろなことがありました。
Kantar Woldpanel によると、日本でもAndroidのシェアがiOSのシェアを上回りました。
2018年、Androidの市場はどのように動いていくのでしょうか。この先が楽しみです。

Diverseは今後もAndroidエンジニアの皆様に知見を共有してゆきます!°˖✧◝(⁰▿⁰)◜✧˖°

Androidエンジニアも募集中です。
未来のデーティング、人と人との出会いを一緒に作ってゆきませんか?
興味がある方は @kikuchy または他の弊社エンジニアへ、お気軽にDMやリプライをください!

Swift/Kotlin合同勉強会 #2 に参加してきました

こんにちは、Androidやってます。 id:kikuchy です。

先日開催されたOisixさん主催の Swift/Kotlin合同勉強会 #2 で、モバイルアプリ開発で使えるKotlinの便利なところを紹介させていただきました。

oi-study.connpass.com





Kotlinをあまりご存じない方向けに、便利でよく使うKotlinの言語機能と応用例を紹介しております。
これらの機能を使うことで、「考えていることをそのままコードに落とす」という気持ちのよいコーディングが可能になります。
Androidアプリ開発をされている方は、ぜひ一度Kotlinを使ってみてください! 導入も簡単です!



Swift/Kotlin合同勉強会は、Swiftだけ使ったことがある、もしくはKotlinだけ使ったことがある、という方々が互いの言語を学び合うという趣旨でスタートされた勉強会だそうです。
会の趣旨通り、iOS/Androidの話題だけでなく、JavaとKotlinの相互運用、サーバーサイド、コンパイラの話など、言語について幅広い話題が飛び交っており、とてもおもしろかったです。
発表中も和やかな雰囲気で、安心して登壇する事ができました。

また、会場には終始美味しそうな香りが漂っておりまして…!


おいし…すごく楽しく勉強になる会でした!
技術だけでなく会場運営も勉強になりました。

Diverseは今後もSwift/Kotlinコミュニティに知見を発表するなど貢献をしてゆきます\\ ٩( 'ω' )و //
Swiftを使えるiOSエンジニア、Kotlinを使えるAndroid/サーバサイドエンジニアさん募集中です!
興味がある方は @kikuchy または他の弊社エンジニアへ、お気軽にDMやリプライをください!
まずは色々お話しましょう°˖✧◝(⁰▿⁰)◜✧˖°

「 iOS アプリエラー監視の設計とその効果」について Bonfire で発表してきました

Diverse で iOS のテックリードをしている Kuniwak です。

 

先日開催された Bonfire iOS #3 で「iOS アプリエラー監視の設計とその効果」について発表してきました。

私の所属していたプロジェクトの iOS アプリのエラー監視は、かなりしっかりしていて、ユーザーの手元で起こっている様々な異変を観測してくれています。今回はその観測のための設計とその効果についてお話ししてきました。スライドは以下になります。

 

speakerdeck.com

また、スライド末にある通り、Diverse では新規事業の iOS 開発チームのリーダーを募集しています。成長中のサービスを自分の力で導いてみたいと思う方に、ぜひきてほしいと思っています。ご興味がありましたら、Kuniwak まで DM やリプライをいただけるとランチ等をセッティングします。よろしくお願いいたします。

Swift の Mirror という API からみた、Swift の奇妙な挙動

Diverse で iOS アプリの開発をしている Kuniwak です。前に書いた記事では、単体テストで開発を2.5倍高速化した話を書きました。

さて、先日開催された iOSDC のリジェクトコンで、単体テストのテスト結果をわかりやすくするライブラリ「MirrorDiffKit」の開発秘話をお話ししてきました。この発表では、Swift を Mirror という API を通して見たときの奇妙な挙動を紹介しています。

発表の概要

5分ほどで読み終わるスライドになっています。Swift の奇妙な挙動をお楽しみください。

speakerdeck.com

宣伝

Diverse では Mirror というマイナー API とかも触ってみたい iOS エンジニアを募集しています!

あと、MirrorDiffKit をよろしくお願いします

github.com

DevFest Tokyo 2017でミクシィグループとKotlinについてお話してきました

id:kikuchy です。

先日開催された GDG DevFest Tokyo 2017 のセッション『Kotlin導入どうですか?』内で、ミクシィグループ内のKotlin導入状況についてお話させていただきました。


tokyo.gdgjapan.org


(2017/10/10時点ではスライドは未公開です)



セッションはサイバーエージェント 藤原さんがメインスピーカーとしてお話され、その中で各社の導入事例としてYahoo! Japan 森さん、DeNA 中川さん、ミクシィ 菊池からもお話をさせて頂きました。

会場はほとんど席が埋まるほどで、Androidエンジニアの方々のKotlin熱の高さをうかがい知る事ができました。

内容も各社の個性が表れており、面白かったです。
Yahoo! JapanさんのProGuardではなくDexGuardを使わなければいけない特殊な事情がKotlin導入を後押ししたエピソードとか、
DeNAさんの「若いエンジニアさんにとってはJavaは古代語である」という見解であるとか、
サイバーエージェントさんのプロジェクトによって導入の仕方が工夫されている事例であるとか、
社内を見回すだけではわからないような情報やノウハウを得ることができました。



また、界隈では「赤べこ本」と呼ばれる『Kotlinスタートブック』の著者の長澤太郎さんからも質問も鋭いものでした。


Kotlinは便利で強力な機能を持った言語ですが、それ故に気にしないといけないことがあるということですね。



(去年も参加させていただいていて、)今年のDevFestもたくさんのセッションが開かれていました。
GCPのお話や、VRのお話、IoTのお話やPWAのお話と、内容も多岐にわたっており、個人的にはやくスライドを読み直したいセッションもたくさんありました。

普段はクライアントのネイティブアプリを開発しておりますので、同じ界隈でも話したことのない方とお話したり、あまり関わらないコミュニティの方々とお話する機会を得たりと、とても楽しいイベントでした。


DevFestは世界各国で開催されていますし、日本でも来年も開催されるでしょう(そう期待しています!)。
せひ足を運んでみてはいかがでしょうか。
きっと何か得るものがあるのではないかと思います。


Diverseはこれからも、開発者コミュニティに貢献していきます\\ ٩( 'ω' )و //