logoDroidKaigi Ninjas
DroidKaigi 2021

DroidKaigi 2021

サイボウズのAndroidアプリ開発 3年間の軌跡

サイボウズ株式会社
2021年10月15日

「チームワークあふれる社会を創る」会社であるサイボウズは、チームワークを支援するソフトウェアを開発しています。Webアプリ開発会社というイメージが強いサイボウズですが、実はモバイル開発も懸命に行っています。本記事では、今まであまり外部に発信されてこなかったサイボウズのAndroidアプリ開発について、2018年〜2021年現在までの3年間の軌跡を、開発チームの変遷を交えてご紹介します。

サイボウズのモバイルアプリ開発

サイボウズは「チームワークあふれる社会を創る」という理念のもと、チームワークを支えるソフトウェアを開発する会社です。 現在はkintoneサイボウズ OfficeGaroonメールワイズという製品を提供しており、それぞれの製品に対応するAndroid/iOSアプリも存在しています。

サイボウズのモバイルアプリを開発するモバイルチーム

サイボウズはあまりモバイルアプリ開発が得意ではありませんでした。 というのも、サイボウズは元々Webアプリを主戦場とする会社であり、所属しているエンジニアの大半はWebアプリエンジニアかインフラエンジニアです。 そこで、少ない人数のモバイルエンジニアで4つの製品を開発/保守するために、モバイルチームという1つの組織に集約する形になっています。

モバイルチームと製品チームの関係図 モバイルチームと製品チームの関係図

モバイルチーム結成当初の2017年ごろのメンバーは4人でしたが、2021年現在は11人のチームに成長しました。 まだまだ4製品すべてを並行開発できるだけの人数規模ではありませんが、いくつかの製品は並行開発ができるようになってきました。 モバイルチームの詳しい成り立ちやチームメンバーの働き方は以下のブログで紹介されています。

この記事では、直近3年間のサイボウズのAndroidアプリ開発の軌跡についてご紹介していきたいと思います。

開発の軌跡

kintoneモバイルリニューアル時代(2018年8月〜)

kintoneは、ユーザの業務に合わせてユーザ自身が業務システムを作り上げられる、ノーコード/ローコードなサービスです。 サイボウズの製品の中では最も新しい製品で、2011年にローンチしています。

2018年8月ごろに、kintoneのスマートフォン向けアプリ(以下kintoneモバイル)の大規模リニューアルが決定しました。 その背景には、当時行われたkintoneのユーザアンケートで、モバイルアプリは利用頻度が高いにもかかわらず使いにくいという結果が出たことがあります。 UIを一新し、再びkintoneモバイルに期待感を持ってもらうために、リニューアルが始まりました。

このリニューアルプロジェクトには、我々モバイルチームも参加しました。 kintoneモバイルのUIは、以下の理由から全画面がWebベースで実装されています。

  • kintoneはJavascript/CSSによるユーザ側でのカスタマイズをサポートしているため
  • 社内のWebエンジニアのリソースをフル活用し、短期間でAndroid/iOS両プラットフォームの主要な画面をリニューアルしきるため

そこで、モバイルチームは以下のネイティブアプリ部分の開発を担当しました。

  1. Web UIを表示するためのWebViewを利用したブラウザ
  2. 自動ログインによるAPIClient/WebViewのセッション延長
    • 認証サーバとのセッションが有効期限切れ等で無効になった場合、再ログインして再度有効なセッションを得る
    • パスワードが変更された等の理由で認証に失敗した場合、新たな認証情報をユーザに入力してもらい、ログインをリトライする
  3. プッシュ通知の受信と表示

AndroidとiOSを兼任した開発体制

当時、モバイルチームでPGをやっていたメンバーは5人で、その中には入社したばかりのメンバーも含まれていました。 そのため、AndroidとiOSの開発を同じメンバーが兼任し、モブプログラミングで進めていくというスタイルで開発を行っていました。 モブプログラミングにより経験の浅いメンバーを補って成長させつつ、レビューとコーディングを並行で行うことでトータルの開発スピードを早くするという狙いがありました。

