KotlinとReduxをAndroidアプリに導入した話をしました。
先日自社のエンジニアイベントで「KotlinとReduxをAndroidに導入したら」という話をしてきました。質疑応答や懇親会でいろんな質問をいただいたのでここに残しておきます。
イベント
登壇したのはこちらのイベント。アプリだけでなくバックエンドやインフラ、果ては機械学習まで幅広いテーマを扱うイベントでした。聞き手の皆さんの知識もばらつきがありそうなので、割と丁寧にいろんなことを説明したつもりです。しかしその分内容を詰め込みすぎて早口に…
当日の雰囲気はこちらで。
登壇内容
内容はこちらのスライドをご覧ください。ちなみに、最後の方の時間があれば話そうと思っていたFluxの話は時間切れでしませんでした。
スライドにも乗っていますが、今回初めて会社としてOSS Libraryを公開しました。こちらについてもいくつか質問をいただきました。
質疑応答や懇親会で話したこと
Reduxについて
Q: Stateの持ち方を途中で変更すると大変じゃないですか?
A: 今の所変更したいケースは出てきていないのでわかりません。変更してない理由としては、必要最低限の情報しかReduxにのせていないからです。別のアプローチとしては情報を綺麗に正規化して持たせるという方法もあります。今はどちらのアプローチが良いのか、AndroidとiOSでそれぞれ試している最中です。
—–
Q: API通信はReduxの図のどこでやるんですか?
A: スライドには入れてませんが、実際にはActionを生成するCreatorProducerというのがいます。ここで、APIの戻り値の情報を適切なActionに詰めます。CreatorProducerが生成したActionがStoreにdispatchされるようになっています。
—–
Q: SharedPreferenceなどローカルに情報を退避する方法を採用しないのですか?
A: 採用するのもいいのですが、退避場所を含めると2箇所で情報を持つことになるのでReduxの原則から外れるのと、情報によって「(退避する・しないといった)管理の方法」がバラバラになるのを避けたかったので今の所採用していません。もしも退避するのであればmiddlewareでやるのがいいと思います。
—–
Q: フロントエンドでReduxはやったことがあるけれど、アプリにReduxを取り入れる時のメリットがうまくイメージできなかったのですが、どういった点でよかったですか?
A: AndroidアプリはActivityやFragmentの双方向の情報のやり取りが非常に面倒臭いので、一箇所にデータをまとめて各自がそこを監視するというReduxはその点でよかったです。
—–
Q: FluxではなくReduxにした理由は?
A: Fluxにしたい(=Storeを複数持ちたい)と思うタイミングが定期的にやってきますが、今の所Reduxにしています。Fluxにしたいと思ってしまう時は、だいたいActivity/Fragment間で情報の共有がしたいときなので、しばらく悩んだあとサボらずにinterfaceを書いています。もしかしたらそのうちFluxを試すかもしれません。
--ここから懇親会では話せなかったけど、書いてて思いついたので追記-- メモリマネジメントの観点でFluxにする可能性も将来的にあるかもしれません。 一時的にかなり大きなサイズの情報を扱う必要が出てきた時に、 不要になったらそのStoreごと破棄してメモリを解放させる必要が出てきた場合などです。 今の所この点では困っていませんがサービスによってはあり得ると思います。 --ここまで懇親会では話せなかったけど、書いてて思いついたので追記--
—–
Q: Reduxを始める時に、何を参考にするのがいいですか?
A: この動画がオススメです!AndroidではなくJS前提ですが、Reduxのポイントは抑えられると思います。
Redux入門にオススメの動画ですー https://t.co/LcsdiZpD0p #Retty_tech_cafe
— むーむー (@muumuumuumuu) 2017年9月1日
Kotlinについて
Q: 今Kotlinの割合はどれくらいですか?
A: Kotlin:Java = 1:2 くらいです。
—–
Q: JavaとKotlinのコードが混在していて困ったことはありませんか?
A: 特にありません。強いて言うなら久しぶりにJavaのコードに手を入れなくてはいけない時に、「あ、Kotlinじゃないからこの書き方できない…」ちょっと残念な気持ちになるくらいです。
OSSについて
Q: 今回初めてOSS Libraryとして公開したと思いますが、どういった理由から公開に至ったのでしょうか?
A: 公開したLibraryはReSwiftというOSS Libraryをリスペクトして作ったものです。なので、OSSに帰したいという気持ちが作ったメンバーの中にありました。そういう経緯からOSS公開に至りました。
—–
Q: OSSで公開することに対して、社内でハードルはありましたか?
A: 作った人が公開したいという気持ちがあれば基本的にそれを尊重したいというカルチャーだったので、ハードルは特にありませんでした。しかし、当然議論はありました。公開することしないことに対するそれぞれのメリットやリスクを比較して、公開に至りました。
おまけ
長々と語っていますが、実はまだストアに公開されているアプリにはほんの一部しかReduxを取り入れられていません… 早く綺麗に作って公開したい!
内容盛りすぎてめっちゃ早口になった気がする😇 たくさんReduxについて話したけど、リリースはもうちょっと待っててね!(現状のアプリは画面間で全然情報共有できてない🙇♀️🙇♀️🙇♀️) #Retty_tech_cafe
— むーむー (@muumuumuumuu) 2017年9月1日