1
/
5

DroidKaigi 2024 開催直前 アンドパッドらしい Android アプリ「オフライン対応」機能の開発自慢!

DroidKaigi 2024 まであと 2 日になりました! アンドパッドは 2021 、 2022 、 2023 に続き、 GOLD SPONSOR として協賛しています。

そんな DroidKaigi 大好きなアンドパッドには、 2023 で一つだけ心残りがありました。 それは 2023 のアンドパッドブースで行ったアンケートの結果です。

質問の一つにアンドパッドの認知を伺う質問を設けていたのですが、おかげさまで 80% 近くの方がアンドパッドはご存知だったものの、 45% を超えてアンドパッドのプロダクトは知らないと回答されたのです。

Q. アンドパッドを知っていましたか?
(選択肢)
1. このカンファレンスで初めて知った
2. 名前は知っていたがプロダクトは知らなかった
3. 名前もプロダクトも知っていた

この記事ではアンドパッドが何を作っているのか、 DroidKaigi 2024 参加者の皆さまにぜひ知ってもらい、そして興味も持ってもらいたい、という気持ちでお届けします! 取り上げるのは、「 スマホアプリなのに "オフライン化" !? 」 という ANDPAD の特徴がでた機能です。

そこで、その開発を主導した 橋詰 篤志松川 知憲 に登場してもらい、オフライン対応がどんな機能なのか、どんな技術を使ったのか、そして ANDPAD 開発者として DroidKaigi 2024 で注目しているセッションを聞きました!

橋詰 篤志

大学卒業後、メーカーの新規事業開発部門で Windows アプリ、組み込み機器、Webサービス、ゲーム機などの開発に携わる中で Android に出会う。 その後、コミュニケーションサービスや QA コード決済サービス会社でのアプリ開発を経験し、 2021 年 10 月にアンドパッドに入社。 現在は Flutter でのアプリ開発も行っている。

松川 知憲 @mtkw0127

2019 年に SIer に新卒入社し Java による金融機関向けの業務アプリケーション開発のプロジェクトに従事。 2022 年よりアンドパッドに入社し Android アプリエンジニアとしてのキャリアを開始。 施工管理アプリの Android の開発を担当。 DroidKaigi 実行委員会の一員。

なぜ Android エンジニアに?

―― では、自己紹介としてお二人が Android エンジニアになられたきっかけを伺えますか?

橋詰: 2008 年当時ソニーの新規開発部門に在籍していた際、携帯端末で動くアプリのプロトタイプを開発しようと取り組んでいました。 リッチな UI をもつアプリの実現を目指していたのですが、 i-mode や組み込みソフトウェアで実現するには難しい代物でした。 そんなときに Google から Android の前身となる Android Dev Phone 1 という端末が各国の開発者向けに発売され、それに飛びついたところ、簡単にリッチなアプリが開発できて、面白くて熱中しました。 それがきっかけですね。

松川: 年季が違いすぎて驚きです。

―― 確かに、そんな Android 黎明期があったとは知らなかったですね。 松川さんはどうでしたか?

松川: もともとはアンドパッドに入社する前に SIer にいて Java で業務アプリケーションを開発していました。 ただ開発していたのが、金融機関向けの夜間バッチ処理の開発だったので、お客様の手元で使ってもらえるものを開発したくなり、アンドパッドに転職しました。 それから Android アプリ開発を始めたのがきっかけです。

―― それまでに Andoid 開発の経験はあったのですか?

松川: いえ、アプリ開発は初めてで、さらに言うと Kotlin を書くのも初めてでした。 とはいえ Java の経験があったので、 Kotlin そのものはそれほど難しくはありませんでした。

―― なるほど。 ただアプリ開発も言語も初めてという方を採用するのは珍しいですね

橋詰: アンドパッドとしては珍しいかも知れませんが、松川さんはちゃんとコーディング試験を突破していますし、技術面接でも考える力があることがわかり、未経験で入社してからでも十分にキャッチアップできると判断して採用しました。 どちらかというとエンジニアとしての基礎力を評価しました。

―― 橋詰さんの評価基準に狂いはなかったですね!