kintoneモバイルリニューアル時のモバイルチーム kintoneモバイルリニューアル時のモバイルチーム

また、同じ要件のアプリを別プラットフォームで実装する際、ビジネスロジックのコードをできるだけ似た形で書くという運用をしていました。 UI層やデータ層など、プラットフォームに依存する部分を排除した純粋なアプリケーションのロジック部分のコードについて、オブジェクト構造を揃え、クラス名やメソッド名など見た目をできるだけ揃える形です。 具体的には以下のアーキテクチャ図の:domainモジュール内のコードは揃えています(ViewModelのコードまでiOSと揃えるために、androidx.lifecycle.ViewModelとは別のViewModelクラスが存在します)。

kintoneモバイルのアーキテクチャ

このようにコードを揃える運用は、プラットフォーム間のスイッチングコストをできるだけ抑え、Android/iOSアプリの挙動も揃いやすくなるというメリットがありました。

ただし、デメリットも存在しました。 Androidアプリの視点から見れば、Kotlinの言語機能をフルに活用できません。 コードを揃えるというルールは、言い換えればKotlin/Swift両者で可能な書き方しか利用できない制約でもあります。 例えば、KotlinにあるDelegationやDelegate propertyはSwiftには無い記法なので、:domainモジュールでは利用されませんでした。

サイボウズ Officeリメイク時代(2020年8月〜)

サイボウズ Officeは「誰でもかんたんに使える」をコンセプトに、社内の情報共有やコミュニケーションを円滑にする様々な機能をパッケージングしたサービスです。 サイボウズ Officeは1997年のサイボウズ創業の年から提供しているサービスで、2016年にはモバイルアプリである「サイボウズ Office 新着通知」がリリースされています。

2020年8月ごろ、サイボウズ Office 新着通知のリメイクが決定しました。 元々サイボウズ Office 新着通知はWeb技術を使ったクロスプラットフォームアプリ開発ツールであるCordovaで実装されていましたが、Cordovaをメンテナンスできるエンジニアがモバイルチームにおらず、新規機能開発が停止していました。 開発を再開し、ユーザに継続してサイボウズ Officeのモバイル価値を提供していくために、Cordovaを捨ててネイティブアプリで作り直す決断をしました。 時を同じくしてAdobeがCordovaへの投資を打ち切る発表もあり、リメイク計画の後押しとなりました。

kintoneモバイルのログイン機能を流用した設計

リメイクにあたり、kintoneモバイルで作成したログイン機能(自動ログインによるAPIClient/WebViewのセッション延長)の実装をモジュール化し、サイボウズ製品間で共有利用できる形を目指しました。 ログイン機能実装の再利用により、非常に複雑な認証の実装をコストダウンさせる狙いがありました。 kintoneモバイルから切り出したログイン機能のモジュールは、社内ではSlashと呼ばれるライブラリとして別リポジトリに移されました。

Slashライブラリによる製品間でのコード共有 Slashライブラリによる製品間でのコード共有

サイボウズ Office 新着通知のメインコードには、Android Jetpackの恩恵を最大限に受けるためにKotlin Coroutineを採用しています。 ただし、kintoneモバイルはRxJavaを基盤とした実装だったので、流用するSlashライブラリはRxJavaのインターフェースになっていました。 そのため、サイボウズ Office 新着通知では必要に応じてCoroutineとRxJavaを使い分けています。

Android専属のメンバーによる開発

サイボウズ Office 新着通知リメイク時にはkintone集中時代に比べ、モバイルチームの人数も増えました。 さらに、モブに要する人数を減らして稼働できるだけのスキルもメンバーに身についてきました。 そこで、サイボウズ Office 新着通知ではAndroidとiOSそれぞれに専属のメンバーを2人割り当てました。

サイボウズ Officeリメイク時のモバイルチーム サイボウズ Officeリメイク時のモバイルチーム

