i Cubed Systems Engineering blog

株式会社アイキューブドシステムズの製品開発メンバーが、日頃のCLOMO開発の様子などを紹介します。

Androidアプリ新製品リリースプロジェクトの話

はじめに

こんにちは。アイキューブドシステムズでAndroidアプリ開発を担当しているt-yusakuです。 アイキューブドシステムズは、2021年2月2日にCLOMO Launcherという製品をリリースしました

今回は、CLOMO Launcherの正式サービス化プロジェクトでどのような開発を行ってきたのか紹介します。

CLOMO Launcherについて

CLOMO Launcherは、Androidデバイスのホーム画面をMDM管理者側からカスタマイズするためのCLOMO MDM用ランチャーアプリです。例えば、会社が配布したデバイスのホーム画面構成を統一し円滑に運用できるようにすることや、業務上必要なアプリのみを表示して専用端末のように扱うことなどを目的としています。

正式リリース以前、CLOMO Launcherにはすでに開発済みのVer.0.9が存在していました。このVer.0.9を正式なプロダクトとしてリリースするために、CLOMO Launcher正式サービス化プロジェクトが発足しました。

正式サービス化にあたって定められた要件には以下のようなものがありました。

正式サービス化の要件 - CLOMO MDMとの連携強化 - ライセンス発行 - デザイン刷新 - ランチャー画面のレイアウト変更 - アプリの提供に関する画面の追加 - アプリケーション情報 - OSSライセンス - プライバシーポリシー

各要件には詳しく触れませんが、開発を通しての課題や取り組みを紹介していきます。

デザイン上の課題

Android 8.0以降、アダプティブアイコンを使用することでアイコンの見た目をデバイス側で統一できるようになりました。現在では、アダプティブアイコンに対応しているアプリも非常に多くなってきています。一方で、アダプティブアイコンに対応していないアプリもあり、そのようなアプリのアイコンをそのまま表示してしまうと「アダプティブアイコンで見た目を統一する」ということが叶わなくなってしまいます。

出典:https://developer.android.com/guide/practices/ui_guidelines/icon_design_adaptive

そこでCLOMO Launcherでは、非アダプティブアイコンのDrawableをAdaptiveIconDrawableに変換してから表示するようにしました。

AdaptiveIconDrawableを用いた実装例は、Launcher3が参考になります。

開発上の課題や改善

Kotlinの採用

Ver.0.9ではまだKotlinを採用していませんでした。"Kotlin-first"となって数年が経っている現在のAndroidアプリ開発にKotlinを採用しない理由はほとんどありません。

Kotlinの優秀な言語仕様やAndroid KTXの活用、CLOMO Launcherが小規模なアプリであり導入障壁が低いことなども考慮して、Kotlinを積極的に採用することにしました。アイキューブドシステムズではAndroidアプリでKotlinを採用したことがないという事情があったため、今後のKotlin採用の足がかりにしたいという思いもありました。

Kotlinの導入にあたって特に問題は発生しませんでしたが、導入時の指針として以下のことを決めていました。

  • 変更しない既存コードはJavaのままにする

「Kotlinを100%にすること」が目的ではなく、「Kotlinの利益を享受すること」が今回の目的だったためです。正常に動いているコードを無理にKotlinへ書き換えるに足る理由が今回はありませんでした。

  • Android Studioの自動変換は使わない

自動変換は便利ですが、意図した形で出力されるとは限りません。変換後のコードをすべて確認する必要があります。自動変換を押しただけのコードを生まないために、自動変換は使わないことにしました。

Kotlinを使ったことのあるメンバーで実装にあたりましたが、社内でKotlin採用の実績ができたことやプロダクトコード上で実装経験を積むことができたことは大きな収穫だったと感じています。

結果として、90%程度のソースコードがKotlinになりました。また、Jetpackなどのライブラリを活用したことも影響していますが、Ver.0.9と比較してソースコードが全体で数百行減少しました。

Jetpackやライブラリの活用

Ver.0.9の時点でViewModelやRoomを使った実装になっていました。これらを引き継いで、さらなるJetpackの活用や新しいライブラリの採用、既存コードのリファクタリングなどを行っていきました。例えば、画面追加により画面遷移が必要となったことに伴ってNavigationコンポーネントを採用しています。

CI/CD環境の整備

リリース後はアプリを維持し、改善していく必要があります。正式リリースは製品のスタートに過ぎないため、今後を見据えてGitHub Actionsで最低限のCI/CD環境整備を行うことにしました。

  1. リリースビルドの自動化 pushされたtagを元にリリース用のAPKをビルドしています。tagの名前を元に規則的なファイル名でAPKを出力したいため、この方法を取っています。

  2. テストの実行とLinterによるコードレビュー KotlinのLinterとしてktlintを使用し、reviewdogでレビューコメントを残すようにしています。今後誰が実装を行っても一定のフォーマットを保つことや実装時の指針になることを期待しています。

プロジェクトを終えて

正式リリースへ向けた開発を行ってきましたが、Kotlin採用やJetpack活用の加速、CI/CD整備といった製品機能外のトピックが多くありました。新しいことに積極的に取り組む上で素早い意思決定や手厚いサポートを行ってくれたプロジェクト関係者全員に感謝しています。

CLOMO Launcherが魅力的で息の長い製品となるように、今後の開発に取り組んでいきます。

最後に、アイキューブドシステムズでは継続的な採用活動を行っています。このブログを通して興味を持たれたみなさまの応募を歓迎しています!


Portions of this page are modifications based on work created and shared by the Android Open Source Project and used according to terms described in the Creative Commons 2.5 Attribution License.

このページの一部は、Android Open Source Projectによって作成および共有された作品から複製され、Creative Commons 2.5 Attribution Licenseに記載されている条件に従って使用されます。