オフライン対応 !?

―― そんなお二人が取り組んだのが Android アプリの「オフライン対応」でした。 スマホアプリなのにオフライン対応というのは、とても珍しいことだと思うのですが、そもそもなぜこのような対応が求められたのでしょうか?

橋詰: 建築・建設業界と一口に言っても幅の広い業界で、住宅やビルといった建築工事の現場だけでなく、土木工事も、もちろん含まれます。 ときには橋や道路、トンネルなど電波の届かないところでの作業が発生します。 これが現場のユーザーがとても困っていたことでした。

―― あまり読者には馴染みのないことなので、どのようなことで困っていたのか説明していただけますか?

橋詰: 建設現場や工事現場では、工事写真というものが必要になります。 これは建てた後ではどんな工事をしたのか物理的に見えなくなってしまうため、工期中様々なタイミングでその工事箇所を撮影し、記録します。 その際、工事黒板と呼ばれる、工事名や実施日などを記した黒板と一緒に撮影することが法律上でも求められています。 この工事黒板は今では電子黒板でも OK となり、現場で電子黒板を使って工事写真を撮影することが多くなりました。

―― なるほど、工事黒板というものがあるのですね。 ですが、電波の届かないところでも普通にオフラインで撮影したあとに、電波が通じるところでアップロードすればよいのではないでしょうか?

橋詰: それがそうはいかないのです。 電子黒板を使った工事写真の撮影には改ざん検知が求められており、後でアップロードするのでは、それを担保できないのです。

―― そうか、確かに改ざんの防止が必要ですね。 理解しました。 一方で、オフライン対応は聞くからに複雑そうですが、実際、エンジニアとして要望を聞いたときにどう思われたのでしょうか?

橋詰: 技術的に面白そうと思いましたし、ユーザーも明確で、開発できるととても喜んでもらえそうと思えたので、モチベーションは高かったですね。

松川: 私も面白そうと思ったのですが、仕様によっては技術的にはとても厳しいものがあると思いました。

―― というと、どのあたりが厳しいと思われていたのでしょうか?

松川: これは先日行われた iOSDC Japan 2024 のアンドパッドのスポンサーセッション でも語られたことなのですが、何をもってしてオフラインとするかが難しいところです。 ほとんど通信できない微弱な電波であっても電波があればオンラインというのか、完全に電波が通じなければオフラインというのか、その切り分けが非常に難しいところでした。

―― 確かに、どこからをオフラインとするかは、とてもわかりにくいですね

松川: それを PdM がジャッジして、ユーザーが明示的に今はオフラインだと判断し、ボタンを押すと、 "オフラインモード" という新しいモードに切り替える仕様になったので、それによってグッと開発しやすくなりました。

―― どのような機能になったのでしょうか?

松川: ユーザーがオフラインモードを選択すると、データストア先をサーバではなく端末にするようにして、オンラインに戻れば、またユーザーがオンラインモードに戻し、工事写真をサーバーにアップロードする、という機能になりました。 

(写真は松川。 撮影はすべて hsbt )

データストアは Room を使って端末に保存、追加画面は Jetpack Compose を使用して実装

―― オフライン対応機能は具体的にはどんな実装にしたのでしょうか?

橋詰: Android には SQLite を端末で使用できるため、そのアクセスを抽象化した Room というライブラリを使いました。 他にもやり方はあるのですが、一番標準的なものですし、標準には従うというのも大事なことです。

―― なるほど、橋詰さんの技術選定のこだわりが垣間見えますね。 その他にはどのような技術を採用したのでしょうか?

橋詰: オフラインモード用の画面を新しく開発することにしたのですが、その開発には Jetpack Compose を使いました。 これは開発スケジュールが非常に短く設定されたこともあって、効率的に開発を進めることが求められていたことも一因にあります。

―― 実際、使用してみていかがでしたか?

松川: 写真を一覧で出す画面があったのですが、過去に Compose で実装したことがあったので、それをさっと再利用できました。 また、テストも書きやすいため、今後のメンテナンスも非常にやりやすそうです。

実はパフォーマンス改善も必要だった

