Noteビジネスチャット「Chatwork」のエンジニアとデザイナーのブログです。ビジネスチャット「Chatwork」のエンジニアとデザイナーのブログです。Android版のライブラリ管理を楽にするための取り組み⚙️Androidモバイルアプリケーション開発部の奥澤(@okuzawats)です。月日が経つのは早いもので、Chatworkに入社して既に8ヶ月が経ちました。入社した当時は1歳だった子どもも、今では2歳になりました。この子どもは柿の種が好きで、柿の種を見つけるとすごい勢いで突進してきます。自分は柿の種のわさび味が好きなのですが、柿の種のわさび味は子どもにはちょっと刺激が強いため食べさせられません。そのため、自分が柿の種のわさび味を食べる時は、食べているところを子どもに見つからないように隠れて食べないといけないことが最近の悩みです。Android版のライブラリ管理を楽にするために行なった取り組みを紹介します。現代的なアプリ開発では、ライブラリを利用して開発速度を向上することが必須と言えます。依存するライブラリが増えてくると、その保守に大きなコストがかかってくるようになります。ライブラリの保守を効率的して、より価値のあることに人の力を使えるようにしたい、ということがこの取り組みの意図です。この取り組みは自分ひとりの取り組みではなく、Androidアプリを開発しているチームでの取り組みであり、チームの成果であることを冒頭に宣言しておきます。Materials(BOM)の導入💣まずは手始めにBOMが使えるライブラリについては、BOMを導入しました。Materialsの略で、複数のライブラリのバージョンをまとめて管理できるものです。複数のライブラリのバージョンを一箇所で管理できるのでライブラリのバージョン管理が楽になります。ライブラリのバージョン差異による意図しない挙動を防ぐのにも役立ちます。ライブラリの保守作業を地味に楽にしてくれる頑張り屋さんです。Compose)*1。Requestを作成して対応しました。対応いただいたGさん、Oさん、ありがとうございました。ライブラリのバージョンを直接記述していましたが、マルチモジュール化の推進にあたってライブラリのバージョンを集約的に管理したいというモチベーションが生まれてきました。Catalogを用いる方法がベストであると考えました。Catalogの導入にあたって、ライブラリの更新検知がうまくできるかどうかが課題として挙げられました。AndroidのリポジトリにRenovate(後述)を導入できることの2点を確認して、解消しました。課題を解消したら、あとはやるだけです。対応いただいたOさん、そしてレビューいただいたMさん、Gさん、ありがとうございました。Requestを作成してくれるようになります。Requestを作成してもらうところまでを任せています。Requestのレビュワーがライブラリのリリースノートなどを確認し、コミットを取り込みます。Renovateの設定も試行錯誤しながら改善しているのですが、本記事からは割愛します。いつかその話もしたいですね😼Renovateについては社内で既に採用実績がありましたので、GitHubの管理者に有効化を依頼するだけでした。対応いただいたGitHubの管理者の方、そしてRenovateの設定についてレビューいただいたMさん、Gさん、ありがとうございました。Catalogに対応していなかった」ためです。Changelogライブラリの削除👻ライブラリの更新作業が効率的になっても、ライブラリの数が多ければリリースノートの確認などに多くの時間がかかってしまいます。ライブラリのsyncにかかる時間も増えるので、開発効率にも影響します。依存するライブラリの数が多いことで発生する問題は、依存するライブラリを減らすことで解決されます。Android版では、この8ヶ月間で17個のライブラリと、2個のGradleプラグインを削除しました。削除したライブラリをすべて紹介するのはあまり生産的ではないので、いくつかピックアップして紹介します。Android版では、テストで用いるモッキングライブラリとして、MockitoとMockKという2つのライブラリを使用していました。KotlinどちらもAndroidアプリ開発で広く用いられているライブラリで、同じ目的を持っています。同じ目的を持ったライブラリが複数存在すると、どちらを使ったらいいか混乱してしまいますし、テストコードを読む時にどちらのライブラリを使用しているのかを気にする必要が出てきてしまいます。そこで、片方のライブラリの使用箇所をもう片方で置き換えて、ひとつに統一することにしました。MockitoとMockKのどちらを使うべきか?は考え始めると難しい問題です。Android版では、MockKを使えば書けるけどMockitoでは書けないテストが存在していました(これについてはまたの機会に...)。そのため、どちらのライブラリを使うべきか?という問題を考えることは回避して、MockKに統一しました。ユーザー影響のある機能を削除する😢ユーザーにある機能を提供するために導入されているが、ライブラリが何年もメンテナンスされていない、何ならライブラリのリポジトリがアーカイブされている...というようなライブラリが複数存在しました。単純に置き換えられるライブラリが他に存在したり、我々で実装できる機能であれば大きな問題はないのですが、それが難しいためにそのライブラリが使い続けられています。いう場合はエンジニアだけで決めることはできないので、関係各所とコミュニケーションを取り、技術的なコストとリスク、ユーザービリティ、ビジネス的観点、セキュリティなど、総合的な判断をすることになります。ここで多くは語りませんが、いくつかのライブラリについては削除することになりました。ご理解をいただいた関係各所の皆様、ありがとうございました。Documentation)。org.jetbrains.kotlin:kotlin-stdlib-jdk7org.jetbrains.kotlin:kotlin-stdlib-jdk8諸々の事情でレガシーサポートが切れなかったのですが、気合いを入れて対応してレガシーサポートを削除しました。上げていく過程でdesugaringが必要なJavaのAPIへの依存がなくなっていたので、desugar_jdk_libsを削除しました。Android版のライブラリ管理を楽にするために、Androidアプリを開発しているチームが行ってきた以下の取り組みを紹介しました。Catalogの導入📖Renovateの導入🤖ライブラリの削除👻ライブラリはアプリ開発を楽にしてくれますが、ライブラリの管理自体も楽にできるともっと嬉しいですね。Android版を開発するチームでは、本記事で紹介した取り組みの他にも、様々な改善を行っています。Android版の本気の改善に挑戦したい!という方はこちらへ💁hrmos.co*1:この記事を書いている間に、他にもBOMを適用できるライブラリがあることに気がつきました。近いうちに対応します。ActionsによるScala製ライブラリの依存ライブラリ更新と定期リリースの自動化どうも、かとじゅん(@j5ik2o)です。Scala製ライブラリでの依存...2021-01-22【GASで業務効率化】指定した日にChatworkへメッセージを投稿するこんにちは、Chatworkのさかぐちです。@Chatwork_devメンバーid:cw-oritaid:okuzawatsid:d-hayashiid:shibe23id:cw-jeromechaid:cw-araiid:tinpayid:cw-sakamotoid:rabe1028id:cw-suetakeid:lmdexprid:cw-shinyaid:cw-takaseid:cw-niinumaid:j5ik2oid:tan-yukiid:yamakenji24id:yoshiyoshifujiiid:cw-ayumitakahashiid:cw-furuyaid:kaz3284id:cw-ozakiid:cw-nishikawaid:daiksyid:tasuku43id:louvre2489id:sykt13id:yamatomo73id:cw-kasugaid:cw-mottyid:cw-nishiguchiid:s12btid:cw-sayamaid:cw-moriyaid:cw-makotoikedaid:cw-yoheihayashiid:wakakumaid:cw-sakaguchiid:cw-matsubaid:ymgnid:shige0501id:nottegraid:shinharadid:eielid:cw-michihiroid:crossroad0201id:cw-miyashitaid:agoetcid:at-akaid:cw-chibaid:tenslerid:cw-akatsuid:cw-kajiwaraid:cw-otakeid:TomokoNishinaid:cw-tanakaid:cw-hayashiid:cw-marikoid:cw-shinmenid:cw-masakiid:cw-hayama最新記事モバイルアプリ開発チーム、カンバンはじめました。(1)引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。