1
/
5

Radiotalk Tech Talk Vol.2レポート「テーマ『Android』」

Radiotalkが月1回、技術に関するライトニングトークをお届けしている「テックトーク」。6月は「Android」をテーマに、「mamari」や「家族ノート」などのサービスを展開するコネヒト株式会社と共同開催しました。

(1)「HiltはDIをどうやってやっているのか」牧山瞭 (Radiotalk株式会社) @_rmakiyama

Radiotalkの牧山瞭からは、DaggerのHiltを用いたDIにおいて、どのようなコードが生成されDIを実現しているかについて紹介しました。

Dagger
https://github.com/google/dagger

Hiltの安定版がついにリリース。

Hiltは2021年4月23日にSTABLE(安定版)がリリースされ、ようやくPRODUCTIONレベルでも安心して導入できるようになりました。Radiotalkではαバージョンの段階(2020年11月)で、DaggerからHiltの移行を完了。移行自体は愚直にする必要があるが、移行してからは、ボイラープレートが減りより簡単にDIを実現できるようになりました。

Hiltの自動生成コードはどんな処理をしているのか?

Hiltではコンポーネント階層が標準化され、設計面で悩む必要がなくなった反面、コードが自動生成されるため、具体的にどのような処理が行われているのか見えづらいという側面も生まれました。

今回は、Hiltが生成したコードを実際に読み解き、具体的にどのような処理が行われているのかを見てみました。

その後、Singletonアノテーションを付与し、Singletonスコープにした場合の生成されたコードの変化について紹介しました。

実際に何をしているかを見てみると、より理解が深まる。

生成されたコードを見ると、処理そのものはDagger2の頃とあまり変わりない様子。しかし、実際にHiltがDIをどうやってやっているのかを理解できたことで、オブジェクトのスコープ設計にも活かすことができたり、エラーへの対応もスムーズにできるようになる副次効果もありました。

(2)「Kotlin Compiler Plugin入門」tommy_kw氏(コネヒト株式会社)@tommykw

コネヒト株式会社のtommykw氏は、「Kotlin Compiler Plugin」の利用ケースを紹介。安定版がまだなく、公式ドキュメントも揃っていないという現状において利用するためのレクチャーを行いました。

「コード記述を自動化できる」Kotlin Compiler Plugin

まずはKoltlin Compiler Pluginの概要について紹介。「バイトコードを上書きできる」「コード記述を自動化できる」というメリットを持つ反面、「まだ安定版には至っていない」「ドキュメントがない」という現状があるといいます。

概要としては「実質まだよくわかっていない」Koltlin Compiler Pluginが具体的にどのような機能を提供するのか、実際のライブラリを使って説明しました。

バイトコードの書き換えで既存機能を編集可能、アノテーションで「コード再利用」も

今回は実際の利用ケースとして、toString()メソッドの中身を書き換える「aafanasev/sekret」、copy()メソッドを利用禁止にする「AhmedMourad0/no-copy」ライブラリの中身を紹介しました。

「aafanasev/sekret」では、パスワードを含む情報をtoString()した際にIDE側で文字列が自動的に黒塗り表示されるなど、コードレベルで隠匿性を高めることが可能。
https://github.com/aafanasev/sekret

「AhmedMourad0/no-copy」では、クラスに「@NoCopy」アノテーションを付けることによって、文字列のコピーそのものを制限することができます。
https://github.com/AhmedMourad0/no-copy

「アノテーションをトリガーにしており、(いちいち同じ処理を書き足す必要なく)機能の再利用が容易という点も大きな特徴である」とtommykw氏は語ります。

内部的にはどんなことをしているのか?

続いてtommykw氏は、Koltlin Compiler Pluginの内部での挙動について説明。「ドキュメントがないので(公式の)仕様については不明」としつつ、Andoridのカンファレンスイベント「Droidcon」にて発表された情報を元に、内部仕様を読み解きました。
https://www.droidcon.com/

サンプルコード:@HelloWorldアノテーションをトリガーにHelloWorldを出力する

今回は、@HelloWorldアノテーションをトリガーにHelloWorldを出力するサンプルコードをデモンストレーション。特定の関数が呼ばれたら、アノテーションを参照し、アノテーションがあれば、任意の処理を実行する流れを説明しました。

ソースコードはこちらから
https://github.com/tommykw/kotlin-compiler-plugin-sample

Koltlin Compiler Pluginのテストの書き方(既存ライブラリを参考に)

最後に、Koltlin Compiler Pluginのテストの書き方を説明。こちらも公式ドキュメントが存在しないため、既存のライブラリ「kotlin-compile-testing」を使用して記述デモを行いました。
https://github.com/tschuchortdev/kotlin-compile-testing

「Koltlin Compiler Pluginはドキュメントがまだ未整備。今回が開発の参考になれば」