―― 実装をふりかえってみて、うまくいったことはございますか?

松川: 並行して iOS アプリでも同じ機能の実装を進めていたのですが、テーブル構造を一緒にすり合わせしていたので、仕様をあとでまたやり直すといった手戻りがなかったのはよかったですね。

橋詰: あとは、オフラインモードは既存の画面にも影響を与えるものだったので、ビッグバンリリースを避け、お客様から見えないようにして機能を追加するようにしました。 これによって feature ブランチをきって、 main の更新があるたびに rebase をしながらコンフリクトを解消する、という作業からも開放され、効率性と耐障害性も高められたと思います。

―― とてもいいですね! ほかに自慢話があれば、ぜひ伺いたいです。

松川: オフラインモードの操作として、ユーザーがオフラインモードからオンラインモードに切り替えた後、撮影した工事写真をアップロードするようになっています。 そうすると写真を大量にアップロードすることになるのですが、これまでは大量にアップロードすることはあまり想定されておらず、パフォーマンスが問題になりました、 これを Kotlin の Coroutines を使って、写真を一定枚数で分割し、それを並行処理するようにしたところ、うまくいきました。

―― Kotlin を存分に活用していますね! 新機能の開発だけでなく、それに伴ったエンハンスもあったとは。 一方で、課題になったことはございますか?

橋詰: データの整合性にはとても気を遣いました。 オフラインモードでは電子黒板を事前にダウンロードして撮影するのですが、この電子黒板は撮影者だけでなく他のユーザーも編集・更新が可能です。 また逆にオフラインモードでも撮影者が電子黒板の編集・更新ができるので、いざアップロードした際に、データが異なることが可能性としてあります。

―― それはとても解決が難しそうですね。 どのように対応したのですか?

橋詰: スバリ解決する策はないので、仕様を工夫してもらったほか、異なったデータの場合はデータを複製して保存できるようにするなど、愚直にやりました。 とても難しかったですね。

―― コツコツと苦労した様子が目に浮かぶようです

橋詰: 実際リリースした際のユーザーのフィードバックを見ていると、そんな苦労も吹き飛び、開発した甲斐があったと感じられました。 ユーザーの定性的な評価だけでなく、実際に定量的な売上の増加も見えました。 それだけでなくユーザーからのフィードバックの中には、オンラインで使用できる環境だけど、オフラインモードにして使っている、という想定外の使われ方も知ることができました。

―― それは想定していないユースケースですね。 なぜ、そんな使い方になったのでしょう?

橋詰: オフラインモードは通信しないので、ネットワーク越しの post や update 処理がなく、アプリがサクサク動きます。 ユーザーが現場で入力する時間は限られているので、そんなところにも寄与できたことがうれしかったですね。

アンドパッドの Android アプリ開発に役立つ DroidKaigi 2024 のセッション

―― まもなく DroidKaigi 2024 です。 ANDPAD を開発する Android エンジニアとして注目するセッションを伺っていきましょう! まずは 9/12 でお聞かせください。

橋詰: 「サプライチェーン攻撃に備える 」 (9/12 11:20 ~) に注目しています。 ANDPAD の開発でも 3rd パーティライブラリは使っているものの、普段意識しにくいだけにこれを機に勉強したいですね。

―― 各言語のカンファレンスでも注目されているテーマですね

松川: 私は「 Kotlin 2.0 が与える Android 開発の進化 」 (9/12 12:20 ~) ですね。 とても野心的なメジャーバージョンアップで、 K2 コンパイラーなど、 ANDPAD の開発でもいろいろ便利に使えて、個人的にもワクワクする機能があるので、一気にキャッチアップしたいと考えています。

―― 5 月に JetBrains が発表したばかりですものね。 とても便利そうです

橋詰: 9/12 だと、あとは「 電池寿命を考えた位置情報の監視方法を考える(Geofence) 」(9/12 15:20 ~) も ANDPAD 開発者として注目したいですね。 ANDPAD の開発でも使用している技術ですし、なかなか悩ましいところなので、どのように実装しているのか、ヒントが得られそうで、とても興味があります。