専属メンバーによる開発は、kintoneモバイルで行ったビジネスロジックのコードを揃えるという開発スタイルの問題点を解消しました。 よりAndroid/Kotlinに最適なコードが書けるようになり、メンバーの技術スキルの向上にも繋がっています。 iOSのことを考えずに実装できるというのは考慮事項が減ったことを意味し、よりAndroidに集中した開発ができていると思います。

これからの挑戦

社内用ライブラリの技術的課題の解決

kintoneモバイルのログイン機能を切り出して作成したSlashライブラリですが、これはライブラリとは名ばかりのコード群です。 ロジックは分離可能な形で実装していましたが、実際は複雑なログイン仕様を満たすためにクラス同士の密結合があり、読み解くのが難しい状態です。 また、kintoneモバイルの設計で実装されたコード群なので、技術要件の違うサイボウズ Office 新着通知からは利用しづらい部分もあります。 元々ライブラリとして設計されたコードでは無いため、利用側に大きい負担を強いるモジュールとなってしまっています。

本来の目的であったログイン実装の製品間での共有を運用していくために、Slashライブラリの大幅なリファクタリングを計画しています。 既に利用している製品への影響をできるだけ少なく、新しい設計のコードに移行していく活動が、モバイルチームの次の技術的な挑戦です。

モバイルチームから各製品開発チームへ

サイボウズでは、モバイルチームという1つのチームに集約してモバイルアプリ開発を進めています。 その中には2つ以上の製品を担当しているメンバーもいます。 このような体制は、製品間でノウハウを共有しやすいというメリットがありますが、1つの製品に集中して開発できないというデメリットもあります。 例えば、重大な不具合が見つかって急いで修正しなければならない場合、製品担当を兼務していると片方のコミット度合いを下げることになってしまいます。 今以上に製品の価値を積み上げていくには、1つのモバイルチームでサイボウズ全体のモバイルアプリ開発を請け負っている状況は改善する必要があります。

そこでサイボウズでは、4製品×2プラットフォームのアプリにそれぞれ専属のエンジニアを2人以上割り当て、製品の価値を継続的にデリバリー可能な、製品単位で独立したモバイル開発チームを作ろうとしています。 そして、製品を横断する活動はモバイルコミュニティとして根付かせることができれば、ノウハウ共有と並行開発を両立できると考えています。

製品・プラットフォーム単位で独立したモバイル開発チーム 製品・プラットフォーム単位で独立したモバイル開発チーム

We are hiring!!

スマートフォンやタブレットなどモバイル端末を多くの人が所有する現代において、サイボウズの理念である「チームワークあふれる社会を創る」を実現するためには、Android技術の力が必須だと我々は考えています。 サイボウズは1,000万のユーザが使う製品を提供している、1,000人近い従業員数の企業ですが、その中でAndroidアプリエンジニアを名乗っているメンバーは3人、Androidアプリ開発に関わっているエンジニアは5人です。 Androidの力を借りてチームワークあふれる社会を実現するにはあまりに少ない人数です。

この状況は裏を返せば、サイボウズのAndroidアプリ開発において貢献できる点は無限にあるということでもあります。 我々と共にチームワークに貢献するAndroidアプリを作りませんか? あなたが持つAndroidアプリの開発スキルはサイボウズで数少ない価値ある個性であり、あなたが書いたコードはサイボウズ製品を使っている多くのユーザに良い影響を及ぼします。 サイボウズのAndroidアプリ開発をリードする1人になってくれるあなたをお待ちしております!

著者紹介

向井田 一平

サイボウズ株式会社 開発本部 モバイルチーム所属

2018年に新卒でサイボウズに入社しました。 kintoneのAndroid/iOSアプリ開発を経て、現在はサイボウズ Office 新着通知のAndroidアプリ開発を担当しています。

@mr_mkeeda

サイボウズ株式会社
サイボウズ株式会社
サイボウズは「チームワークあふれる社会を創る」を理念として、社会のチームワーク向上を支援する企業です。チームワークのために欠かせない情報共有ツールを提供するグループウェア事業に取り組んでいます。
コーポレートサイトへ