Koltlin Compiler Pluginの開発は進んでおり、安定版のリリース見込みもあるものの、「現在はいまだその段階にはなく、公式なドキュメントも存在しない」とtommykw氏。現時点でKoltlin Compiler Pluginを利用しての開発は「手探り」と語り、「今回の発表がその参考となれば」と締めくくりました。

(3)「Android のレンダリングパフォーマンスにおける問題解決の手立て」HiroshiMuto氏(エキサイト株式会社)@mthiroshi_4o

エキサイト株式会社のHiroshiMuto氏は、自社のニューサービス「エキサイトニュース」リニューアルの際に直面したAndroidでのレンダリング問題(画面のカクつき)と、その解決方法を紹介しました。

原因は「ConstraintLayout」の複数配置。公式サポートツールで迅速に原因特定

「ConstraintLayout」を同階層に複数配置したことによって、パフォーマンスが低下してしまった」とHiroshiMuto氏。これを単一に組み替えることにより、問題が解消したとのこと。

レンダリング問題の解決にあたり、HiroshiMuto氏はまずAndroid公式ドキュメントを参照。さらに具体的な原因を特定するために使用したサポートツールを紹介しました。

「レンダリングの問題はさまざまにあるが、公式で提供されているサポートツールを使うことで、具体的な解決につながった」とHiroshiMuto氏。今回の問題解決の詳細は、エキサイト社のテックブログにて公開しているとのことです。

Android の Constraint Layout を複数扱うレイアウトはレンダリングパフォーマンスを下げる - エキサイト TechBlog.
エキサイト株式会社メディア事業部エンジニアの武藤です。 Android の ConstraintLayout を使ってレイアウトを実装する際に、 レンダリング パフォーマンスに問題があるケースがあったので紹介します。 開発が進んでレイアウトが複雑になってきたときに、リストページのスクロールにカクつきが出てきました。 その際のレイアウトの簡略版が下記です。 RecyclerView を使ったリストに、 API との通信中に表示する ProgressBar、通信エラー時にメッセージを出す TextView,
https://tech.excite.co.jp/entry/2021/04/22/141007

(4)「チームで進めるRenovate」katsutomu氏(コネヒト株式会社)@katsutomu

最後はコネヒト株式会社のkatsutomu氏が、開発環境におけるライブラリの更新問題に対するソリューションとして、Renovateを用いた仕組みを説明しました。

「手動では追いつかない」膨大なライブラリ更新問題

katsutomu氏が開発を担当するサービス「ママリ」では126ものライブラリが用いられており、その更新問題に頭を悩ませていたそう。

「ひとつひとつを手動で対応するのは現実的ではない」ということでkatsutomu氏が取り入れたのが、依存関係を自動で解決するツール「Renovate」。さまざまなプラットフォームと言語に対応しており、ライブラリ更新が発生した際には自動でプルリクエストを送る機能も搭載されている優れものだそう。

Renovate
https://github.com/renovatebot/renovate

実運用に即した設定カスタマイズ:プルリクエストまとめ、担当者自動アサインなど

デフォルトではプルリクエストは24時間随時作成され、レビュワーの指定もされないという「Renovate」。

こうした設定を実運用に即した形にするため、katsutomu氏はカスタマイズを実施。その内容を紹介しました。

設定の結果、アップデート率が「低下」。今後の対策は…

問題がストレートに解決するかと思いきや、アップデート率は「低下」してしまったそう。

原因として、「カスタマイズしたpatchレベルを纏めたプルリクエストよりも、デフォルトのminorレベルのバージョンアップのプルリクエストが先に作られ、数がさばけないこと」「レビュワーの自動アサインがうまくいっておらず、関心が下がってしまっている」とkatsutomu氏は考察。

今後の対策として、「patchバージョンのプルリクエストの優先順位を上げる」「1人あたり週2つのペースでアサインするよう、レビュワー自動アサインの設定を変える」ことで対処したいと語りました。

>>前年比5倍!急成長中の音声配信サービスiOSエンジニア募集!

>>音声配信プラットフォーム"Radiotalk"のAndroidエンジニア!

Radiotalk株式会社では一緒に働く仲間を募集しています

テックリード候補
アプリディレクター
iOSエンジニア
開発
テックリード候補
iOSエンジニア
Androidエンジニア
サーバサイドエンジニア
サーバーサイドエンジニア
配信基盤エンジニア
音声エンジニア
2Dデザイナー(業務委託)
責任者候補
UI/UXデザイナー
ビジネス
アプリディレクター
トーカープロデューサー
事業責任者候補
プロダクトマネージャー
経理・総務
COO候補
BizDev
マーケティング・プロモーション

Radiotalk株式会社では一緒に働く仲間を募集しています
1 いいね!
1 いいね!
同じタグの記事
今週のランキング
このストーリーが気になったら、直接話を聞きに行こう