―― ニッチテーマですが、俺得ならぬ ANDPAD 得なセッションですね。 尽きないところですが、 9/13 に移りましょう。

橋詰: 「 アプリをリリースできる状態に保ったまま段階的にリファクタリングするための戦略と戦術 」 (9/13 10:20 ~) は ANDPAD でも動いているアプリを壊さずにリファクタリングしているので、他社がどのように実現しているのかはとても知りたいですね。

松川: これは ANDPAD の開発というより個人的に気になっているのが「 Contextを理解する 」 (9/13 10:20 ~) です。 Context は頻度高く使っているのですが、詳細のページに書いてある "なんとなく使っているという方もいるのではないでしょうか" が刺さってしまいました。 特に危険な使い方はとても気になっています。

―― 発表として採択されるのですから、 Context を雰囲気で理解している方が一定数いるのでしょうね

橋詰: あとはチーム開発の目線で「 Debugging: All You Need to Know 」 (9/13 16:20 ~) も注目しています。 debug 手法は個人の中に溜まりがちなので、ぜひともチーム内で共有したいですし、新しく ANDPAD の Android 開発に携わる人とかに勧めたいですね。 とてもありがたく聞かせてもらおうと思います。

ブースでも ANDPAD 推し!

―― DroidKaigi 2024 でもアンドパッドはブース出展を行いますので、見どころを宣伝しましょう。

松川: 前年の認知度アンケート(注: 記事冒頭のアンケートのこと)で、社名のアンドパッドは知っていても、プロダクトの ANDPAD は知らないという方が多かったので、今回はそれを存分に知ってもらおうとブースを企画しました。

―― どんな内容になったのですか?

松川: 今回お話したオフライン対応機能を実装したプロダクトの一つである ANDPAD黒板 を展示します! 先ほどご紹介した工事黒板を実際に展示しながら、 ANDPAD黒板を使って、いかに業務が楽になったのかというのを体験してもらいます。

―― それはわかりやすい体験ですね

松川: 他カンファレンスでも ANDPAD黒板はその体験のわかりやすさからブース来場いただいたエンジニアに好評だったので、これをきっかけに ANDPAD に興味を持ってもらいたいですね。

橋詰: あとは必ずノベルティが当たる、恒例の ANDPAD おみくじも用意しています。 ノベルティには、他のカンファレンスでも好評を得ている "ミニ工具セット" を用意しているほか、新作ノベルティも投入されると聞いています。 私も現物はまだ見てないのですが、 ANDPAD らしく、建築・建設業界らしさと実用性が高いものになっていると聞いているので、ぜひ楽しみにしてもらいたいところです。

―― 高まりますね! では、最後に DroidKaigi 2024 参加者に向けてメッセージをお願いします!

橋詰: ぜひアンドパッドブースに足を運んでいただいて、普段は見る機会が少ない建築・建設業界向けの SaaS を触ってみてください。 皆さんにお会いできるのを楽しみにしています!

松川: DroidKaigi は色々な知見を得ることができ、 Android エンジニアの方と繋がることができる素晴らしいイベントだと思います! ブースにいるのでぜひ会場でお話しましょう!

―― 今日はありがとうございました!

橋詰・松川: ありがとうございました!

ANDPAD らしさが出ている「オフライン対応」機能について、その開発模様を自慢して参りましたが、いかがでしたか?

アンドパッドが開発している建築・建設業界向けプロダクトは公開しているだけでも 10 以上を超え、それぞれのプロダクトが、それぞれのユーザーが抱える課題を解決しています。 ここでは紹介しきれないほどのプロダクトストーリーがありますので、ぜひアンドパッドブースで ANDPAD黒板 を体験いただき、さらに深堀りして Android エンジニアとプロダクトを肴にトークできることを願っています!

では、 DroidKaigi 2024 でお会いしましょう!



If this story triggered your interest, why don't you come and visit us?
Kotlinで建築・建設業界の課題解決をするAndroidエンジニア募集
株式会社アンドパッド's job postings
2 Likes
2 Likes

Weekly ranking

Show other rankings
Like 広瀬 俊哉's Story
Let 広瀬 俊哉's company know you're interested in their content